1、域名的定义
根域:有13组根域服务器。
一级域名(顶级域名):Top Level Domain: tld
com, edu, mil, gov, net, org, int,arpa,分为三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
二级域名
三级域名
最多127级域名
2、DNS的工作原理
每一个域都有自己的DNS服务器,负责解析本域名结尾的所有主机和ip地址的对应关系,同时也会指明下级子域的DNS服务器的ip地址,这个dns就被称为这个域的权威dns服务器,比如一个用户去访问www.baidu.com,第一次小区电信的DNS服务器上并没有baidu.com.这个域对应的ip地址,它就会去根上找,根也没有,根域的dns服务器就会把com.域DNS服务器的地址去告诉小区电信的DNS服务器,它就去com.的dns服务上去找,结果也没有,但com.的dns服务器告诉它baidu.com域的dns服务器的ip地址,它去找baidu.com域的dns服务器,这个服务器负责解析baidu.com域内的主机和ip地址的对应关系,这样解析完成。将结果告诉给用户,同时在机器上有了这个域的缓存。下次用户再访问时就不用跑到根上去找了。之所以能这样一级一级的找下去,是因为每个域的dns服务器上都有下级子域的dns服务器的ip地址。
一次完整的查询请求经过的流程:
Client -->hosts文件--> Local Cache(本机dns缓存,windows有,linux本机没有DNS缓存) --> 找到dns服务器 -->找dns服务器的缓存 --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
dns服务传输层的协议udp和tcp协议都有,其中udp的53端口作用是客户端访问我的dns服务器时解析用和主从复制用。tcp的53端口作用是主从复制,也就是要实现主从复制需要两个端口都打开。
3、资源记录
- 区域解析库:由众多RR组成:
资源记录:Resource Record, RR - 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
1、SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
2、A:internet Address,作用把名字解析成ipv4地址,FQDN --> IP
3、AAAA: FQDN --> IPv6,把名字解析成ipv6地址
4、PTR: PoinTeR,IP --> FQDN,反向解析记录,把地址解析成名字
5、NS: Name Server,用于解析当前域dns服务器的名字
6、CNAME:Canonical Name,别名记录
7、MX:Mail eXchanger,解析当前域邮件服务器的名字 - 资源记录定义的格式
语法:name [TTL] IN type value
name: 当前域的名字,例如“magedu.com.”,@可用于引用当前域的名字。
TTL:表示缓存记录的有效期,可从全局继承。
IN:表示internet
type:表示记录类型
varlue:表示值
- SOA记录
name: 当前域的名字,例如“magedu.com.”
value: 有多部分组成
(1) 当前域的主DNS服务器的名字,也可以使用当前域的名字;
(2) 当前域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com
- NS记录
name: 当前域的名字
value: 当前域的某DNS服务器的名字,例如ns.magedu.com.
注意:一个区域可以有多个NS记录
例如:
magedu.com. IN NS dns1.magedu.com.
magedu.com. IN NS dns2.magedu.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对NS记录而言,任何一个ns记录后面的dns服务器名字,都应该在后续有一个A记录
- MX记录
name: 当前域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
- A记录
name: 某主机的FQDN,例如www.magedu.com.
value: 主机名对应主机的IP地址
例如:
www.magedu.com. IN A 1.1.1.1
mx1.magedu.com. IN A 3.3.3.3
$GENERATE 1-254 HOST$ A 1.2.3.$ ---表示域名为HOST1.magedu.com的ip地址为1.2.3.1,域名为HOST254.magedu.com的IP地址为1.2.3.254,从1一直到254个
*.magedu.com. IN A 5.5.5.5 --泛域名解析,比如wwww.magedu.com也解析为ip地址为5.5.5.5
magedu.com. IN A 6.6.6.6 ---表示在浏览器上只输入magedu.com,不输入www.也会解析,解析成ip地址为6.6.6.6
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
- 别名记录
CNAME:
name: 别名的FQDN
value: 真正名字的FQDN
例如:
www.magedu.com. IN CNAME websrv.magedu.com.
- PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
如1.2.3为网络地址,可简写成:
4 IN PTR www.magedu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
4、搭建一个magedu.com域的DNS服务器
提供dns服务的程序包:bind,unbound
程序名:named,unbound
1、安装bind包、关闭防火墙和selinux
yum install bind
service named start
chkconfig named on
2、修改配置文件
vim /etc/named.conf
listen-on port 53 { localhost; }; ---localhost指监听本机的所有ip,也可以注释掉,默认是监控所有ip
allow-query { any; }; ---允许所有主机查询本机的dns,也可以额指定某个ip,也可以注释掉,默认是允许任何主机访问
recursion yes; ---表示允许递归迭代,改为no就是不到根上去查找了
dnssec-enable no;
dnssec-validation no; ----这两行的yes改为no
这里需要注意的是:要先开启dns服务,再去修改配置文件,否则服务开启不了。
3、修改区域解析库的配置文件
vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
type master;
file "magedu.com.zone"; ---区域解析库文件的名字
};
4、创建区域解析库文件
cd /var/named
cp -a named.localhost magedu.com.zone ---
一定要加上-a选项,不然复制过来的文件对于named用户没有读权限,解析的时候named用户要读这个文件,一定要注意,是个坑
vim /var/named/magedu.com.zone ---这个文件名要和前面的一样
$TTL 1D
@ IN SOA dns1 admin.magedu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.21.106
websrv A 172.18.21.107
www CNAME websrv
@ MX 10 mailsrv
mailsrv A 6.6.6.6
5、检查语法、重新加载服务
named-checkconf --检查/etc/named.conf和/etc/named.rfc1912.zones文件的语法
named-checkzone magedu.com /var/named/magedu.com.zone ---检查区域数据库文件的语法
rndc reload ---重新加载服务,如果不行就重启服务
6、测试
dig www.magedu.com @172.18.21.106
dig -t ns magedu.com @172.18.21.106 -t可以指定解析哪条记录,这里解析的是ns记录,也就是解析当前域的dns服务器的名字是什么
dig -t MX magedu.com @172.18.21.106 --解析magedu.com域的邮件服务器的名字
dig +trace www.magedu.com @172.18.21.106 --跟踪解析过程
5、反向区域解析
1、vim /etc/named.rfc1912.zones ---修改区域解析库的配置文件
zone "18.172.in-addr.arpa" IN { ---18.172.in-addr.arpa是反向解析的域名,解析172.18这个网段,要反着写。
type master;
file "172.18.zone"; ---指明反向解析库的名字
};
2、named-checkconf
3、cp -a /var/named/named.loopback /var/named/172.18.zone
vim 172.18.zone ---创建反向解析库文件
$TTL 1D
@ IN SOA dns1.magedu.com. admin.magedu.com. (
2017093 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1.magedu.com.
106.21 PTR dns1.magedu.com. ---这里不能像正向解析库一样省略后面的域名,写的时候不要忘记加上后面的点
107.21 PTR www.magedu.com. 172.18.21.107被反向解析成www.magedu.com
4、重新加载后测试
rndc reload
dig -x 172.18.21.107 @127.0.0.1
dig -x 172.18.21.106 @127.0.0.1
6、DNS搬家
DNS在历史上饱受攻击,为了安全,要将DNS的目录放到一个比较深的目录下,使其和其他文件分离开,这样即使DNS被攻击后也不会影响到其他的文件,实现方法如下:
1、安装bind-chroot包
yum install bind-chroot
2、进入目录查看
centos6中安装好这个包后进入cd /var/named/chroot目录。发现DNS 有关的目录都搬家到这个目录下。
centos7中安装的这个bind-chroot包也是个服务,需要启动这个服务后才能搬家,然后进入cd /var/named/chroot目录,发现已经搬家了。
总结:虽然搬家了,但原来目录中的内容还是存在的,只是你可以在这个比较深的目录下去配置DNS了。
7、实现平衡负载和泛域名解析
vim magedu.com.zone
$TTL 1D
@ IN SOA dns1 admin.magedu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.21.106
websrv A 172.18.21.200 ---一个域名指向两个ip地址,有两个web服务器,这样用户在访问www.magedu.com时会轮流给用户解析这两个ip地址,轮流访问这两个主机,达到负载平衡。
websrv A 172.18.21.100
www CNAME websrv
* A 6.6.6.6 ---泛域名解析,只要输入的是以magedu.com结尾的域名,都解析成6.6.6.6的ip地址
magedu.com. A 8.8.8.8 ---用户不输入www,只输入magedu.com 也会解析
$GENERATE 1-10 server$ A 192.168.25.$ ---表示server1.magedu.com 解析成192.168.25.1
测试:dig www.magedu.com @127.0.0.1 ---负载平衡,解析两个ip地址
dig wwww.magedu.com @127.0.0.1 ---泛域名解析
dig magedu.com @127.0.0.1 ---用户只输入magedu.com也可以解析
dig server1.magedu.com @127.0.0.1
8、实现主从复制
1、更改主dns服务器的区域解析库文件centos6中
vim /var/named/magedu.com.zone
$TTL 1D
@ IN SOA dns1 admin.magedu.com. (
23 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1 ---主dns服务器的名字
NS dns2 ---指明从dns服务器的名字
dns1 A 172.18.21.106
dns2 A 172.18.21.107 ---指明从dns服务器的ip地址
websrv A 1.1.1.1
www CNAME websrv
rndc reload ---更新加载一下
2、更改从dns服务器区域解析库的配置文件centos7中
zone "magedu.com" IN {
type slave;
masters { 172.18.21.106; }; ---指明主dns服务器的ip地址,注意是masters,不要忘记加s
file "slaves/magedu.com.slave.zone"; ---指明从dns服务器的区域解析库文件存放路径和名字,存放在/var/named/slaves目录下,名字为magedu.com.slave.zone,这个名字可以自己取。
};
rndc reload ----重新加载一下,发现slaves目录下已经生成区域解析库文件
3、测试
dig www.magedu.com @172.18.21.107 ---指明用从dns服务器去解析
主从复制如果不在dns上做安全加固是不安全的,因为别的主机可以通过命令抓取你的dns服务器的信息,为了安全应该做如下配置
dig -t axfr magedu.com @172.18.21.107 ---此命令可以抓取dns服务器的区域解析库文件中的所有信息
如何避免类似情况发生应做如下配置
1、更改主dns服务器的配置文件,增加一行内容
vim /etc/named.conf
allow-transfer { 172.18.21.107;}; ---指明允许哪个主机可以从我这里复制区域解析库文件
service named restart ---重启服务才能生效
2、更改从dns服务器的配置文件,增加一行
vim /etc/named.conf
allow-transfer { none; };---设置为任何人都不允许复制
rndc reload
3、测试
dig -t axfr magedu.com @172.18.21.106
dig -t axfr magedu.com @172.18.21.107
发现从这两个服务器都抓取不了了,更改一下主dns服务器的区域解析库文件中的版本号,重启一下服务,发现仍然可以复制给从dns服务器。
9、搭建子域
方法一:子域和父域在同一台主机
vim magedu.com.zone
$TTL 1D
@ IN SOA dns1 admin.magedu.com. (
25 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.21.106
websrv A 3.3.3.3
www CNAME websrv
www.zhengzhou A 7.7.7.7 ----在配置文件中增加这一行就可以
这种情况适合于zhengzhou子域的主机名比较少的情况,只有www一个主机名的时候可以用这种方法,如果zhengzhou这个子域发展壮大了,有好多主机名,就要在这台主机上再重新搭建一个郑州的子域。如果子域和父域的访问量都比较大,最好不要放到同一台主机上,最好独立存放,就是方法二搭建子域。
10、dns转发
1、全局转发,无论你访问哪个域我都给你转发给到同一个主机的dns上
1、在centos7上创建一个zhang.com域的dns服务器
2、在centos6上操作如下
vim /etc/named.conf ---在配置文件中增加如下两条内容
forward first; ---表示转发后没有找到对应域的权威dns服务器就自己去根上找,并给客户端回复,如果写成forward only,表示不成功就不去根上找了,直接回复客户端否定结果
forwarders {172.18.21.107;}; ----表示转发给哪个nds服务器
named-checkconf
重启服务
3、测试
dig www.zhang.com @172.18.21.106
2、特定区域转发
如果你想访问qq.com域我就给你转到一个主机,如果你想访问zhang.com域给你转发到另外一个主机。
实现过程如下:
1、在两个主机上分别创建qq.com域的dns和zhang.com域的dns服务器
2、在centos6上执行如下操作
vim /etc/named.rfc1912.zones
zone "zhang.com" IN {
type forward;
forward first;
forwarders{172.18.21.107;}; ---访问zhang.com域就转发给172.18.21.107
};
zone "qq.com" IN {
type forward;
forward first;
forwarders{172.18.21.7;}; ---访问qq.com域就转发给172.18.21.7
};
service named restart
3、测试
dig www.qq.com @172.18.21.106
dig www.zhang.com @172.18.21.106
总结:安装好bind包后先开启dns服务,然后再更改配置文件,不然会开启不了,另外centos7中要把/etc/named.conf配置文件中的dnssec-enable no; dnssec-validation no;这两行改为no才可以。
11、搭建如下图所示的dns服务器
实现过程如下:
1、在主机E上修改vim /var/named/ named.ca 文件
; <<>> DiG 9.9.2-P1-RedHat-9.9.2-6.P1.fc18 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25828
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 23
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 3600000 IN A 172.18.21.7 ---指明根dns服务器
将这个文件传给D、B,这样这些主机就知道哪个是根的dns服务器了。
2、E上搭建mage.com域dns服务器
重启服务 在A上测试:dig www.magedu.com @172.18.21.106
3、D上搭建com域的dns服务器
vim /etc/named.rfc1912.zones
zone "com" IN {
type master;
file "com.zone";
};
vim /var/named/com.zone
$TTL 1D
@ IN SOA dns1 admins.magedu.com. (
10 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1.com.
magedu NS dns2.com. ---magedu.com.域是com.的子域,指定子域的dns服务器的名字
dns1 A 172.18.21.107
dns2 A 172.18.21.106 ---指定子域的dns服务器的ip地址
websrv A 5.5.5.5
www CNAME websrv
重启服务后 在A上测试:dig www.magedu.com @172.18.21.107
4、C上搭建根域
vim /etc/named.conf ----删除下面的行,这个文件中指明了互联网上的根域的dns服务器的名字和ip地址,因为C本来就是根,就不用指定了
zone "." IN {
type hint;
file "named.ca"; ----根域的文件
};
vim /etc/named.rfc1912.zones
zone "." IN {
type master;
file "root.zone";
};
vim var/named/root.zone
$TTL 1D
@ IN SOA dns1 rname.qq.com. (
25 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
com NS dns2 ---com.域是它的子域
dns1 A 172.18.21.7
dns2 A 172.18.21.107 ---指明子域的dns服务器的ip
重启服务后 在A上测试:dig www.magedu.com @172.18.21.7
5、在B上的设置
vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { any; };
dnssec-enable no;
dnssec-validation no;
vim named.ca ---要保证B指向根的dns服务器,前面已经从E上复制过来了
; <<>> DiG 9.9.2-P1-RedHat-9.9.2-6.P1.fc18 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25828
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 23
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 3600000 IN A 172.18.21.7 ----根dns服务器的地址
重启服务后 在A上测试:dig www.magedu.com @172.18.21.6
12、允许动态更新
指允许哪个主机对dns服务器的解析库文件进行更新,远程主机更新的时候其实是本机named这个用户在/var/named目录下创建了一个新的magedu.com.zone.jnl以.jnl结尾的文件
实现步骤
1、vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
allow-update {172.18.21.6;}; ---除了在本机去修改解析库文件外,只允许172.18.21.6这个主机在远程对这个解析库进行更新
};
2、修改named目录的权限
[root@centos6 var]#ll named/ -d ---named用户要想往这个目录内写文件,必须让named这个组对目录具有写权限,才能新建文件。
drwxr-x---. 6 root named 4096 Sep 20 19:41 named/
[root@centos6 named]#chmod g+w /var/named/
如果selinux是开启的要执行下面操作
setsebool -P named_write_master_zones on
service named restart ---重启服务才能生效
3、在远程主机进行如下操作
[root@centos6 slaves]#nsupdate
> server 172.18.21.106 ---指明dns服务器的ip地址
> zone magedu.com ---指明是哪个域
> update add ftp.magedu.com 8888 IN A 8.8.8.8 ---要更改的记录
> send --发送
>update delete www.magedu.com A ---删除哪一条记录
>send
这种方法使用户不用在dns主机上操作就能更新dns解析库中的内容,很方便。