- DNS (Domain Name System,域名系统)
相较于由数字构成的 IP 地址,域名更容易被理解和记忆,所以我们通常更习惯通过域名的方式来访问网络中的资源。但是,网络中的计算机之间只能基于 IP 地址来相互识别对方的身份,而且要想在互联网中传输数据,也必须基于外网的 IP 地址来完成。
为了降低用户访问网络资源的门槛,DNS(Domain Name System,域名系统)技术应运而生。这是一项用于管理和解析域名与 IP 地址对应关系的技术,简单来说,就是能够接受用户输入的域名或 IP 地址,然后自动查找与之匹配(或者说具有映射关系)的 IP 地址或域名,即将域名解析为 IP 地址(正向解析),或将 IP 地址解析为域名(反向解析)。
这样一来,我们只需要在浏览器中输入域名就能打开想要访问的网站了。DNS 域名解析技术的正向解析也是我们最常使用的一种工作模式。
下面来介绍 DNS 服务器的配置
- BIND
BIND( Berkeley Internet Name Domain),伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。
在 bind 服务程序有以下三个关键的文件:
执行如下命令进行安装:
[root@dns-server ~]# yum install bind.x86_64 -y
Loaded plugins: langpacks
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.9.4-14.el7 will be installed
.........(省略安装过程)..........
Installed:
bind.x86_64 32:9.9.4-14.el7
Complete!
高速缓存 DNS 服务器:通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
在 DNS 服务器端
对主配置文件( /etc/named.conf )进行配置
/etc/named.conf named 服务的配置文件。语句用括号括起来,以分号结束。语句中的子句也是分号终止。支持通常的注释样式。
编辑配置文件第11,18,33行:
[root@dns-server ~]# vim /etc/named.conf
........(我是用来省略的)........
10 options {
11 listen-on port 53 { any; }; #允许任何ip通过53端口进行访问
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; };
#控制哪些客户端可以向 DNS 服务器询问信息
18 forwarders {114.114.114.114; };
#包含 DNS 查询将转发至的名称服务器列表
19
........(我是用来省略的)........
32 dnssec-enable yes;
33 dnssec-validation no; #DNS安全扩展验证关闭
配置完成重启服务
[root@dns-server ~]# systemctl restart named
关闭服务器防火墙
[root@dns-server ~]# systemctl stop firewalld
[root@dns-server ~]# systemctl disable firewalld
执行如下:
对主配置文件( /etc/named.conf )进行配置
在客户端
编辑 /etc/resolv.conf 设置获取 DNS 服务的服务器
[root@client3 ~]# vim /etc/resolv.conf
编辑如下:
1 # Generated by NetworkManager
2 nameserver 172.25.151.150 #DNS 服务器 IP
关闭客户端防火墙
[root@client3 ~]# systemctl stop firewalld
[root@client3 ~]# systemctl disable firewalld
通过 dig 命令查看是否设置成功
dig #DNS 查找工具
[root@client3 ~]# dig www.baidu.com
执行如下:
编辑 /etc/resolv.conf 设置获取 DNS 服务的服务器
通过 dig 服务进行 DNS 查询
客户端2 进行dig,查询时间:1618毫秒
客户端3 进行dig,查询时间:0毫秒
以上操作验证了高速缓存服务器的作用,客户端2 进行 DNS 查询时,DNS 服务器从其他域名解析服务器查询获得域名保存在本地,下一次有客户端进行访问时,将会快速查询
权威 DNS 服务器:在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对应关系。
在 DNS 域名解析服务中,正向解析是指根据域名(主机名)查找到对应的 IP 地址。也就是说,当用户输入了一个域名后,bind 服务程序会自动进行查找,并将匹配到的 IP 地址返给用户。这也是最常用的 DNS 工作模式。
配置如下:
编辑主配置文件( /etc/named.conf )
[root@dns-server ~]# vim /etc/named.conf
18 forwarders {114.114.114.114; }; #删除此行
编辑区域配置文件(/etc/named.rfc1912.zones)
[root@dns-server ~]# vim /etc/named.rfc1912.zones
添加如下内容:
26 zone "server.com" IN {
27 type master;
#服务类型
28 file "server.com.zone";
#域名与 IP 地址解析规则保存的文件位置
29 allow-update { none; };
#允许哪些客户动态更新解析信息
30 };
执行如下:
1.编辑主配置文件( /etc/named.conf )
2.编辑区域配置文件(/etc/named.rfc1912.zones)
上述区域配置文件(/etc/named.rfc1912.zones)第 28 行的域名与 IP 地址解析规则保存的文件 server.com.zone 在/var/named 下
可通过执行 cp -p named.localhost server.com.znoe 通过模版文件生成
注意
cp - p 命令,保留文件的属性,如果此文件named 用户不可读,则会导致 named 服务无法识别此文件
在主服务器端:
编辑配置文件 /var/named/server.com.zone
[root@dns-server ~]# vim /var/named/server.com.zone
内容如下:
1 $TTL 1D
2 @ IN SOA dns.server.com. root.server.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.server.com. #域名服务器记录
9 dns A 117.25.151.150 #地址记录(dns.server.com)
10 lin A 172.25.151.139 #地址记录(lin.server.com)
11 juan A 172.25.151.140 #地址记录(jun.server.com)
12 www CNAME node1.server.com. #定义了node1 的别名为 www
13 node1 A 172.25.151.100
14 node1 A 172.25.151.200
~
====================================================================
其中:
TTL #time to live 生存时间,默认为秒
@ #表示相应的域名,表示一个域名定义的开始
#这里代表server.com
IN #表示后面的数据使用的是INTERNET标准
SOA #表示授权开始
dns.server.com. #该域的主域名服务器
root.server.com. #管理员邮件地址
serial #更新序列号。表示配置文件的修改版本,格式是年月日当日修改的次数,每次修改时都应该
#修改这个数字,要不然所做修改的不会更新到网上的其它DNS服务器的数据库上,即你所做
#的更新很可能对于不以你你的所配置的DNS服务器数据库上,即你所做的更新很可能对于不
#以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来
#说你的更新是没意义的
refresh #定义以单位(M分,H时,W周,默认是秒即不带单位)的刷新频率,即规定从域名服务器
#多长时间查询一个主服务器,以服务器的数据的是最新的
retry #以30分钟的时间间隔重试,即当从服务器试图在主服务器上查询更新时,而连接失败了,
#则这个值规定了从服务器多长时间后重试
expire #规定从服务器在向主服务器更新失败之后清除记录的时间
minimum #规定缓冲服务器不能与主服务器联系上的清除记录时间
NS ( net server ) #表示该主机是域名服务器
A ( address ) #定义了一条A记录,表示该主机名到IP地址的对应记录
CNAME #定义了对应主机的一个别名
[root@dns-server ~]# systemctl restart named
#重启 named 服务
执行如下:
编辑配置文件 /var/named/server.com.zone
在客户端
修改客户端 dns 服务器
编辑 /etc/resolv.conf
[root@client2 ~]# vim /etc/resolv.conf
内容如下:
1 # Generated by NetworkManager
2 nameserver 172.25.151.150 #DNS 服务器 IP
dig 服务器端有的地址记录进行 DNS 服务器配置确认
执行如下:
1.修改客户端 dns 服务器
2.通过 dig 来测试 DNS 服务器是否部署成功
dig lin.server.com
dig www.server.com 来查看 CNAME 的效果
第一次 dig
第二次 dig
与 dig 百度的域名是类似的
DNS 域名解析服务中,反向解析的作用是将用户提交的 IP 地址解析为对应的域名信息,它一般用于对某个 IP 地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个 IP 地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严重的超售问题。
在 DNS 服务器端
编辑:/etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones
内容如下:
50 zone "151.25.172.in-addr.arpa" IN {
#表示 172.25.151.0/24 网段的反向解析区域
51 type master;
52 file "server.com.ptr";
53 allow-update { none; };
54 };
#通过 cp -p /var/named/loopback /var/named/server.com.ptr 创建上述对应的文件
[root@dns-server ~]# cp -p /var/named/named.loopback /var/named/server.com.ptr
编辑 /var/named/server.com.ptr
[root@dns-server ~]# vim /var/named/server.com.ptr
内容如下:
1 $TTL 1D
2 @ IN SOA dns.server.com. root.server.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.server.com.
9 dns A 172.25.151.150
10 139 PTR lin.server.com. #PTR 为指针记录,仅用于反向解析
11 140 PTR juan.server.com.
~
注:
配置完成后重启服务
执行如下:
编辑:/etc/named.rfc1912.zones
编辑:/var/named/server.com.ptr
在服务端进行验证
可以直接使用 nslookup 命令来检验解析结果,仅需输入 IP 地址即可查询到对应的域名信息。
nslookup #查询Internet名称服务器
在一个企业中,DNS 服务器应该可以保证企业内用户和使用本企业 DNS 的外网用户访问到的 IP 不同,从而方便企业内的用户进行操作
在服务端
编辑主配置文件 /etc/named.conf
内容如下:
.........(我是用来省略的).........
51 /*
52 zone "." IN {
53 type hint;
54 file "named.ca";
55 };
56
57 include "/etc/named.rfc1912.zones";
58 include "/etc/named.root.key";
59 */
#将上述内容注释:
61 view localnet { #本地客户访问的 DNS 服务
62 match-clients { 172.25.151.25; }; #允许固定IP或网段的用户访问
63 zone "." IN{
64 type hint;
65 file "named.ca";
66 };
67 include "/etc/named.rfc1912.zones";
68 };
69
70
71 view internet { #外网客户访问的 DNS 服务
72 match-clients { any; }; #允许所有用户访问
73 zone "." IN{
74 type hint;
75 file "named.ca";
76 };
77 include "/etc/named.rfc1912.zones.inter";
78 };
配置完成后为外网添加 DNS 服务器配置文件
执行 cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.inter
将外网DNS的主配置文件创建出来
编辑/etc/named.rfc1912.znoes.inter
内容如下:将外网用户的 DNS 解析文件,设置为 “server.com.inter”
25 zone "server.com" IN {
26
27 type master;
28 file "server.com.inter";
29 allow-update { none; };
30 };
执行 cp -p /var/named/server.com.zone /var/named/server.com.inter
将外网 DNS 的解析文件创建出来
编辑: /var/named/server.com.inter
[root@dns-server ~]# vim /var/named/server.com.inter
内容如下:
1 $TTL 1D
2 @ IN SOA dns.server.com. root.server.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.server.com.
9 dns A 192.168.1.150
10 lin A 192.168.1.139
11 juan A 192.168.1.140
12 www CNAME node1.server.com.
13 node1 A 192.168.1.100
14 node1 A 192.168.1.200
注:
配置完成后重启服务
执行如下:
编辑: /etc/named.rfc1912.zones.inter
编辑: /var/named/server.com.inter
在可客户端进行测试
client2 是企业内用户,看到的是 172.25.151.0
client3 是外网用户,看到的是192.268.1.0
从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器宕机等情况。
部署 DNS 集群前,先将主 DNS 服务器中关于内外网的 DNS 的相关配置去掉
首先在子 DNS 服务器安装 DNS 服务
1. 配置 DNS 子服务器
在从属服务器中配置如下(编辑/etc/named.conf)
[root@dns-slave ~]# vim /etc/named.conf
内容如下:
10 options {
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; };
.........(省略).........
编辑 /etc/named.rfc1912.zones
25 zone "server.com" IN {
26 type slave; #类型为从属
27 masters { 172.25.151.150 }; #为 172.25.151.150 服务
28 file "slaves/server.com";
29 allow-update { none; };
30 };
配置完成,重启 named 服务
注:
重启 named 服务
执行如下:
编辑 /etc/named.conf
编辑 /etc/named.rfc1912.zones
子服务端配置完成
2. 配置主服务器
在主服务器中配置 /etc/named.conf
25 zone "server.com" IN {
26 type master;
27 file "server.com.zone";
28 allow-update { none; };
29 also-notify { 172.25.151.50; }; #也通知 172.25.151.50 这台主机
30 };
31
执行如下:
如上就完成了对 DNS 从服务器的部署
在客户端,将 client2 的 DNS 服务器设为主服务器,client3 的 DNS 服务器设为从属服务器进行验证
client2 的 DNS 为172.25.151.150(为主 DNS 服务器)
client3 的 DNS 为172.25.151.5(从 DNS 服务器)
执行dig 命令进行验证:
client2:dig www.server.com
client3:dig www.server.com
若是在对主服务器的 地址信息进行了变化,需要对 serial 前的数字修改,否则从属服务器无法识别修改内容
serial: 更新序列号。表示配置文件的修改版本,格式是年月日当日修改的次数,每次修改时都应该修改这个数字,要不然所做修改的不会更新到网上的其它DNS服务器的数据库上,即你所做的更新很可能对于不以你你的所配置的DNS服务器数据库上,即你所做的更新很可能对于不以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来你的更新是没意义的
编辑 /var/named/server.com.zone
[root@dns-server ~]# vim /var/named/server.com.zone
内容如下:
1 $TTL 1D
2 @ IN SOA dns.server.com. root.server.com. (
3 2018052201 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.server.com.
9 dns A 172.25.151.150
10 lin A 172.25.151.139
11 juan A 172.25.151.140
12 www CNAME node1.server.com.
13 node1 A 172.25.151.101 #修改 IP
14 node1 A 172.25.151.201
配置完成,重启 named 服务
执行如下:
在主服务器修改信息
在客户端进行 dig 测试(未修改 serial 从属服务器是不会识别更改的)
client2:dig www.server.com
client3:dig www.server.com (无法观察到变化)
修改 serial 后
有时候需要从 DNS 从属服务器向主服务器更新 DNS 信息
在主服务器中编辑配置文件 /etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones
内容如下:
25 zone "server.com" IN {
26 type master;
27 file "server.com.zone";
28 allow-update { 172.25.151.50; }; #允许 172.25.151.50 进行上传
29 also-notify { 172.25.151.50; };
30 };
配置完成,重启 named 服务
更新后修改 /var/named/ 目录的权限,让 “组权限” 可写,否则从属服务器无法上传信息到主服务器
[root@dns-server ~]# chmod 770 /var/named/
若还是拒绝(refuse)可查看配置文件,允许更新的主机IP是否正确,再查看是否与SELinux有关
在 DNS 从属服务器端,执行如下,进行 DNS 更新
在从属服务器中执行 nsupdate 命令进行更新
nsupdate #动态域名更新实用程序
[root@dns-slave ~]# nsupdate
> server 172.25.151.150 #要上传的目的地(主服务器)
> update add test.server.com 86400 A 172.25.151.138
#添加需要更新的 DNS
> send #发送当前的消息。这相当于输入一个空行。
上传成功后会在 DNS 主服务器中产生一个文件 /var/named/server.com.zone.jnl
客户端就可以 dig 到 test.server.com
现在主服务器的 /var/named/server.com.zone 的 DNS 内容是没有更新的
在主服务器重启服务之后才会更新(systemctl restart named)
执行如下:
在主服务器端:
编辑 :/etc/named.rfc1912.zones
修改 /var/named/ 的权限
在从属服务器端
进行 DNS 上传
上述通过指定子服务器 IP 来更新 DNS 不够安全,可以通过密钥的方式来进行
主服务器上
在主服务器执行dnssec-keygen 获取密钥
dnssec-keygen #DNSSEC密钥生成工具
-a #选择加密算法。(与/etc/rndc.key 算法类型一致)
-b #密钥长度(HMAC-MD5 的密钥长度在 1~512 位之间)
-n #密钥的类型(HOST 表示与主机相关)
[root@dns-server ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST server
编辑 /etc/named.conf
[root@dns-server ~]# cat Kserver.+157+45394.key
server. IN KEY 512 3 157 R09+8ydlKpcxjr1gZSU/Yg==
#密钥名字为:server 密钥内容为:R09+8ydlKpcxjr1gZSU/Yg==
执行:cp -p /etc/rndc.key /etc/server.key 创建出密钥文件
编辑密钥文件:
[root@dns-server ~]# vim /etc/server.key
内容如下:
1 key "server" { #密钥名称
2 algorithm hmac-md5; #加密类型
3 secret "R09+8ydlKpcxjr1gZSU/Yg=="; #密钥内容
4 };
===========================================================================
编辑:/etc/named.conf
[root@dns-server ~]# vim /etc/named.conf
内容如下:在 logging 前添加 include "/etc/server.key";让 dns 服务可以识别生成的密钥
44 include "/etc/server.key";
45
46 logging {
===========================================================================
编辑: /etc/named.rfc1912.zones
[root@dns-server ~]# vim /etc/named.rfc1912.zones
内容如下:
25 zone "server.com" IN {
26 type master;
27 file "server.com.zone";
28 allow-update { key server; }; #以密钥形式进行上传
29 also-notify { 172.25.151.50; };
30 };
重启 named 服务
将密钥上传给从属服务器
[root@dns-server ~]# scp Kserver.+157+45394.* [email protected]:/mnt/
执行如下:
在主服务器执行dnssec-keygen 获取密钥
创建密钥文件并进行编辑
编辑内容如下
编辑 /etc/named.conf
编辑 /etc/named.rfc1912.zones
将密钥上传给子服务器
从属服务器上
在从属服务器上执行:
nsupdate -k /mnt/Kserver.+157+44728.private
#动态域名更新实用程序
> server 172.25.254.139 #要上传的目的地(主服务器)
> update add test.server.com 86400 A 172.25.151.138
#添加需要更新的 DNS
> send #发送当前的消息。这相当于输入一个空行。
- DDNS(Dynamic Domain Name Server)是动态域名服务
在主服务器端
首先在 DNS 主服务器中安装配置 DHCP 服务
[root@dns-server ~]# yum install dhcp.x86_64
Loaded plugins: langpacks
rhel7.0 | 4.1 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.2.5-27.el7 will be installed
.........(我是用来省略的).........
Installed:
dhcp.x86_64 12:4.2.5-27.el7
Complete!
安装 dhcpd 服务后
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
编辑 dhcp 主配置文件
[root@dns-server ~]# vim /etc/dhcp/dhcpd.conf
内容如下:
.........(我是用来省略的).........
6 # option definitions common to all supported networks...
7 option domain-name "server.com"; #备选域名
8 option domain-name-servers 172.25.151.150; #备选域名服务器
9
.........(我是用来省略的).........
13 # Use this to enble / disable dynamic dns updates globally.
# 使用此功能可在全局范围内禁用/禁用动态dns更新。
14 ddns-update-style interim; #启用
.........(我是用来省略的).........
29
30 subnet 172.25.254.0 netmask 255.255.255.0 { #设置动态分配的网段和子网掩码
31 range 172.25.254.10 172.25.254.20; #设置动态分配的 IP 范围
32 option routers 172.25.254.139; #分配的网关
33 }
34
35 key server { #dns 服务密钥
36 algorithm hmac-md5;
37 secret R09+8ydlKpcxjr1gZSU/Yg==;
38 }
39
40 zone server.com. { #dns 服务区域
41 primary 127.0.0.1; #允许哪个主机进行动态同步(写 DNS服务器所在 IP )
42 key server; #通过密钥进行
43 }
44
重启 dhcpd 服务:
[root@dns-server ~]# systemctl restart dhcpd.service
执行如下:
配置 /etc/dhcp/dhcpd.conf 并重启服务
在从属服务器端
为从属服务器动态分配 IP
编辑网络配置文件,设置 IP 获取类型为 dhcp
[root@dns-slave ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
内容如下:
1 DEVICE=eth0
2 NAME=eth0
3 ONBOOT=yes
4 BOOTPROTO=dhcp #设置动态自动获取 IP
重启网络服务
修改子服务器主即名为:linux.server.com
#注:必须为 .server.com 为此域名下的,否则无法识别
[root@dns-slave ~]# hostnamectl set-hostname linux.server.com
在主服务器端配置好后,重启网络,执行 dig linux.server.com 可以查到此域名
在主服务器端修改动态网络配置范围,再重子服务器网络,执行 dig linux.server.com 进行查
看,此服务器域名 IP 可获取,并为自动修改。 而且每次获取的域名信息会在重启主服务器named服
务后保存在 /var/named/server.com.zone 下
执行如下:
在子服务端修改 IP 类型为自动获取 IP
修改主机名称
进行 dig 测试
在服务端修改自动获取的 IP 范围为 172.25.151.41 - 172.25.151.49,重启从服务端网络,再进行dig 测试
主服务器端重启服务后,linux.server.com 的信息出现在配置文件(/var/named/server/com/zone)中
**以上表示,自动获取 IP 成功且自动修改 DNS **