DNS(Doamin Name System)域名系统技术:用于管理和解析域名与IP地址之间对应关系的技术
包含三种服务器类型
主服务器:在特定区域内具有唯一性,负责管理和维护该地域域名与IP地址对应关系
从服务器:从主服务器中获取域名与IP地址对应关系并进行维护,以防止主服务器出现宕机的情况
缓存服务器:向其他域名服务器查询获取到域名与IP地址对应关系,并将经常查询的域名信息保存到服务器本地,以提高重复查询时的效率。
BIND服务程序的配置文件:
主配置文件:/etc/named.conf
区域配置文件:/etc/named.rfc1912.zones
数据配置文件目录:/var/named
下面开始配置DNS域名服务:
实验前准备:将服务器IP参数里的DNS修改为本机IP地址
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
[root@linuxprobe named]# systemctl restart network
安装:添加chroot(俗称牢笼机制)扩展包,以便有效的限制BIND服务程序仅能对自身配置文件进行操作,确保服务器的安全:
[root@linuxprobe ~]# yum install bind-chroot
修改主配置文件11行和17行,为any;分别代表:该服务器所有IP地址均可提供DNS域名解析服务;允许所有人对本服务器发起DNS查询请求
[root@linuxprobe ~]# vim /etc/named.conf 11 listen-on port 53 { any; }; 12 listen-on-v6 port 53 { ::1; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 allow-query { any; };
BIND服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名与IP地址对应关系的位置。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域)
正向解析、反向解析实验:
配置区域配置文件:
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; 正向解析 allow-update { none; }; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.arpa"; 反向解析 allow-update { none; }; };
BIND服务程序数据配置文件目录中有named.localhost正向解析模板;named.loopback反向解析模板。
[root@linuxprobe named]# ls chroot dynamic named.empty named.loopback data named.ca named.localhost slaves
开始编辑数据配置文件:
[root@linuxprobe named]# cp -a named.localhost linuxprobe.com.zone cp一定加上 -a参数,否则named服务程序没有读取该文件权限,也可以将文件所在组改为named [root@linuxprobe named]# cp -a named.loopback 192.168.10.arpa [root@linuxprobe named]# vim linuxprobe.com.zone $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.linuxprobe.com. ns IN A 192.168.10.10 www IN A 192.168.10.10 bbs IN A 192.168.10.20 [root@linuxprobe named]# vim 192.168.10.arpa $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.linuxprobe.com. ns A 192.168.10.10 10 PTR wwwlinuxprobe.com 20 PTR tech.linuxprobe.com
重启服务:
[root@linuxprobe named]# systemctl restart named
验证:
[root@linuxprobe named]# nslookup > 192.168.10.10 Server: 127.0.0.1 Address: 127.0.0.1#53 10.10.168.192.in-addr.arpa name = wwwlinuxprobe.com.10.168.192.in-addr.arpa. > 192.168.10.20 Server: 127.0.0.1 Address: 127.0.0.1#53 20.10.168.192.in-addr.arpa name = tech.linuxprobe.com.10.168.192.in-addr.arpa. > www.linuxprobe.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.linuxprobe.com Address: 192.168.10.10
部署从服务器
实验环境:服务器IP 192.168.10.10 客户端IP 192.168.10.20
在主服务器的区域配置文件中允许从服务器的更新请求,重启服务
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type master; file "linuxprobe.com.zone"; allow-update { 192.168.10.20; }; }; zone "10.168.192.in-addr.arpa" IN { type master; file "192.168.10.arpa"; allow-update { 192.168.10.20; };
[root@linuxprobe ~]# systemctl restart named
在从服务器的区域配置文件中填写主服务器的IP地址与要抓取的区域信息(注意从服务器主配置文件要与主服务器一样11行与17改为any),重启服务
[root@client A ~]# vim /etc/named.rfc1912.zones zone "linuxprobe.com" IN { type slave; masters { 192.168.10.10; }; file "slaves/linuxprobe.com.zone"; }; zone "10.168.192.in-addr.arpa" IN { type slave; masters { 192.168.10.10; }; file "slaves/192.168.10.arpa"; }; [root@client A slaves]# systemctl restart named
检验解析结果,此时切换到服务器数据配置目录/var/named/slaves目录下查看是否有域名解析的文件数据
没有数据,此时将主服务器iptables防火墙策略清空,再次检验
[root@client A slaves]# ls 192.168.10.arpa linuxprobe.com.zone [root@client A slaves]# nslookup > 192.168.10.10 Server: 114.114.114.114 Address: 114.114.114.114#53 ** server can't find 10.10.168.192.in-addr.arpa.: NXDOMAIN
数据目录发现文件,但是无法解析,我们可以看到是由于从服务器的DNS没有设置为本机IP所致。
检验成功。
[root@client A slaves]# systemctl restart network [root@client A slaves]# nslookup > www.linuxprobe.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.linuxprobe.com Address: 192.168.10.10 > 192.168.10.10 Server: 127.0.0.1 Address: 127.0.0.1#53 10.10.168.192.in-addr.arpa name = wwwlinuxprobe.com.10.168.192.in-addr.arpa. > 192.168.10.20 Server: 127.0.0.1 Address: 127.0.0.1#53 20.10.168.192.in-addr.arpa name = tech.linuxprobe.com.10.168.192.in-addr.arpa.
安全的加密传输:
主服务器中生成密钥
[root@linuxprobe ~]# dnssec-keygen -a hmac-md5 -b 128 -n HOST master-slave Kmaster-slave.+157+31596 [root@linuxprobe ~]# ls anaconda-ks.cfg Kmaster-slave.+157+31596.key initial-setup-ks.cfg Kmaster-slave.+157+31596.private [root@linuxprobe ~]# cat Kmaster-slave.+157+31596.private Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: uGiFP0EPcKm938/c8QMHrg== Bits: AAA= Created: 20190215143904 Publish: 20190215143904 Activate: 20190215143904
主服务器中创建密钥文件,为了安全起见,将文件所属组改为named,降低其权限,并在etc目录创建硬链接
[root@linuxprobe ~]# cd /etc/named/chroot/etc -bash: cd: /etc/named/chroot/etc: No such file or directory [root@linuxprobe ~]# mkdir -p !$ mkdir -p /etc/named/chroot/etc [root@linuxprobe ~]# cd /etc/named/chroot/etc [root@linuxprobe etc]# vim transfer.key key "master-slave" { algorithm hmac-md5; secret "uGiFP0EPcKm938/c8QMHrg=="; }; [root@linuxprobe etc]# chown root:named transfer.key [root@linuxprobe etc]# chmod 640 transfer.key [root@linuxprobe etc]# ln transfer.key /etc
开启并加载bind服务的密钥验证功能
include "/etc/transfer.key" options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; allow-transfer { key master-slave; };
从服务器中清空域名配置文件
192.168.10.arpa linuxprobe.com.zone [root@client A slaves]# rm * rm: remove regular file ‘192.168.10.arpa’? y rm: remove regular file ‘linuxprobe.com.zone’? y [root@client A slaves]# ls
配置从服务器
[root@client A etc]# vim transfer.key key "master-slave" { algorithm hmac-md5; secret "uGiFP0EPcKm938/c8QMHrg=="; }; [root@client A etc]# chown root:named transfer.key [root@client A etc]# chmod 640 transfer.key [root@client A etc]# ln transfer.key /etc
开启并加载从服务器的密钥验证功能
[root@client A etc]# vim /etc/named.conf 9 include "/etc/transfer.key"; 42 server 192.168.10.10 43 { 44 keys { master-slave; }; 45 };
验证
[root@client A slaves]# ls 192.168.10.arpa linuxprobe.com.zone [root@client A slaves]# vim /etc/named.conf [root@client A slaves]# nslookup > 192.168.10.10 Server: 127.0.0.1 Address: 127.0.0.1#53 10.10.168.192.in-addr.arpa name = wwwlinuxprobe.com.10.168.192.in-addr.arpa. >
分离解析技术
是位于不同地理位置的用户通过访问相同的网址,而从不同的服务器中获取相同的数据,提高访问效率。
配置分离解析技术准备:
主机名称 | 操作系统 | IP地址 |
DNS服务器 | RHEL 7 | 北京网络:122.71.115.10 |
美国网络:106.185.25.10 | ||
北京用户 | Windows 7 | 122.71.115.1 |
海外用户 | Windows 7 | 106.185.25.1 |
第一步:修改主bind配置文件,将11行17行修改为any,由于分离解析技术与DNS根服务器的配置参数有冲突,将51~54的根域信息删除
[root@linuxprobe ~]# systemctl start named [root@linuxprobe ~]# vim /etc/named.conf 51 #zone "." IN { 52 # type hint; 53 # file "named.ca"; 54 #i};
第二步:编辑区域配置文件
[root@linuxprobe ~]# vim /etc/named.rfc1912.zones acl "china" { 122.71.115.0/24; }; acl "american" { 106.185.25.0/24; }; view "china" { match-clients { "china"; }; zone "linuxprobe.com" { type master; file "linuxprobe.com.china"; }; }; view "american" { match-clients { "american"; }; zone "linuxprobe.com" { type master; file "linuxprobe.com.american"; }; };
第三步,创建数据配置文件
[root@linuxprobe named]# cp -a named.localhost linuxprobe.com.china [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.american [root@linuxprobe named]# vim linuxprobe.com.china [root@linuxprobe named]# vim linuxprobe.com.american $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.linuxprobe.com. ns IN A 122.71.115.10 www IN A 122.71.115.15 $TTL 1D @ IN SOA linuxprobe.com. root.linuxprobe.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.linuxprobe.com. ns IN A 106.185.25.10 WWW IN A 106.185.25.15
最后重启named服务,将客户端IP分别设置为122.71.115.1与106.185.25.1,将DNS地址分别设置为服务器主机的两个IP地址,验证结果