一、DNS服务简介
1. DNS服务简介
DNS(Domain Name System)域名系统。
目前提供网络服务的应用使用唯一的32位的IP地址来标识,但是由于数字比较复杂、难以记忆,因此产生了域名系统(DNS),通过域名系统,可以使用易于理解和形象的字符串名称来标识网络应用(如www.baidu.com、www.taobao.com)。访问互联网应用可以使用域名,也可以通过IP地址直接访问该应用,在使用域名访问网络应用时,DNS负责将域名解析为IP地址。
2. 主机名和域名的区别?
主机名是内网的名字;域名是外网的名字。
主机名和域名其实是两个完全可以不同的名字,但是有很多软件(如邮件系统postfix)会默认认为它们一致。
全世界共有有13台DNS根域服务器。
顶级域名:
.com .org .edu .gov .net .mil .info
商业 组织 教育 政府 通讯 军事 信息
根域:
cn hk us jp tw in
.com.cn .net.us .edu.cn
3. DNS服务器特点
- 分布式的数据库
- 解决了数据不一致,避免了名字冲突
- 有缓存机制,提高了性能和可靠性
4. 域名解析过程
为了将一个名字解析成一个IP地址,用户应用程序调用一个称为解析器的库程序,将名字作为参数传递给它,形成DNS用户;然后DNS用户发送查询请求给本地域名服务器,服务器首先在其管辖区域内查找名字,名字找到后,把对应的IP地址返回给DNS客户。完整的名字解析过程如下图所示:
二、系统环境
系统平台: CentOS 7.3
DNS Server: 192.168.8.88
更改主机名,写/etc/hosts记录
# vim /etc/hosts 192.168.8.88 test.com --最后添加DNS服务器IP地址和主机名/别名 |
关闭防火墙
# systemctl stop firewalld --临时关闭防火墙 # systemctl disable firewalld --永久关闭防火墙 |
关闭selinux
临时关闭:
# setenforce 0 |
永久关闭:
# vim /etc/selinux/config SELINUX=disabled --将enforcing改为disabled # reboot --重启系统永久生效 |
三、CentOS下的DNS服务
准备两台机器
1. 在DNS服务器上安装bind软件
BIND全称是(Berkeley Internet Name Domain),是美国加利福尼亚大学伯克利分校开发的一个域名服务软件包,Linux使用这个软件包来提供域名服务,该软件实现了DNS协议。BIND的服务端软件是被称作named的守护进程。
# yum -y install bind* 如果已经安装过了,显示“无需任何处理” |
安装好后查看软件包
# rpm -qa | grep ^bind bind-pkcs11-libs-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-utils-9.9.4-51.el7_4.1.x86_64 bind-license-9.9.4-51.el7_4.1.noarch bind-lite-devel-9.9.4-51.el7_4.1.x86_64 bind-libs-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-9.9.4-51.el7_4.1.x86_64 bind-dyndb-ldap-11.1-4.el7.x86_64 bind-9.9.4-51.el7_4.1.x86_64 --提供了域名服务的主要程序及相关文件 bind-sdb-9.9.4-51.el7_4.1.x86_64 bind-pkcs11-devel-9.9.4-51.el7_4.1.x86_64 bind-utils-9.9.4-51.el7_4.1.x86_64 --提供了对DNS服务器的测试工具程序(如nslookup、dig等) bind-sdb-chroot-9.9.4-51.el7_4.1.x86_64 bind-devel-9.9.4-51.el7_4.1.x86_64 bind-libs-lite-9.9.4-51.el7_4.1.x86_64 bind-chroot-9.9.4-51.el7_4.1.x86_64 --为bind提供一个伪装的根目录以增强安全性(将“/var/named/chroot/”目录作为BIND的根目录) |
2. 启动DNS服务
# systemctl start named.service --启动DNS服务 # systemctl enable named.service --设置为开机启动 # netstat -anlp | grep named --查看监听端口为53 |
named作为标准的系统服务脚本,通过“systemctl start/restart/stop named.service”的形式可以实现对服务器程序的控制
named默认监听TCP、UDP协议的53端口,以及TCP的953端口:
其中UDP 53端口一般对所有客户机开放,以提供解析服务;
TCP 53端口一般只对特定从域名服务器开放,提高解析记录传输通道;TCP 953端口默认只对本机(127.0.0.1)开放,用于为rndc远程管理工具提供控制通道
配置文件的目录:
没有安装bind-chroot软件包
- 配置文件为/etc/named.conf
- 数据文件在/var/named目录下
安装了bind-chroot软件包
- 配置文件为/var/named/chroot/etc/named.conf --默认没有
- 数据文件在/var/named/chroot/var/named目录
从上面看到装了bind-chroot,笼环境为/var/named/chroot/
3. 查看配置文件/etc/named.conf
# vim /etc/named.conf 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. --该目录中可以查看named配置案例 12 options { --options是全局服务器的配置选项,在这里指定的参数,对配置中的任何区域都有效 13 listen-on port 53 { 127.0.0.1; }; --指定域名服务监听的网络端口,建议写本机IP,减少服务器消耗 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; --指定named从/var/named目录下读取DNS数据文件 16 dump-file "/var/named/data/cache_dump.db"; --当执行导出命令时将DNS服务器的缓存数据存储到指定的文件中 17 statistics-file "/var/named/data/named_stats.txt"; --指定named服务的统计文件,当执行统计命令时会将内存中的统计信息追加到该文件中 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { localhost; }; --允许哪些客户端访问DNS服务,此处改为“any”,表示任意主机 31 recursion yes; --开启递归查询 33 dnssec-enable yes; --开启加密 34 dnssec-validation yes; --在递归查询服务器上开启DNSSEC验证 35 36 /* Path to ISC DLV key */ 37 bindkeys-file "/etc/named.iscdlv.key"; 39 managed-keys-directory "/var/named/dynamic"; 41 pid-file "/run/named/named.pid"; 42 session-keyfile "/run/named/session.key"; 43 }; 44 45 logging { --named服务的日志文件信息 46 channel default_debug { 47 file "data/named.run"; 48 severity dynamic; 49 }; 51 --每一个zone就是定义一个域的相关信息以及指定了named服务从哪些文件中获得DNS各个域名的数据文件 52 zone "." IN { --根(.)域的配置及信息(配置缓存域名服务器,可以自己去了解) 53 type hint; --服务器类型 54 file "named.ca"; --文件路径位置 55 }; 56 57 include "/etc/named.rfc1912.zones"; --include代表该文件是子配置文件 58 include "/etc/named.root.key"; |
4. 域名服务器的配置
配置步骤:
- 编辑/etc/named.rfc1912.zones --记录你的域和域对应的数据文件在哪
- 编辑/var/named/data/*.zone --就是数据文件,记录域名和IP的对应
例1:正向解析(将域名解析成IP)
(一)修改DNS服务的配置文件
# vim /etc/named.conf --主配置文件 12 options { 13 listen-on port 53 { 1192.168.8.88; }; --将127.0.0.1改为本机IP:192.168.8.88 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; 16 dump-file "/var/named/data/cache_dump.db"; 17 statistics-file "/var/named/data/named_stats.txt"; 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { any; }; --将localhost改为any,表示所有人都能对我的DNS服务进行查询 |
(二)添加域的信息写在子配置文件
# vim /etc/named.rfc1912.zones --文件最后添加正向解析数据文件的信息 43 zone "test.com" IN { 44 type master; 45 file "data/test.com.zone"; 46 }; |
(三)编辑正向解析文件
# vim /var/named/data/test.com.zone --编辑正向解析文件(将域名解析成IP) $TTL 1D --缓存时间 @ IN SOA dns.test.com. dns.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns.test.com. --DNS服务器的域名地址 dns.test.com. IN A 192.168.8.88 --DNS服务器的IP地址 @ IN MX 10 mail.www.test.com. --邮件服务器的域名地址 mail.www.test.com. IN A 192.168.8.4 --邮件服务器IP地址 www.test.com. IN A 192.168.8.88 --域名为test.com的IP地址 ftp.test.com. IN A 192.168.8.3 --域名为ftp的IP地址 |
- serial:序列号。可以供从服务器判断何时获取新数据的,这里我设成今天的日期。更新数据文件必须要更新这个序列号,否则从服务器将不更新
- refresh:指定多长时间从服务器要与主服务器进行核对
- retry:如果从服务器试图检查主服务器的序列号时,主服务器没有响应,则经过这个时间后将重新进行检查
- expire:将决定从服务器在没有主服务器的情况下权威地持续提供域数据服务的时间长短
- minimum:高速缓存否定回答的存活时间
- SOA记录:每个区仅有一个SOA记录,该区一直延伸到遇见另一个SOA记录为止。SOA记录包括区的名字,一个技术联系人和各种不同的超时值
- IN记录:使用“IN”,对应的是internet
- A记录:是DNS数据库的核心。一个主机必须为它的每个网络接口得到一条A记录
- NS记录:识别对一个区有权威性的服务器(即所有主服务器和从服务器),并把子域委托给其他机构。
- MX记录:电子邮件系统就是使用MX记录来更有效的路由邮件。
- PTR记录:从IP地址到主机名的反向映射。与A记录一样,必须为每个网络接口有一条PTR记录。
# systemctl restart named.service --配置好后,重新DNS服务 |
(四)客户端测试
注意:客户端必须要跟服务器端通信(能ping通)及关闭selinux
# vim /etc/resolv.conf --修改客户端的DNS服务器 nameserver 192.168.8.88 --IP为服务器的IP |
以下三个解析命令,仍选其一就可以了。
# dig www.test.com --查询DNS包括NS记录,A记录,MX记录等相关信息 # nslookup www.test.com # host www.test.com --测试域名系统工作是否正常 |
至此,正向解析OK!
例2:反向解析(将IP解析成域名)
(一)修改DNS服务的配置文件
# vim /etc/named.rfc1912.zones --文件最后添加反向解析数据文件的信息 zone "8.168.192.in-addr.arpa" IN { --域名对应的IP地址网段为192.168.8.0,此处必须按照相同的格式写 type master; file "data/192.168.8.zone"; --反向解析文件名192.168.8.zone }; |
(二)编辑反向解析文件
# vim /var/named/data/192.168.8.zone $TTL 1D @ IN SOA dns.test.com. dns.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns.test.com. 88 IN PTR dns.test.com. @ IN MX 10 mail.www.test.com. 4 IN PTR mail.www.test.com. 88 IN PTR www.test.com. 3 IN PTR ftp.test.com. |
# systemctl restart named.service --配置好后,重启DNS服务 |
(三)客户端测试
注意:客户端必须要跟服务器端通信(能ping通)及关闭selinux
# cat /etc/resolv.conf --修改客户端的DNS服务器 nameserver 192.168.8.88 |
# nslookup 192.168.8.88 # host 192.168.8.88 --测试域名系统工作是否正常 |
至此,正向解析OK!
例3:做主从DNS服务器
准备三台机器
(一)主DNS服务器的配置
# vim /etc/named.conf 12 options { 13 listen-on port 53 { 192.168.8.88; }; --(主)DNS服务器的IP 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; 16 dump-file "/var/named/data/cache_dump.db"; 17 statistics-file "/var/named/data/named_stats.txt"; 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { any; }; --允许查询所有主机 |
# vim /etc/named.rfc1912.zones
zone "test.com" IN { type master; file "data/test.com.zone"; allow-transfer {192.168.8.66;}; --指定(从)域名服务器IP }; zone "8.168.192.in-addr.arpa" IN { type master; file "data/192.168.8.zone"; allow-transfer {192.168.8.66;}; --指定(从)域名服务器IP }; |
(二)(主)编辑正向解析文件
# vim /var/named/data/test.com.zone $TTL 1D @ IN SOA dns1.test.com. dns1.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns1.test.com. dns1.test.com. IN A 192.168.8.88 --DNS服务器(主)的IP地址 @ IN NS dns2.test.com. dns2.test.com. IN A 192.168.8.66 --DNS服务器(从)的IP地址 www.test.com. IN A 192.168.8.88 --域名为test.com的(主)IP地址 www.test.com. IN A 192.168.8.66 --域名为test.com的(从)IP地址 |
(三)(主)反向解析文件
# vim /var/named/data/192.168.8.zone $TTL 1D @ IN SOA dns1.test.com. dns1.www.test.com. ( 20171224 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS dns1.test.com. 88 IN PTR dns1.test.com. @ IN NS dns2.test.com. 66 IN PTR dns2.test.com. 88 IN PTR www.test.com. --域名为test.com的(主)IP地址 66 IN PTR www.test.com. --域名为test.com的(从)IP地址 |
# systemctl restart named.service --配置好后,重启(主)DNS服务 |
(四)(从)DNS服务器的配置
1、重新开启一台linux虚拟主机,IP为192.168.8.66
2、服务的安装与配置
# yum -y install bind* # vim /etc/named.conf 12 options { 13 listen-on port 53 { 192.168.8.66; }; --(从)DNS服务器的IP 14 listen-on-v6 port 53 { ::1; }; 15 directory "/var/named"; 16 dump-file "/var/named/data/cache_dump.db"; 17 statistics-file "/var/named/data/named_stats.txt"; 18 memstatistics-file "/var/named/data/named_mem_stats.txt"; 19 allow-query { any; }; --允许查询所有主机 |
# vim /etc/named.rfc1912.zones zone "test.com" IN { type slave; --服务器类别,slave为(从)域名服务器选项 file "data/test.com.zone"; masters {192.168.8.88;}; --指定(主)域名服务器IP }; zone "8.168.192.in-addr.arpa" IN { type slave; --服务器类别,slave为(从)域名服务器选项 file "data/192.168.8.zone"; masters {192.168.8.88;}; --指定(主)域名服务器IP }; |
3. 编辑正向解析文件与反向解析文件,可直接从(主)DNS服务器中拷贝
# scp 192.168.8.88:/var/named/data/test.com.zone /var/named/data/test.com.zone # scp 192.168.8.88:/var/named/data/192.168.8.zone /var/named/data/192.168.8.zone |
# systemctl restart named.service --配置好后,重启(从)DNS服务 |
(五)客户端测试
# vim /etc/resolv.conf --添加以下参数 nameserver 192.168.8.88 --(主)DNS服务IP nameserver 192.168.8.66 --(从)DNS服务IP |
# nslookup www.test.com
# nslookup 192.168.8.88 # nslookup 192.168.8.66 |
至此,DNS服务器主从正反向解析OK!