DNS服务基础
DNS(Domain Name System,域名系统)工作原理
互联网内有很多台DNS 服务器,为客户机提供信息查询服务:
为什么需要DNS系统?——互联网中的114查号台/导航员,更易记。
DNS域名解析服务器
• 用途:提供一种信息(域名<-->IP地址)查询服务
• 功能:– 正向解析:根据注册的域名查找其对应的IP地址
www.baidu.com的IP地址是?
– 反向解析:根据IP地址查找对应的注册域名,不常用
IP地址119.75.23.45的域名是?
早期的域名查询解析方案:
没有DNS服务器,在每台客户机上存放一个文件/etc/hosts
补充: /etc/hosts 主机名与IP的对应记录 #起到DNS解析的作用,只为本机提供服务
DNS的分布式结构
互联网中的DNS服务器
官方/权威DNS —— 至少负责一个区域
根服务器*(13台): . 负责管理根域
一级DNS: 分别管理 .cn、.com、.us、.net等一级区域
二级DNS:分别管理 .tedu.cn、.net.cn等二级区域
三级DNS:.pku.edu.cn、.....
所有的域名都要以"."结尾 "."根域
• Full Qualified Domain Name,完全合格主机名
需要注册、付费才获得使用权
站点名.域名后缀 、 站点名. .. .. .二级域.一级域
常见的顶级/一级域名:
国家/地区域:.cn、.us、 .kr、 .hk、 .tw、.jp……
组织域:.com、 .net、 .deu、 .org、 .gov、 .mil……
DNS域名管理
IANA(Internet Assigned Numbers Authority),互联网数字分配机构
Ø 整个域名系统的最高权威机构
Ø 主管DNS根、.int、.arpa等国际化域名资源
CNNIC(China Internet Network Information Center),中国互联网络信息中心
Ø 主管国家顶级域.cn
域名代理/注册/购买服务商
新网,http://www.xinnet.com
万网,http://www.net.cn 已被阿里巴巴收购
中国互联,http://hulian.top
BIND服务分析
BIND域名服务(Berkeley Internet Name Daemon)
BIND,伯克利Internet域名服务,官网:https://www.isc.org/
• BIND服务器端程序
– 软件包(S):bind、bind-chroot
chroot:change root directory,改变根目录(用指定的目录作为一个程序的根目录)
虚拟根 /var/named/chroot/、笼环境
– 软件包(C):bind-utils、各种网络客户端程序(ping、firefox、wget.. ..)
– 主要执行程序:/usr/sbin/named
– 系统服务:named
– 默认端口:TCP/UDP 53 tcp:一般常用于主从同步
udp:一般常用于 客户端解析
– 运行时的虚拟根环境:/var/named/chroot/
服务端配置文件:
• 主配置文件:/etc/named.conf 【全局设置、DNS区域……】本机DNS负责解析那些域名
• 地址库文件:/var/named/自定义文件名 记录具体的“域名<-->IP地址”记录
客户端配置文件:/etc/resolv.conf
清理冗余配置,三种注释方法:
# 注释一整行或行内的部分文字
// 注释一整行或行内的部分文字
/* */ 可注释连续的多行文字
###############################################################################
全局配置部分:设置监听地址/端口、地址库存放位置等
options {
listen-on port 53 { 127.0.0.1; }; //监听地址和端口
listen-on-v6 port 53 { ::1; };
directory "存放地址库文件的默认目录路径"; //指定地址库文件路径
allow-query {any;}; //允许任何客户机查询
};
//include "/etc/named.rfc1912.zones"; //可载入其他配置
区域配置部分:定义DNS区域、类型、地址文件路径等,关键词IN表示Internet,可省略
zone "DNS区域名字" IN { #定义正向区域,指定负责解析的区域
type master; #类型为本区域的权威服务器(区域类型为主DNS)
file "地址库文件的文件名"; #指定区域地址库文件的名字:域名.zone
};
检查配置语法:named-checkconf [配置文件] //有错误会有提示,正确则无提示信息
less /var/log/messages
###################################################
地址库文件
全局TTL配置项及SOA记录
Ø $TTL(Time To Live,生存时间)
Ø SOA(Start Of Authority,授权信息开始)
Ø 分号”;”开始的部分表示注释
@ IN SOA 区域名.区域管理邮箱.(……) //在当前文件内,本区域名可简写为@
NS,域名服务器(Name Server)记录
A,地址(Address)记录,仅用于正向解析区域
区域文件内容解释
$TTL 1D //地址库记录的默认有效记录的生存周期
@ IN SOA @ 管理员邮箱. (
0 ; serial //更新序号
1D ; refresh //刷新时间
1H ; retry //重试间隔
1W ; expire //失效时间
3H ) ; minimum //无效记录的生存周期
@ NS 本区域的DNS服务器的合法域名.
本区域DNS服务器的站点名 A 本区域DNS服务器的IP地址
站点1的站点名称 A 站点1的站点IP地址
站点2的站点名称 A 站点2的站点IP地址
检查配置语法:named-checkzone 区域名 配置文件
less /var/log/messages
###################################################
DNS查询测试
为客户机设置默认使用的DNS
/etc/resolv.conf——nameserver 192.168.4.7
使用host测试命令,指定DNS地址
host 查询目标 [@DNS地址]
配置及使用DNS客户端的基本过程:
修改配置文件/etc/resolv.conf,添加nameserver=DNS服务器地址
使用host命令查询,提供目标域名作为参数
客户端虚拟机pc207
[root@pc207 ~]# vim /etc/resolv.conf #指定DNS服务器地址
nameserver 192.168.4.7
[root@pc207 ~]# host www.tedu.cn
###################################################
搭建单区域DNS服务器
为DNS区域tedu.cn搭建一台DNS服务器,以便用户能通过域名的方式访问网站。测试阶段主要提供以下正向记录: svr7.tedu.cn ---> 192.168.4.7
pc207.tedu.cn ---> 192.168.4.207 www.tedu.cn ---> 192.168.4.100
配置完成后在客户机上验证查询结果。
配置思路: 主配置文件:/etc/named.conf 负责解析的域名 tedu.cn
地址库文件:/var/named/ 主机名与IP对应关系
配置DNS服务器——虚拟机svr7:
1.安装软件包 bind bind-chroot # yum -y install bind bind-chroot
2.建立主配置文件/etc/named.conf
# cp /etc/named.conf /etc/named.bak //备份默认配置
# vim /etc/named.conf
options {
directory "/var/named"; #指定地址库文件存放路径为默认存放位置
};
zone "tedu.cn" IN { #指定负责解析的区域
type master; #类型为本区域的权威服务器
file "tedu.cn.zone"; #指定地址库文件的名字
};
# named-checkconf /etc/named.conf #检测格式是否正确
3.建立地址库文件 "tedu.cn.zone"
# cd /var/named //进地址库目录
# cp -p named.localhost tedu.cn.zone //-p,保持权限不变进行拷贝
# ls -l tedu.cn.zone
# vim tedu.cn.zone //修订地址库记录
$TTL 1D //文件开头部分可保持不改
……
@ NS svr7.tedu.cn. #指定域名dns服务器主机名
svr7 A 192.168.4.7 #解析dns服务器主机名,为NS主机提供A记录
pc207 A 192.168.4.207 //其他正向地址记录.. ..
www A 1.1.1.1 #正向解析记录
ftp A 2.2.2.2 #正向解析记录
# named-checkzone tedu.cn /var/named/tedu.cn.zone #检查格式是否正确
4.重起named服务,并设置为开机自起
# systemctl restart named
# systemctl enable named
配置DNS客户机pc207并测试
1.修改配置文件/etc/resolv.conf,指定默认使用哪一台DNS服务器
# vim /etc/resolv.conf
nameserver 192.168.4.7
另一配dns方法:# nmcli con modify eth0 ipv4.dns 192.168.4.7
# nmcli con up eth0
2.使用host命令查询,提供目标域名作为参数 # host svr7.tedu.cn |www.tedu.cn
另一种查询方法:# nslookup www.tedu.cn
临时指定使用哪一台DNS服务器(不修改/etc/resolv.conf文件)的查询测试方法:
host 目标域名 DNS服务器地址
# host pc207.tedu.cn 192.168.4.7
意义:去询问DNS服务器(192.168.4.7)站点www……的IP地址是多少?
###############################################################################
特殊解析
地址记录应用
DNS轮询:基于DNS的站点负载均衡
一般只用在正向区域文件中,每个IP提供镜像服务内容
同一个域名 ==》多个IP地址:站点名称 A IP地址1
站点名称 A IP地址2
……
案例:配置DNS轮询
1)修改DNS服务器上tedu.cn区域的地址库文件,在末尾添加轮询地址记录
# vim /var/named/tedu.cn.zone
www A 192.168.4.100
www A 192.168.4.110
www A 192.168.4.120
2)重启系统服务named # systemctl restart named
3)在客户机pc207上测试轮询记录
针对目标www.tedu.cn执行多次查询,观察第1条结果的变化: # host www.tedu.cn
2.重起named服务
虚拟机pc207:测试 : ping -c 1 www.tedu.cn
泛域名解析(站点名不确定):多个任意域名 ==》同一个IP地址: * A IP地址
匹配本域内未定义的任何主机地址 直接以*条目匹配
案例:配置泛域名解析
实现以下解析记录:任意名称.tedu.cn ---> 119.75.217.56(配置多对一的泛域名解析)
1)修改DNS服务器上指定区域的地址库文件,在末尾添加*通配地址记录
# vim /var/named/tedu.cn.zone
tedu.cn. A 9.9.9.9 //直接解析tedu.cn域名
* A 119.75.217.56//匹配所有
2)重启系统服务named; # systemctl restart named
3)测试。当查询未知站点(地址库中没有明确记录)时,以 * 对应的IP地址反馈:
# host station123.tedu.cn|movie.tedu.cn|tts8.tedu.cn
#####################################################
stu10.tedu.cn ----------> 192.168.4.10
stu11.tedu.cn ----------> 192.168.4.11
.........
stu50.tedu.cn ----------> 192.168.4.50
$GENERATE 造数函数
$GENERATE 10-50 stu$ A 192.168.4.$
#######################################################
DNS子域授权
域名的层级关系:
属于不同机构管理的上下级区域: 关系不那么亲密【迭代】
.cn 是 tedu.cn 的上级区域
.tedu.cn 是 .cn 的下级域
属于同一个机构管理的上下级区域: 关系非常亲密
.tedu.cn 是 .bj.tedu.cn 的上级区域(父域)
.bj.tedu.cn 是 .tedu.cn 的下级区域(子域)
子域授权(告诉父DNS两个信息:子域名称、子DNS的地址):
修改父DNS的地址库文件,添加两行——
子域名称. NS 子DNS的FQDN.
子DNS的FQDN. A 子DNS的IP地址
子域授权的作用:
适用于同一个DNS组织(父DNS、子DNS属于同一个组织)
Ø 父/子域的解析工作由不同的DNS服务器负责
Ø 父DNS服务器应该有为子域迭代的能力
当客户机向父DNS查询www.bj.tedu.cn时,授权给子DNS处理,获得反馈结果后发给客户机
总公司 www.tedu.cn (父域) 192.168.4.7 负责www.tedu.cn域的解析
分公司 www.bj.tedu.cn (子域) 192.168.4.207 负责bj.tedu.cn域的解析
1.父域的域名 向 父域的DNS服务器 解析
2.子域的域名 向 子域的DNS服务器 解析
3.子域的域名 向 父域的DNS服务器 解析
4.父域的域名 向 子域的DNS服务器 解析
#####################################################
子域转发父域:向 子域 的DNS服务器, 解析 父域的域名
在虚拟机B上:
[root@pc207 ~]# vim /etc/named.conf
zone "tedu.cn" IN {
type forward;
forwarders { 192.168.4.7; };
};
[root@pc207 ~]# 重起 named服务
[root@pc207 ~]# nslookup www.tedu.cn 192.168.4.207
转发父域(修改子DNS的named.conf)
zone "父区域" {
type forward;
forwarders { 父DNS的IP地址; };
};
缓存DNS服务器(代理/中介)
子域授权 + 递归
子域授权 + 禁止递归 == 迭代
当客户机从浏览器访问 www.qq.com 时候 ——
1)查找 www.qq.com 的IP地址
缓存 --> /etc/hosts -->
--> 首选DNS服务器(由/etc/resolv.conf文件指定)
2)向获得的IP地址发送一个HTTP访问请求
3)目标网站回应一个网页文件
检查HTTP请求包中的URL地址,
根据URL地址找到对应的网页文件
4)浏览器显示这个网页
首选DNS如何找到客户机请求的www.qq.com站点的IP地址?
1)缓存
2)找其他的DNS服务器
方式1:另外一台首选DNS(缓存)
方式2:根DNS --> 一级域DNS .. ..
父DNS、子DNS属于不同的组织
1)授权子域 (修改父DNS的地址库):
子区域名. NS 子DNS的FQDN.
子DNS的FQDN. A 子DNS的IP地址
2)禁止递归(迭代,修改父DNS的named.conf)
options {
.. ..
recursion no;
};
DNS分离解析 ——
用途:针对同一个FQDN,为不同的客户机提供不同的结果
配置要点(修改named.conf):
view "视图1" {
match-clients { 客户机地址1; .. .. };
zone "区域名" {
type master;
file "地址库1";
};
};
view "视图2" {
match-clients { 客户机地址2; .. .. };
zone "区域名" {
type master;
file "地址库2";
};
};
.. ..
view "default" {
match-clients { any; };
zone "区域名" {
type master;
file "地址库n";
};
};
准备一台能上网的虚拟机(比如svr7) ——
1)修改虚拟机属性,把第二块网卡改成"虚拟网络 default(NAT)"模式
2)将虚拟机关机,然后再重新开机
3)配置上网参数
(酌情)# nmcli con add con-name eth1 type ethernet ifname eth1
# nmcli con mod eth1 ipv4.method auto
# nmcli con up eth1
4)确认结果(能查询外网域名)
# host www.baidu.com
配置缓存DNS服务器 ——
1)装包(bind、bind-chroot)
2)配置
# vim /etc/named.conf
options {
forwarders { 202.106.0.20; };
};
3)起服务
# systemctl restart named
查询测试:
# host www.qq.com 192.168.4.7
2. 递归/迭代查询
3. 添加转发域(父、子域DNS架构的完善)
修改子DNS的/etc/named.conf
.. ..
zone "tedu.cn" {
type forward;
forwarders { 192.168.4.5; };
};
split分离解析
农家小炒肉(域名www.12306.cn) --》价格(IP地址)
自家人:0元(IP地址3)
VIP会员:20元(IP地址2)
普通顾客:30元(IP地址1)
CDN,内容分发网络
CDN,Content Delivery Network,内容分发服务
12306 2台Web服务器<-- 蓝讯公司的CDN缓存节点 <-- 普通用户
www.12306.cn A web1的IP地址
www.12306.cn A web2的IP地址
修改成
www.12306.cn CNAME www.12306.cn.lxdns.com.
###################################################
真机搭建桥接网络:
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-enp2s0 ifcfg-br0
# cat ifcfg-br0
TYPE=Bridge //修改类型为 桥接网卡
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=br0 //修改名称为br0
DEVICE=br0 //修改设备名为br0
ONBOOT=yes
IPADDR=172.40.50.114
NETMASK=255.255.255.0
GATEWAY=172.40.50.1
DNS=172.40.1.10
# vim ifcfg-enp2s0
BRIDGE=br0 //在最后追加写入 ,意思为 桥接到br0
# systemctl restart network //重起network网络服务刷新配置
虚拟机A
1.将第二张网卡的类型,选择为br0桥接类型
2.让第二张网卡的获取IP方式为DHCP
3.重起虚拟机A的NetworkManager,让第二张网卡获取IP
4.查看第二张网卡的IP,测试与172.40.1.10通信
#######################################################
基本配置步骤:
1.配置父DNS服务器(www.tedu.cn-->192.168.4.100)
主配置文件/etc/named.conf: # vim /etc/named.conf
options {
directory "/var/named";
};
zone "tedu.cn" {
type master;
file "tedu.cn.zone";
};
正向地址库文件: # vim /var/named/tedu.cn.zone
@ NS svr7.tedu.cn.
svr7 A 192.168.4.7
pc207 A 192.168.4.207
www A 192.168.4.100
确保服务已启用: # systemctl restart named
2)测试 —— 向父DNS可成功查询到父区域中的站点 # host www.tedu.cn 192.168.4.7
2.配置子DNS服务器(www.bj.tedu.cn-->1.2.3.4)
1)将pc207配置为子DNS服务器,确认配置
安装软件包bind、bind-chroot: # yum -y install bind bind-chroot
建立主配置文件/etc/named.conf:
# mv /etc/named.conf /etc/named.conf.origin //备份默认配置
# vim /etc/named.conf //建立新配置
options {
directory "/var/named";
};
zone "bj.tedu.cn" { //定义子DNS的正向区域
type master;
file "bj.tedu.cn.zone";
};
建立地址库配置文件:
# cd /var/named/ //进地址库目录
# cp -p named.localhost bj.tedu.cn.zone //参考范本建地址库文件
# vim bj.tedu.cn.zone //修订地址库记录
@ NS pc207.bj.tedu.cn. //本区域DNS服务器的FQDN
pc207 A 192.168.4.207 //为NS主机提供A记录
www A 1.2.3.4 //添加测试记录 www.bj.tedu.cn
2)启动系统服务named,并设置开机自启 # systemctl restart named
# systemctl enable named
3)测试——向子DNS可成功查询到子区域中的站点:# host www.bj.tedu.cn 192.168.4.207
3.为父DNS启用子域授权——修改父域的地址库文件,授权子域 + 递归:
Ø添加到子域的NS记录
Ø确保有可用的子DNS服务器的A记录
为一个DNS区域添加授权子域时,需要修改此区域的地址库,添加以下记录:
子域域名. IN NS 子DNS的FQDN.
子DNS的FQDN. IN A 子DNS的IP地址
1)测试 —— 未配置子域授权时,向父DNS无法正确查询到子区域中的站点
# host www.bj.tedu.cn 192.168.4.7
若父DNS配置有 * 泛域名,则反馈的结果为对应的IP地址119.75.217.56,而不是子DNS中记录的1.2.3.4;若父DNS未配置有 * 泛域名,则找不到解析结果(not found)。
2)修改父DNS区域的地址库,添加授权子域信息 # vim /var/named/tedu.cn.zone
bj.tedu.cn. NS pc207.bj.tedu.cn. //子区域及子DNS主机名
pc207.bj.tedu.cn. A 192.168.4.207 //子DNS的IP地址
# systemctl restart named //重启服务
4.测试子域FQDN查询,向父DNS可查询子域中的站点:# hos www.bj.tedu.cn 192.168.4.7
###############################################################################
递归/迭代查询
DNS查询的工作方式
如何获取解析结果?——一次递归,多次迭代
对于DNS客户机来说:
递归查询:中发起一次查询请求
迭代查询:需要发起两次或更多次查询请求
对于DNS服务器来说:
递归查询:愿意为客户机查询非本机管理的域名
迭代查询:不愿意为客户机查询非本机管理的域名,但是对于子域内的站点,当前DNS会为客户机反馈子域授权信息,即子域授权+禁止递归
如何开启/禁用递归
递归查询是默认开启的,也可以设置recursion yes;来明确启用
若要禁止递归,需要设置recursion no;
# vim /etc/named.conf
options {
directory "/var/named";
recursion no; //禁用递归
};
验证迭代查询:
Windows客户机上的 nslookup 命令
Linux客户机上的 dig命令,更专业的DNS测试工具,由软件包bind-utils提供
格式:dig @DNS服务器 目标地址
QUESTION SECTION 问题部分
ANSWER SECTION 答案部分
AUTHORITY SECTION 授权区域
ADDITIONAL SECTION 附加信息部分
缓存DNS
互联网DNS角色
权威/官方DNS服务器的特点:
至少管理一个DNS区域,需要IANA等官方机构授权,典型应用:根域DNS、一级域DNS……
典型应用:根域DNS、一级域DNS、二级域DNS、三级域DNS、.. ..
缓存DNS:不需要管理任何DNS区域,但是能够替客户机查询,而且通过缓存、复用查询结果来加快速度 作用:提高解析速度
典型应用:ISP服务商的公共DNS服务器、互联网出口带宽较低的企业局域网络
缓存DNS(要求本身能访问目标DNS)
解析记录来源
• 方式1:全局转发– 将请求转发给指定的公共DNS(其他缓存DNS),请求递归服务
公共DNS:202.106.0.20、8.8.8.8、114.114.114.114
options {
directory "/var/named";
forwarders { 公共DNS的IP地址(可多个,一般只使用前3个); };
};
• 方式2:根域迭代– 依次向根、一级、二级......域的DNS服务器迭代
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
##################################################
全局转发式缓存
前提条件:缓存DNS与上述DNS之间网络畅通
基本配置步骤
1.建立named.conf主配置文件,设置forwarders{公共DNS;};转发器
2.启动named服务
3.验证缓存DNS服务器
可能存在问题:虚拟化平台dnsmasq服务冲突
解雇办法:pkill -9 dnsmasq
#########################################################################
案例:搭建并测试缓存DNS
熟悉缓存DNS的工作过程,准备一台可上网的RHEL7虚拟机,并完成下列任务:
安装 bind、bind-chroot 包 搭建并测试基于全局转发器的缓存DNS
注意:若所在机房不具备访问互联网DNS条件,此案例改由学员自行在家完成。
前期准备:
1. 确保 客户机 --> 缓存DNS eth0 --> private1
2. 确保 缓存DNS --> 互联网其他DNS eth1 --> br0
步骤一:为虚拟机pc207提供上网条件
1)为虚拟机添加一块新的网卡,选择NAT或Bridge模式
若选择NAT模式(地址转换),则新加网卡的上网参数由虚拟化平台自动设置。
若选择Bridge模式(桥接),则新加网卡的上网参数需要参考真实网络的主机,必要时请网络管理员提供支持。
此处所列地址信息可帮助大家理解上网条件,但不作为练习的配置依据:
# ifconfig eth1 //检查新增网卡的IP地址
# route -n //确认已配好默认网关
# cat /etc/resolv.conf //确认第一DNS为外部可用DNS地址
2)确保从主机pc207可访问到外部DNS
访问默认DNS可用(本机正常连网需要): # host www.qq.com
访问指定DNS可用(全局转发的前提条件):
# host www.qq.com 202.106.0.20 //国内公共DNS服务器之一
步骤二:将pc207配置为缓存DNS(全局转发式)
1)安装bind、bind-chroot软件包 # yum -y install bind bind-chroot
2)建立主配置文件/etc/named.conf
当收到来自客户机的DNS查询请求时,转发到外网的其他DNS服务器
# vim /etc/named.conf
options {
forwarders { 202.106.0.20; };
};
3)启动系统服务named,并设置开机自启
# systemctl restart named
# systemctl enable named
4)可向缓存DNS服务器pc207查询到公共域名(百度、网易等站点)
# host www.baidu.com 192.168.4.207 //查百度的站点IP
# host www.163.com 192.168.4.207 //查网易的站点IP
###############################################################################
技术要点回顾
基本概念:FQDN规范、域名层次级结构;递归、迭代
DNS服务器角色:主域、转发域、根域、缓存
域名解析应用:子域授权、轮询、泛域名;Split分离解析
觉的网络服务应用:
C/S,Client/Server架构
由服务器提供资源或某种功能
客户机使用资源或功能
常见的网络服务应用
协议 |
端口 |
服务端软件 |
FTP |
TCP 20/21 |
vsftpd |
SSH |
TCP 22 |
openssh-server |
SMTP/POP3/IMAP |
TCP 25/110/143 |
postfix/dovecot |
DNS |
TCP/UDP 53 |
bind |
DHCP |
UDP 67/68 |
dhcp |
TFTP |
UDP 69 |
tftp-server |
SMB/CIFS |
TCP 139/445 |
samba |
HTTP/HTTPS |
TCP 80/443 |
httpd |
RSYNC |
TCP 873 |
rsync |
查看各种服务对应的标准端口:less /etc/services