DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。
主机名到IP地址的映射有两种方式:
1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。
提供DNS服务的是安装了DNS服务器端软件的计算机。服务器端软件既可以是基于类linux操作系统,也可以是基于Windows操作系统的。装好DNS服务器软件后,您就可以在您指定的位置创建区域文件了,所谓区域文件就是包含了此域中名字到IP地址解析记录的一个文件,如文件的内容是这样的:
primary name server = dns2 ##(主服务器的主机名是dns2 )
serial = 291 ##(序列号=2913、这个序列号的作用是当辅域名服务器来复制这个文件的时候,如果号码增加了就复制)
refresh = 10800 (3 hours) ## (刷新=10800秒、辅域名服务器每隔3小时查询一个主服务器)
retry = 3600 (1 hour) ## (重试=3600秒、当辅域名服务试图在主服务器上查询更新时,而连接失败了,辅域名服务器每隔1小时访问主域名服务器)
expire = 604800 (7 days) ##(到期=604800秒、辅域名服务器在向主服务更新失败后,7天后删除中的记录。)
default TTL = 3600 (1 hour) ##(默认生存时间=3600秒、缓存服务器保存记录的时间是1小时。也就是告诉缓存服务器保存域的解析记录为1小时)
minimun=default
yum install -y bind ##安装服务
systemctl start named ##开启named服务,此步操作会卡住,移动鼠标或操作键盘可以解决
systemctl enable named ##开机启动named服务
firewall-cmd --permanent --add-service=dns ##火墙策略
firewall-cmd --reload
vim /etc/named.conf
listen-on port 53 { any; }; ##将所有网络的53端口打开,any表示开在任意服务的53端口
allow-query { any; }; ##any表示允许所有可达主机从这台dns服务器获取解析
forwarders {172.25.254.250; }; ##转发器,本机解析不了就将请求转发给250
systemctl restart named
vim /etc/resolv.conf ##为本机配置dns解析服务器
nameserver 172.25.254.100
dig www.redhat.com
正向解析是将域名映射为IP地址,例如,DNS客户机可以查询主机名称为server.zzidc.com的IP地址。要实现正向解析,必须在DNS服务器内创建一个正向解析区域。
cd /var/named/
cp -p named.localhost redhat.com.zone
vim redhat.com.zone
1 $TTL 1D
2 @ IN SOA dns.redhat.com. root.redhat.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.redhat.com.
9 dns A 172.25.254.100
10 www A 172.25.254.111
##dns.redhat.com.为我们的dns解析,root.redhat.com.为邮箱
vim /etc/named.rfc1912.zones
25 zone "redhat.com" IN {
26 type master;
27 file "redhat.com.zone";
28 allow-update { none; };
29 };
systemctl restart named
在我们的客户端用以下命令测试是否成功
dig www.redhat.com
状态 | 含义 |
---|---|
QUESTION | 提出实际的 DNS 查询 |
ANSWER | 响应 |
AUTHORITY | 负责域 / 区域的名称服务器 |
ADDITIONAL | 供的其他信息 , 通常是关于名称服务器底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间 |
NOERROR | 查询成功 |
NXDOMAIN | DNS 服务器提示不存在这样的名称 |
SERVFAIL DNS | 服务器停机或 DNSSEC 响应验证失败 |
REFUSED | DNS 服务器拒绝回答 ( 也许是出于访问控制原因 ) |
轮叫(压力均摊)
news A 172.25.254.111
news A 172.25.254.188
cd /var/named/
cp -p named.loopback redhat.com.ptr
vim redhat.com.ptr
1 $TTL 1D
2 @ IN SOA dns.redhat.com. root.redhat.com. (
3 0 ; serial
4 1D ; refresh
5 1H ; retry
6 1W ; expire
7 3H ) ; minimum
8 NS dns.redhat.com.
9 dns A 172.25.254.100
10 10 PTR bbs.redhat.com.
11 20 PTR hello.redhat.com.
vim /etc/named.rfc1912.zones
48 zone "254.25.172.in-addr.arpa" IN {
49 type master;
50 file "redhat.com.ptr";
51 allow-update { none; };
52 };
即不同的IP询问同一个域名,解析出不同的IP
man 5 named.conf
##在主配置文件中注释掉zone
58 view local {
59 match-clients{ 172.25.254.200; };
60
61 zone "." IN {
62 type hint;
63 file "named.ca";
64 };
65 include "/etc/named.rfc1913.zones";
66 };
67 view other {
68 match-clients{ any; };
69
70 zone "." IN {
71 type hint;
72 file "named.ca";
73 };
74 include "/etc/named.rfc1912.zones";
75 };
表示172.25.254.200访问时读取named.rfc1913.zones文件,其余读取named.rfc1912.zones文件
cp -p /etc/named.rfc1912.zones /etc/named.rfc1913.zones
vim /etc/named.rfc1913.zones
zone "redhat.com" IN {
type master;
file "redhat.com.zone";
allow-update { none; };
};
cp -p /var/named/redhat.com.zone /var/named/redhat.com.inter
vim /var/named/redhat.com.inter
:%s/172.25.254/192.168.0/g
将172.25.254.200 dns改为172.25.254.100测试即可
但是实际应用中,访问量优势高达几十万,只有一台dns服务器远远不够,为了分担dns的压力,我们需要再配置一台服务器(辅助dns)
172.25.254.200
yum install -y bind
systemctl start named
systemctl enable named
systemctl stop firewalld.service
systemctl disable firewalld.service
vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
systemctl restart named
vim /etc/named.conf
nameserver 172.25.254.200
vim /etc/named.rfc1912.zones
zone "westos.com" IN {
type slave; 类型为辅助dns
masters { 172.25.254.100; }; 主dns为172.25.254.100
file "slaves/redhat.com.inter";
allow-update { none; };
};
重启服务更新OK,但是主dns修改辅助dns不会更新,辅助dns也需要重启服务才会更新,下面来解决这个问题
在主dns服务器172.25.254.100上做以下修改
vim /etc/named.rfc1912.zones
zone "redhat.com" IN {
type master;
file "redhat.com.inter";
allow-update { none; };
also-notify { 172.25.254.200; };##添加这一行,始终将更改同步到辅助dns服务器
};
dns服务器内容改变后重启服务更新OK,辅助dns服务器不需重启服务自动更新
下面介绍下redhat.com.zone文件内各项的含义
$TTL 1D
@ IN SOA dns.redhat.com. root.redhat.com. (
2017090505 ; serial ##服务编号
1D ; refresh ##刷新时间
1H ; retry ##如果询问失败再次查询的时间
1W ; expire ##到期日
3H ) ; minimum ##最短的到期日
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST redhat ##生成密匙
cat Kredhat.+157+18569.key
redhat. IN KEY 512 3 157 4SJx4m33BpJnNpl8slHIWA==
cp /etc/rndc.key /etc/redhat.key -p ##生成dns的加密文件
vim /etc/redhat.key
key "redhat" { ##key名称
algorithm hmac-md5;
secret "4SJx4m33BpJnNpl8slHIWA=="; ##key的加密字符
};
vim /etc/named.conf
43 include "/etc/redhat.key"; ##指定dns服务读取的key文件
vim /etc/named.rfc1913.zones
zone "redhat.com" IN {
type master;
file "redhat.com.inter";
allow-update { key redhat; }; ##指定redhat域可以被redhatkey 更新
};
##测试更新
nsupdate -k Kredhat.+157+62730.private
>server 172.25.254.100
>update add news.redhat.com 86400 A 172.25.254.234
>send
>quit
vim /etc/dhcp/dhcpd.conf
14 ddns-update-style interim; ##开启dhcp更新dns功能
37 key westos { ##dhcp更新dns时用到的key
38 algorithm hmac-md5;
39 secret 4SJx4m33BpJnNpl8slHIWA==;
40 };
41
42 zone westos.com. { ##指定dhcp更新的域名
43 primary 127.0.0.1; ##指定dns所在的主机ip
44 key westos; ##指定更新这个域时用到的key名称
45 }