安装和控制DNS服务器
BIND(Berkeley Internet Name Domain,伯克利Internet 域名服务 )是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,但不是唯一能够提供域名服务的DNS服务程序,但它却是应用最为广泛的,BIND可以运行在大多数Linux/UNIX主机中。其官方站点位于https://www.isc.org/。
1、安装BIND软件
在CentOS7.x系统中,系统光盘自带了BIND服务的多个安装文件,各软件包的主要作用如下。
- bind:提供了域名服务的主要程序及相关文件。
- bind-utils:提供了对DNS服务器的测试工具程序,如nslookup等。
- bind-1ibs:提供了bind、bind-utils需要使用的库函数。
- bind-chroot:可选软件包,为BIND服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND的根目录),以提高安全性。也称为jail(监牢)机制
默认已安装bind-utils和bind-libs,所以只需要安装bind即可。
[root@localhost ~]# rpm -q bind-utils bind-libs
bind-utils-9.9.4-61.el7.x86_64
bind-libs-9.9.4-61.el7.x86_64
[root@localhost ~]# yum -y install bind
查询是否已安装与BIND相关的软件包
[root@localhost ~]# rpm -q bind bind-utils bind-libs
bind-9.9.4-61.el7.x86_64
bind-utils-9.9.4-61.el7.x86_64
bind-libs-9.9.4-61.el7.x86_64
2、BIND服务控制
BIND软件包安装完毕以后,会自动增加一个名为named的系统服务,通过systemctl工具都可以控制DNS域名服务的运行。例如,执行以下操作可以查询named服务的运行状态。
[root@localhost ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: inactive (dead)
3、BIND服务的配置文件
使用BIND软件构建域名服务时,主要涉及两种类型的配置文件:主配置文件和区域数据文件。其中,主配置文件用于设置named服务的全局选项、注册区域及访问控制等各种运行参数;区数据文件用于存放某个DNS区域的地址解析记录(正向或反向记录)。
①. 主配置文件
主配置文件named.conf通常位于/etc/目录下,在named.conf文件中,主要包括全局配置、区域配置两个部分,每一条配置记录的行尾以分号“;”表示结束,以“#”号或者“//”开始的部分表示注释文字(大段注释可以使用“/* …… */”的格式)。
1). 全局配置部分
全局配置参数包括在形如“options { };”的大括号中,如可以设置监听的地址和端口、区数据文件存放的目录、允许哪些客户机查询等。
[root@localhost ~]# cd /etc/
[root@localhost etc]# vim named.conf
…… //省略部分参数
options {
listen-on port 53 { 192.168.200.111; }; //监听地址和端口
directory "/var/named"; //区域数据文件的默认存放位置
allow-query { 192.168.100.0/24; 192.168.200.0/24; }; //允许使用本DNS服务的网段
};
…… //省略部分参数
上述配置内容中,除了directory项通常会保留以外,其他的配置项都可以省略。若不指定listen-on配置项时,named默认在所有接口的UDP 53端口监听服务,不指定allow-query配置项时,默认会响应所有客户机的查询请求。
2). 区域配置部分
区域配置参数使用“zone …… { };”的配置格式,一台DNS服务器可以为多个区域提供解析,因此在named.conf文件中也可以有很多个zone配置段。区域类型按照解析方向可分为正向区域、反向区域。
[root@localhost etc]# vim named.conf
…… //省略部分参数
zone "crushlinux.com" IN { //正向"crushlinux.com"区域
type master; //类型为主区域
file "crushlinux.zheng"; //区域数据文件为crushlinux. zheng
allow-transfer { 192.168.200.112; }; //允许下载的从服务器地址
};
zone "200.168.192.in-addr.arpa" IN { //反向"192.168.200.0/24"区域
type master;
file "crushlinux.fan";
};
…… //省略部分参数
在上述配置内容中,有几个地方需要注意。
■ 每个zone区域都是可选的(包括根域、回环域、反向域),具体根据实际需要而定,zone配置部分的“IN”关键字也可以省略。
■ 反向区域的名称由倒序的网络地址和“in-addr.arpa”组合而成。例如,对于192.168.200.0/24网段,其反向区域名称表示为“200.168.192.in-addr.arpa”。
■ file配置项用于指定实际的区域数据文件,文件名称由管理员自行设置。
■ 区域配置中的部分参数(如allow-transfer)也可以放在全局配置里。
修改完主配置文件以后,可以执行named-checkconf命令对named.conf文件进行语法检查。如果文件中没有语法错误,该命令将不给出任何提示,反之,则会给出相应的提示信息,只要根据出错提示修正文件中的错误即可。带“-z”选项的named-checkconf命令还可以尝试加载主配置文件中对应的区域数据库文件,并检查该文件是否存在问题。例如,当出现“…file not found”的错误时,表示找不到对应的文件。
[root@localhost etc]# named-checkconf -z /etc/named.conf
zone crushlinux.com/IN: loading from master file crushlinux.zheng failed: file not found
zone crushlinux.com/IN: not loaded due to errors.
_default/crushlinux.com/IN: file not found
…… //省略部分参数
关于named.conf文件中各种配置项的详细说明,可以执行"man named.conf,,查看手册页,也可参考配置样本文件/usr/share/doc/bind-9.8.2/sample/etc/named.conf。
②. 区域数据配置文件
区域数据配置文件通常位于/var/named/目录下,每个区域数据文件对应一个DNS解析区域,文件名及内容由该域的管理员自行设置。
根域“.”的区域数据文件比较特殊。Internet中所有的DNS服务器都使用同一份根区域数据文件,其中列出了所有根服务器的域名和IP地址。根区域数据文件可以从国际互联网络信息中心(InterNIC)的官方网站地址http://www.internic.net/下载。
在区域数据文件中,主要包括TTL配置项、 SOA (Start of Authority,授权信息开始)记录、地址解析记录。文件中的注释信息以分号“;”开始。
1). TTL配置及SOA记录部分
第一行的TTL配置用于设置默认生存周期,即缓存解析结果的有效时问。 SOA记录部分用于设置区域名称、管理邮箱,以及为从域名服务指定更新参数。
[root@localhost ~]# cd /var/named/
[root@localhost named]# vim crushlinux.zheng
$TTL 86400 ;有效解析记录的生存周期
@ IN SOA crushlinux.com. admin.crushlinux.com. ( ;SOA标记、域名、管理邮箱
2011030501 ;更新序列号,可以是10位以内的整数
3H ;刷新时间,重新下载地址数据的间隔
15M ;重试延时,下载失败后的重试间隔
1W ;失效时间,超过该时间仍无法下载则放弃
1D ;无效解析记录的生存周期
)
上述配置内容中,时间单位默认为秒,也可以使用以下单位: M (分)、H (时)、W (周)、D(天)。文件中的“@”符号当于“crushlinux.com.”,“admin.crushlinux.com.”,表示域管理员的电子邮箱地址(由于“@”符号已有其他含义,因此将邮件地址中的“@”用代替)。SOA记录中的更新序列号用来同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
2).地址解析记录部分
地址解析记录用来设置DNS区域内的域名、 IP地址映射关系,包括正向解析记录和反向解崭记录。反向解析记录只能用在反向区域数据文件中。
[root@localhost named]# vim crushlinux.zheng
…… //省略部分参数
@ IN NS ns1.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns1 IN A 192.168.200.111
www IN A 192.168.200.111
mail IN A 192.168.200.113
map IN A 192.168.200.114
ftp IN CNAME www
上述配置内容中,用到以下四种常见的地址解析记录。
■ NS域名服务器(Name Server):记录当前区域的DNS服务器的主机地址。
■ MX邮件交换(Mail Exchange):记录当前区域的邮件服务器的主机地址,数字10表示(当有多个MX记录时)选择邮件服务器的优先级,数字越大优先级越低。
■ A地址(Address):记录正向解析条目(IPV4)。例如,“WWW IN A 192.168.200.111”表示或名www.crushlinux.com对应的IP地址是192.168.200.111。
■ AAAA 地址(Address):记录正向解析条目(IPV6)。
■ CNAME别名(Canonical Name):记录某一个正向解析条目的其他名称。例如,“ftp IN CNAME www”表示域名ftp.crushlinux.com是www.crushlinux.com的别名。
其中,NS、MX记录行首的“@”符号可以省略(默认继承SOA记录行首的@信息),但是必须保留一个空格或Tab制表位。
在反向区域数据文件中,不会用到A地址记录,而是使用PTR指针(Point)记录。例如,对于反向区域crushlinux.fan,添加的反向解析记录可以是以下形式。
[root@localhost named]# vim crushlinux.fan
…… //省略部分参数
@ IN NS ns1.crushlinux.com.
IN MX 10 mail.crushlinux.com.
111 IN PTR ns1.crushlinux.com.
111 IN PTR www.crushlinux.com.
113 IN PTR mai.crushlinux.com.
114 IN PTR map.crushlinux.com.
使用PTR记录时,第一列中只需要指明对应IP地址的“主机地址”部分即可,如“111”、“113”等,系统在查找地址记录时会自动将当前反向域的网络地址作为前缀。例如,上述文件中的“4 IN PTR mai1.crushlinux.com.”,表示IP地址为192.168.200.113的主机的域名是mail.crushlinux.com.。
在区域数据配置文件中,凡是不以点号".″结尾的主机地址,系统在查找地址记录时都会自动将当前的域名作为后缀。例如,若当前的DNS域为“crushlinux.com”,则在文件中的主机地址“www”相当于“www.crushlinux.com”。因此,当使用完整的FQDN地址时,务必记得地址末尾的点号“.”不能省略。
修改完区域数据文件以后,可以执行named-checkconf命令对该文件进行语法检查。依次指定区域名称、数据文件名作为参数。如果文件中没有语法错误,系统将给出“OK”的提示信息。例如,若要检查DNS区域crushlinux.com的区域数据文件crushlinux.zheng,可以执行以下操作。
[root@localhost ~] # cd /var/named/
[root@localhost named] # named-checkzone crushlinux.com crushlinux.zheng
zone crushlinux.com/IN: loaded seria1 2011030501
0K
当一台服务器需要同时承载某个DNS区域内的许多个不同的域名时(如IDC的虚拟主机服务器、提供个人主页空问的网站服务器等),可以在区域数据文件的最后一行添加泛域名解析记录,即使用“*”以匹配任意主机名。
* IN A 192.168.200.111
基于域名解析的负载均衡:同一个域名对应到多个IP地址
www IN A 192.168.200.111
www IN A 192.168.200.112
www IN A 192.168.200.113
5、构建缓存域名服务器
学习了DNS服务器的相关基础知识、BIND软件包的安装,以及DNS服务器的配置文件组成、配置格式等。下面分别讲解构建缓存域名服务器、主域名服务器、从域名服务器的基本过程。
缓存域名服务器通常架设在公司的局域网内,主要目的是提高域名解析的速度,减少对互联网访问的出口流量。例如,在一个小型企业的内部网络,如下图中,可单独建立一台(或集成在网关主机中)缓存域名服务器,为各部门的员工计算机提供DNS解析服务。
参考上述网络结构,本小节案例使用的基本环境和要求如下所述。
■ 缓存域名服务器的IP地址为192.168.200.111,并能够正常访问互联网。
■ 缓存域名服务器代为处理客户端的DNS解析请求,并缓存查询结果。
■ 局域网内的各PC将首选DNS服务器地址设为192.168.200.111。
下面讲解使用BIND构建此缓存域名服务器的基本步骤。
①. 建立主配置文件named.conf
若使用范本文件创建named.conf,应注意修改或删除默认的监听设置、查询控制,以便能够为局域网段的客户机提供服务。另外,logging、view配置部分一般用不到,可以先注释以避免其干扰。
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.200.111; };
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 { 192.168.200.0/24; };
recursion yes;
};
zone "." IN { //正向“.”根区域
type hint; //类型为根区域
file "named.ca"; //区域数据文件为named.ca
};
上述配置内容中,dump-file、statistics-file、memstatistics-file等配置项用于指定缓存数据库文件、状态统计文件的位置。添加了“zone "." IN{ ……};”部分的根区域设置,尽管缓存服务器并没有自主控制的区域数据,但可以向根服务器进行迭代查询,并将最终获得的解析结果反馈给客户。
有时候为了提高解析效率,也可以不向根区域查询,而是将来自客户端的查询请求转发给国内电信运营商的DNS服务器(如北京的202.106.0.20、 202.106.148.1),缓存服务器收到返回的查询结果后再传递给客户端。只要去掉“zone "." IN{ ……};”的设置,并在全局配置中正确设置forwarders参数即可实现该功能。
[root@localhost etc]# vim named.conf
options {
…… //省略部分内容
forwarders{202.106.0.20; 202.106.148.1;};
};
②. 确认根域的区域数据文件named.ca
根区域的区域数据文件默认位于文件/var/named/named.ca中,该文件记录了Internet中13台根域服务器的域名和IP地址等相关信息。
[root@localhost ~]# ls /var/named/
data dynamic named.ca named.empty named.localhost named.loopback slaves
③. 启动named服务
执行“systemctl start named”命令,启动named服务,并通过netstat命令确认named服务的端口监听状态。若服务启动失败或发现没有正常监听UDP53端口,可以根据错误提示信息(或者/var/log/messages文件中的日志记录)排除错误,然后再重启服务即可。
[root@localhost ~]# systemctl start named
[root@localhost ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@localhost ~]# netstat -anpu | grep named
udp 0 0 192.168.200.111:53 0.0.0.0:* 63751/named
④. 验证缓存域名服务器
在局域网内的客户机中,将首选DNS服务器的地址设为192.168.200.111.生效后,执行“nslookup www.baidu.com”命令对其进行解析,验证其是否能够获得该域名对应的IP地址信息。
6、构建主域名服务器
主域名服务器通常架设在Internet环境中,提供某一个域或某几个域内的主机名与IP地址的查询服务。为了分担域名查询的压力、提供区域数据的备份,有时还会另外架设一台从域名服务器,与主域名服务器同时提供服务,如下图所示。
参考下图的网络结构,将分别介绍主域名服务器、从域名服务器的构建过程。案例使用的基本网络环境和要求如下所述。
■ 主、从域名服务器均位于Internet中,所负责的DNS区域为“crushlinux.com”。
■ 主服务器的IP地址为192.168.200.111,主机名为nsl.crushlinux.como
■ 从服务器的IP地址为192.168.200.112,主机名为ns2.crushlinux.como
■ 参考各服务器的地址映射关系,为192.168.200.0/24网段提供反向解析。
■ 在crushlinux.com区域中,除了NS记录以外,提供的解录还包括以下内容。
● 网站服务器www.crushlinux.com,IP地址为192.168.200.111。
● 邮件服务器mai1.crushlinux.com,IP地址为192.168.200.112。
● 在线培训服务器study.crushlinux.com,IP地址为192.168.200.113。
● 设置crushlinux.com域的泛域名解析,对应的IP地址为192.168.200.111。
■ 客户机将首选、备用DNS服务器分别设为192.168.200.111和192.168.200.112,使用其中的任何一个服务器.都能够正常查询crushlinux.com区域中的主机地址。
下面首先讲解使用BIND构建主域名服务器的基本步骤。
①. 确认本机的网络地址、主机映射、默认DNS服务器地址。
将主域名服务器的IP地址设为192.168.200.111、主机名设为ns1.crushlinux.com,通过修改网络配置文件的方式进行。另外,为了提高域名解析效率,建议将两个DNS服务器的地址映射直接写入到/etc/hosts文件中,并在/etc/resolv.conf文件中指定两个DNS服务器的地址。
[root@localhost ~]# tail -2 /etc/hosts
192.168.200.111 nsl.crushlinux.com nsl
192.168.200.112 ns2.crushlinux.com ns2
[root@localhost ~]# tail -2 /etc/resolv.conf
nameserver 192.168.200.111
nameserver 192.168.200.112
②. 建立主配置文件named.confo
新创建的named.conf主配置文件,由于只需要提供crushlinux.com域的正向解析和192.168.200.0/24网段的反向解析,因此相应地添加这两个区域即可。根区域、回环域等其他配置内容可以省略。
[root@localhost ~]# cd /etc/
[root@localhost etc]# vim named.conf
options {
directory "/var/named";
};
zone "crushlinux.com" IN { //正向"crushlinux.com"区域
type master; //类型为主区域
file "crushlinux.zheng"; //区域数据文件为crushlinux. com. zone
allow-transfer { 192.168.200.112; }; //允许从服务器地址下载正向域数据
};
zone "200.168.192.in-addr.arpa" IN { //反向"192.168.200.0/24"区域
type master;
file "crushlinux.fan";
allow-transfer { 192.168.200.112; }; //允许从服务器地址下载反向域数据
};
当不需要建立从域名服务器时,上述配置内容中的“allow-transfer ……”部分可以不添加,当不需要提供反向解析时,“zone "200.168.192.in-addr.arpa" IN { …… }”部分也可以去掉。
③. 建立正向、反向区域数据文件。
根据named.conf中的zone区域设置,分别建立正向区域数据文件crushlinux.zheng.反向区域数据文件crushlinux.fan配置内容可以参考区域数据文件/var/named/named.localhost。
[root@localhost ~]# cd /var/named/
[root@localhost named]# vim crushlinux.zheng
$TTL 86400 ;有效解析记录的生存周期
@ IN SOA crushlinux.com. admin.crushlinux.com. ( ;SOA标记、域名、管理邮箱
2011030501 ;更新序列号,可以是10位以内的整数
3H ;刷新时间,重新下载地址数据的间隔
15M ;重试延时,下载失败后的重试间隔
1W ;失效时间,超过该时间仍无法下载则放弃
1D ;无效解析记录的生存周期
)
@ IN NS ns1.crushlinux.com.
IN NS ns2.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns1 IN A 192.168.200.111
ns2 IN A 192.168.200.112
mail IN A 192.168.200.112
www IN A 192.168.200.111
study IN A 192.168.200.113
* IN A 192.168.200.111
[root@localhost named]# vim crushlinux.fan
$TTL 86400
@ IN SOA crushlinux.com. admin.crushlinux.com. (
2011030501
3H
15M
1W
1D
)
@ IN NS ns1.crushlinux.com.
IN NS ns2.crushlinux.com.
111 IN PTR www.crushlinux.com.
112 IN PTR mail.crushlinux.com.
113 IN PTR study.crushlinux.com.
111 IN PTR ns1.crushlinux.com.
112 IN PTR ns2.crushlinux.com.
④. 启动named服务或重载配置。
启动named服务,如果之前named服务已经在运行,也可以重启服务或重载配置。
[root@localhost named]# chgrp named crushlinux.zhengcrushlinux.fan
[root@localhost ~]# named-checkconf /etc/named.conf
[root@localhost ~]# named-checkzone crushlinux.com /var/named/crushlinux.zheng
zone crushlinux.com/IN: loaded serial 2019010801
OK
[root@localhost ~]# named-checkzone crushlinux.com /var/named/crushlinux.fan
zone crushlinux.com/IN: NS 'ns1.crushlinux.com' has no address records (A or AAAA)
zone crushlinux.com/IN: NS 'ns2.crushlinux.com' has no address records (A or AAAA)
zone crushlinux.com/IN: not loaded due to errors.
[root@localhost named]# systemctl reload named
⑤. 验证主域名服务器。
客户端将DNS服务器指向192.168.200.111 (主域名服务器的IP地址) ,使用nslookup命令验证DNS查询结果。例如,以下操作使用Windows 7客户机分别验证了正向解析、泛域名解析、反向解析的查询结果。
C:\Users\Administrator> nslookup study.crushlinux.com //验证正向域名解析
服务器: nsl.crushlinux.com
Address: 192.168.200.111
名称: Study.crushlinux.com
Address: 192.168.200.113
C:\Users\Administrator>nslookup www.crushlinux.com
服务器: ns1.crushlinux.com
Address: 192.168.200.111
名称: www.crushlinux.com
Address: 192.168.200.111
C: \Users\Administrator> nslookup xxyyzz.crushlinux.com //验证泛域名解析
服务器: nsl.crushlinux.com
Address: 192.168.200.111.
名称: xxyyzz.crushlinux.com
Address: 192.168.200.111
C:\Users\Administrator> nslookup192.168.200.112 //验证反向域名解析
服务器: nsl.crushlinux.com
Address: 192.168.200.111
名称: mai1.crushlinux.com
Address: 192.168.200.112
7、构建从域名服务器
继续用上面的应用案例,在已经构建好主域名服务器192.168.200.111的基础之上,继续构建从域名服务器192.168.200.112。
①. 确认本机的网络地址、主机映射、默认DNS服务器地址
将从域名服务器的IP地址设为192.168.200.112,主机名设为ns2.crushlinux.com,通过修改网络配置文件的方式进行。另外,主机映射文件/etc/hosts和DNS解析文件/etc/resolve.conf的内容与主服务器中的内容相同。
②. 建立主配置文件named.conf
在从域名服务器中,named.conf文件的内容与主服务器的内容大部分相同,只是不需要再设置“allow-transfer ……”,更关键的一点是, zone部分的区域类型应设置为“slave”,并添加“masters { };”语句来指定主域名服务器的地址。
[root@localhost ~]# yum -y install bind
[root@localhost ~]# cd /etc/
[root@localhost etc]# vim named.conf
options {
directory "/var/named";
};
zone "crushlinux.com" IN { //正向"crushlinux.com"区域
type slave; //类型为从区域
masters { 192.168.200.111; }; //指定主服务器的IP地址
file "slaves/crushlinux.zheng"; //下载的区域文件保存到slave/crushlinux. com. zone
};
zone "200.168.192.in-addr.arpa" IN { //反向"173.16.16.0/24"区域
type slave;
masters { 192.168.200.111; };
file " slave/Crushlinux.fan";
};
由于从服务器的区域数据文件是从主服务器中下载而来,因此该文件保存的名称可以自行定义,不用非得与主服务器中的一致。但需要注意的是,named服务默认以名为“named”的用户身份运行,因此要确认named用户对存放目录有写入权限。
[root@localhost ~]# ls -l /var/named/slaves/
总用量 0
③. 启动named服务,查看区域数据文件是否下载成功
在从域名服务器中启动named服务,若配置无误,则named将会从主域名服务器中自动下载指定的区域数据文件,并保存到“slaves/”目录下。另外,通过系统日志文件/var/log/messages也可以观察到下载区域数据文件的过程。
[root@localhost ~]# systemctl start named
[root@localhost ~]# ls -l /var/named/slaves/
总用量 8
-rw-r--r-- 1 named named 483 1月 8 23:03 crushlinux.fan
-rw-r--r-- 1 named named 538 1月 8 23:03 crushlinux.zheng
④. 验证从域名服务器
对于客户端来说,从域名服务器与主域名服务器并没有什么区别,通过主服务器能够查询到的信息,通过从服务器也同样能够查询到。验证从域名服务器时,只需要将客户端的首选DNS服务器地址设为192.168.200.112(从域名服务器的IP地址),使用nslookup命令进行正常测试即可。例如,以下操作是使用Linux客户机的测试结果。
[root@localhost etc]# nslookup study.crushlinux.com
服务器: mail.crushlinux.com
Address: 192.168.200.112
名称: study.crushlinux.com
Address: 192.168.200.113
[root@localhost etc]# nslookup 192.168.200.112
服务器: mail.crushlinux.com
Address: 192.168.200.112
名称: mail.crushlinux.com
Address: 192.168.200.112
8、DNS解析综合学习案例
1、用户需把/dev/myvg/mylv逻辑卷以支持磁盘配额的方式挂载到网页目录下
2、在网页目录下创建测试文件index.html,内容为用户名称,通过浏览器访问测试
3、创建用户账户,对LVM配置磁盘配额限制用户磁盘容量为软限制80M;硬限制100M、文件数量软限制为80个;硬限制为100个。
4、构建主从DNS域名解析环境
5、主从DNS都可将www.crushlinux.com域名解析为192.168.200.113
6、客户机可通过浏览器访问www.crushlinux.com得到WEB服务器相应内容
7、主域名服务器要同时担任缓存域名服务器功能
8、客户机通过nslookup域名测试工具可解析到www.jd.com等网站的域名解析结果
9、DNS生产环境案例
在域名运营商购买域名备案后,可将域名DNS更改为自己构建的DNS服务器。
[root@localhost ~]# nslookup www.crushlinux.com 134.175.27.146
Server: 134.175.27.146
Address: 134.175.27.146#53
Name: www.crushlinux.com
Address: 180.153.100.100
10、构建DNS域名服务器的分离解析
DNS分离解析域名服务器概述
DNS分离解析域名服务器实际也是主域名DNS服务器,这里所说的分离解析(Split DNS),主要是指根据不同来源的客户端请求,提供不同的域名解析记录。来自不同地址的客户机请求解析同一域名时,为其提供不同的解析结果。
分离解析案例:
如下图所示:Crushlinux工作室的DNS域名服务器架设在公司网关服务器中,网关服务器拥有两个网卡,ens32(VMnet8)的IP地址为192.168.200.111属于公司的内网通信网络;网卡ens34(Vmnet2)的IP地址为172.16.1.1属于公司的公网通信网络。公司注册的域名有网站服务器:www.crushlinux.com和邮件服务器:mail.crushlinux.com。
案例需求:
- 来自Internet的客户机解析www.crushlinux.com和mail.crushlinux.com域名时考虑服务器的安全性,需解析为公司的公网地址172.16.1.1。使其通过公司的网关服务器转发后访问网站和邮件服务器。
- 来自公司局域网中的客户机解析www.crushlinux.com和mail.crushlinux.com域名时考虑到用户访问速度分别解析为服务器局域网地址192.168.200.112和192.168.200.113。使其通过公司局域网直接访问相应服务器。
- 客户机切换网络模式,模拟内网与公网地址进行解析测试。
10.1、前期环境准备
[root@localhost ~]# ip a | grep ens
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.111/24 brd 192.168.200.255 scope global ens32
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 172.16.1.1/24 brd 172.16.1.255 scope global ens34
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# yum -y install bind
10.2、修改/etc/named.conf主配置文件中为不同网络的客户机地址准备不同的zone区域设置,各自使用独立的数据文件
[root@localhost ~]# vim /etc/named.conf
options {
directory "/var/named";
};
view "LAN" {
match-clients { 192.168.200.0/24; }; //匹配局域网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.lan";
};
};
view "WAN" {
match-clients { any; }; //匹配互联网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.wan";
};
};
10.3、分别建立不同的区域数据文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# vim crushlinux.zheng.lan
$TTL 86400
@ IN SOA crushlinux.com. admin.crushlinux.com. (
2019011001
3H
15M
1W
1D
)
IN NS ns.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns IN A 192.168.200.111
www IN A 192.168.200.112
mail IN A 192.168.200.113
[root@localhost named]# vim crushlinux.zheng.wan
$TTL 86400
@ IN SOA crushlinux.com. admin.crushlinux.com. (
2019011001
3H
15M
1W
1D
)
IN NS ns.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns IN A 172.16.1.1
www IN A 172.16.1.1
mail IN A 172.16.1.1
[root@localhost named]# chgrp named crushlinux.zheng.*
[root@localhost named]# ls -l crushlinux.zheng.*
-rw-r--r-- 1 root named 229 1月 10 23:51 crushlinux.zheng.lan
-rw-r--r-- 1 root named 214 1月 10 23:52 crushlinux.zheng.wan
[root@localhost named]# systemctl restart named
10.4、客户机设置网络模式为VMnet8,DNS服务器指向为192.168.200.111,解析测试
C:\Users\Crushlinux>nslookup www.crushlinux.com
服务器: UnKnown
Address: 192.168.200.111
名称: www.crushlinux.com
Address: 192.168.200.112
C:\Users\Crushlinux>nslookup mail.crushlinux.com
服务器: UnKnown
Address: 192.168.200.111
名称: mail.crushlinux.com
Address: 192.168.200.113
10.5、客户机设置网络模式为VMnet2,DNS服务器指向为172.16.1.1,解析测试
C:\Users\Crushlinux>nslookup www.crushlinux.com
服务器: UnKnown
Address: 172.16.1.1
名称: www.crushlinux.com
Address: 172.16.1.1
C:\Users\Crushlinux>nslookup mail.crushlinux.com
服务器: UnKnown
Address: 172.16.1.1
名称: mail.crushlinux.com
Address: 172.16.1.1
11、DNS view的多种应用方式
11.1、match-clients直接指定地址
[root@localhost ~]# vim /etc/named.conf
options {
directory "/var/named";
};
view "LAN" {
match-clients { 192.168.200.0/24; }; //匹配局域网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.lan";
};
};
view "WAN" {
match-clients { any; }; //匹配互联网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.wan";
};
};
11.2、基于acl访问控制列表
[root@localhost ~]# vim /etc/named.conf
options {
directory "/var/named";
};
acl lan { 192.168.200.0/24; }; //定义访问控制列表
acl wan { any; };
view "LAN" {
match-clients { lan; }; //匹配局域网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.lan";
};
};
view "WAN" {
match-clients { wan; }; //匹配互联网的客户端
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.wan";
};
};
11.3、基于访问控制文件
[root@localhost ~]# cat /var/named/lan.txt
acl lan {
192.168.200.0/24;
};
[root@localhost ~]# cat /var/named/wan.txt
acl wan {
any;
};
[root@localhost ~]# vim /etc/named.conf
[root@localhost ~]# cat /etc/named.conf
options {
directory "/var/named";
};
include "/var/named/lan.txt";
include "/var/named/wan.txt";
view "LAN" {
match-clients { lan; };
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.lan";
};
};
view "WAN" {
match-clients { wan; };
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.wan";
};
};
12、构建智能DNS域名解析服务器
随着原中国电信集团按南北地域分家,新的中国电信和网通集团随即成立,互联网的骨干网也被一分为二了,北有网通、南有电信。从此,细心的网民可以发现,有些经常访问的网站速度一下子慢了下来,有时候还有访问不到的情况出现。例如北方地区的网络用户访问中国网通的服务器会非常快,而访问中国电信的服务器时,感觉非常慢。这种现象不仅影响了网站的访问量,更严重的是它直接影响了一些经营性网站的经济效益。据分析,产生这个问题的根本原因是中国电信分家之后,电信与网通之间的互连存在问题。虽然信息产业部已经在规划南北互通计划,但在今后相当长的一段时期内,南北方网互连的问题还会长期存在。
智能DNS解析是针对电信和网通互联互通不畅的问题推出的一种DNS解决方案。
智能DNS域名解析服务器能自动判断访问者的IP地址并根据IP地址所属的运营商不同可为其解析出对应运营商服务器的IP地址,使网通用户访问到网通服务器,电信用户访问到电信服务器,而不需要用户进行选择。避免用户访问跨运营商导致用户访问速度缓慢。
例如一个企业网站站点带宽租用了三个运营商的带宽:电信、网通、移动,同样有三个来自不同运营商网络的访问用户,那电信用户访问企业网站时,智能DNS会进行自动判断,根据IP来源运营商,为其解析为电信运营商IP地址,使用户访问同运营商服务器;其他运营商的用户访问的也同理,如下图所示。
智能DNS策略解析还可以实现就近访问机制。有些用户在国外和国内都放置了服务器,使用我们的DNS策略解析服务可以让国外的网络用户访问你国外的服务器,国内的用户访问国内的服务器,从而使国内外的用户都能迅速的访问到你的服务器。
智能DNS作用
- 双线路的机房:服务本身有两个IP,一个电信IP,一个网通IP或者其他线路。
- 镜象网站:在网通及电信的机房放置多个相同的镜象站点, 让不同的地方客户访问不同的站点。
- 负载均衡:对于流量比较大的网站,可以把流量分配到几台不同的服务器上,以提高网站速度。
- 个性化站点服务:比如通过IP表的重新定义, 让国外的客户自动访问英文版的网站; 让国内的客户自动访问中文版的网站。
- CDN(内容分发网络)加速器:通过与squid、Nginx、Varnish等WEB缓存软件结合实现CDN加速器。
- 防止DDOS(分布式拒绝服务)攻击:通过多个线路分散攻击流量,从而达到抵挡DDOS攻击。
CDN加速基础原理
智能DNS域名服务器案例:
如下图所示:Crushlinux工作室的DNS域名服务器架设在公司网关服务器中,网关服务器拥有两个网卡,ens32(VMnet8)的IP地址为192.168.200.111属于公司的内网通信网络;网卡ens34(Vmnet2)的IP地址为172.16.1.1(VMnet2)属于公司的公网通信网络。公司注册的域名有网站服务器:www.crushlinux.com和邮件服务器:mail.crushlinux.com。
案例需求:
- 来自Internet的电信客户机解析www.crushlinux.com和mail.crushlinux.com域名时需解析为电信地址172.16.1.12。
- 来自Internet的网通客户机解析www.crushlinux.com和mail.crushlinux.com域名时需解析为网通地址172.16.1.13。
- 客户机切换IP地址模拟电信与网通运营商进行解析测试。
12.1、前期环境准备
[root@localhost ~]# ip a | grep ens
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.111/24 brd 192.168.200.255 scope global ens32
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 172.16.1.1/24 brd 172.16.1.255 scope global ens34
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# yum -y install bind
12.2、修改/etc/named.conf主配置文件中为不同运营商的客户机地址准备不同的zone区域设置,各自使用独立的数据文件
[root@localhost ~]# cat /var/named/wangtong.txt
acl wangtong {
172.16.1.3;
};
[root@localhost ~]# cat /var/named/dianxin.txt
acl dianxin {
172.16.1.2;
};
[root@localhost ~]# cat /etc/named.conf
options {
directory "/var/named";
};
include "/var/named/dianxin.txt";
include "/var/named/wangtong.txt";
view "dianxin" {
match-clients { dianxin; };
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.dianxin";
};
};
view "wangtong" {
match-clients { wangtong; };
zone "crushlinux.com" IN {
type master;
file "crushlinux.zheng.wangtong";
};
};
12.3、分别建立不同的区域数据文件
[root@localhost ~]# cd /var/named/
[root@localhost ~]# cat /var/named/crushlinux.zheng.dianxin
$TTL 86400
@ IN SOA crushlinux.com. admin.crushlinux.com. (
2019011001
3H
15M
1W
1D
)
IN NS ns.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns IN A 172.16.1.1
www IN A 172.16.1.12
mail IN A 172.16.1.12
[root@localhost ~]# cat /var/named/crushlinux.zheng.wangtong
$TTL 86400
@ IN SOA crushlinux.com. admin.crushlinux.com. (
2019011001
3H
15M
1W
1D
)
IN NS ns.crushlinux.com.
IN MX 10 mail.crushlinux.com.
ns IN A 172.16.1.1
www IN A 172.16.1.13
mail IN A 172.16.1.13
[root@localhost named]# chgrp named crushlinux.zheng.*
[root@localhost named]# ls -l crushlinux.zheng.*
-rw-r--r-- 1 root named 229 1月 10 23:51 crushlinux.zheng.lan
-rw-r--r-- 1 root named 214 1月 10 23:52 crushlinux.zheng.wan
[root@localhost named]# systemctl restart named
12.4、客户机设置网络模式为VMnet2,IP地址为172.16.1.2模拟电信用户,解析测试
C:\Users\Crushlinux>nslookup www.crushlinux.com
服务器: UnKnown
Address: 172.16.1.1
名称: www.crushlinux.com
Address: 172.16.1.12
12.5、客户机设置网络模式为VMnet2,IP地址为172.16.1.3模拟网通用户,解析测试
C:\Users\Crushlinux>nslookup www.crushlinux.com
服务器: UnKnown
Address: 172.16.1.1
名称: www.crushlinux.com
Address: 172.16.1.13
13、获取不同运营商的IP地址范围
https://github.com/clangcn/everyday-update-cn-isp-ip
根据APNIC的最新IP地址列表及whois信息,每日0点(北京时间)生成的各主要运营商IP地址段。
中国电信 IP地址段:(http://ispip.clang.cn/chinatelecom.html)
中国联通(网通)IP地址段:(http://ispip.clang.cn/unicom_cnc.html)
中国移动 IP地址段:(http://ispip.clang.cn/cmcc.html)
中国铁通 IP地址段:(http://ispip.clang.cn/crtc.html)
中国教育网 IP地址段:(http://ispip.clang.cn/cernet.html)
中国其他ISP IP地址段:(http://ispip.clang.cn/othernet.html)
[root@localhost ~]# cat ispip.sh
#!/bin/bash
url="http://ispip.clang.cn/"
for i in chinatelecom unicom_cnc cmcc crtc cernet othernet
do
wget $url$i.html -O /tmp/$i.txt
sed -n '/^[0-9]/ s/<br>/;/gp' /tmp/$i.txt | sed "1iacl $i {" | sed '$a};' > /var/named/$i.txt
done
[root@localhost ~]# chmod +x ispip.sh
[root@localhost ~]# crontab -e
* */5 * * * /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1
05 0 * * * /bin/bash /root/ispip.sh
[root@localhost ~]# systemctl restart crond