linux服务篇-DNS服务
DNS(Domain Name System,域名系统),在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务,简单的说,域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。但是实际上是通过ip去访问的!通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS功能
互联网上(或者局域网)的每一台主机需要互相访问通讯,都必须有一个IP地址,或者IPV4,或者IPV6,而每一个IP都可以有一个主机名(或者域名),主机名可以是一个或多个字符串,方便我们的记忆,字符串可以有小数点隔开。而每一台主机的IP地址相当累赘,那么有了DNS域名解析,我们就可以很方便的只记忆我们的字符串!
拓展:主机到IP的映射有两种:
1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用,也就是我们常说的hosts文件;
2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。
HOSTS等相关配置文件
在引入DNS之前,网络中的主机是将容易记忆的域名映射到IP地址并将它保存在一个共享的静态文件/etc/hosts中,再有hosts文件来实现网络中域名的管理。
hosts是一个没有扩展名的系统文件,其作用是将一些常用的网络域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从/etc/hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址解析。
若想要优先选取DNS解析,可以修改/etc/nsswitch.conf文件。
hosts: files dns myhostname
文件解析优先级高于DNS,把files与dns调换位置,dns的优先级高于hosts文件。
/etc/resolv.conf :是 ISP 的 DNS 服务器 IP 记录处;尽量不要设定超过 3 部以上的 DNS IP 在 /etc/resolv.conf 中,因为如果是你的区网出问题,导致无法联机到 DNS 服务器,那么你的主机还是会向每部 DNS 服务器发出联机要求,每次联机都有timeout 时间的等待。
域名空间
DNS是一个分布式的数据库,命名系统采用层次的逻辑结构,如同一个倒置的树,这个逻辑的属性结构称之为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息!
DNS域名空间中,最大层次不能超过127层,每个节点最长可以存储63个字符!
名空间如下图:
DNS树的每一个节点代表一个域,通过这些节点,对整个域名空间进行划分,称为一个层次结构,域名空间的每个域的名字,通过域名来表示。
它允许对整个数据库的各个部分进行本地控制;同时整个网络也能通过客户-服务器方式访问每个部分的数据,借助备份和缓存机制,DNS将更强壮和足够的性能。
域名又称网域:是由一串用点分隔的名字组成的Internet上某台计算机或者计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)
域名有一个FQDN(Full Qualified Domain Name完全合格域名)标示,实际上指的是主机名的全路径。FQDN能够准确表示出相对DNS域树根的位置,也是就是当前节点到DNS树根的完整表达式。从节点到树根,将每个节点采用.分割,最有一个.代表根域。对于DNS域baidu来说,她的完全合格域名是baidu.com.,通常我们会省略根域.
举例:baidu为com域的子域,表示方法为baidu.com,www是baidu域中的子域。可以使用www.baidu.com
通常我们FQDN有严格的命名限制:长度不能超过256个字节,只允许使用字符0-9,a-z,-号,而我们的点好只能用来隔开域名标志之间或者在FQDN结尾使用,通常省略!
层次域
从根域开始,由上往下,可以分为:根域 ,顶级域,二级域,子域,然后才是主机!
Internet域名空间最高层是根域,记录了Internet上DNS重要信息,有Internet域名注册授权机构管理,该机构把域名空间各部分分配给连接到Internet的各个组织!
根域,全世界13个根域(root)服务器,10台在美国,英国,瑞士,日本各一台 。
Linux 根域存放路径:
[root@node63 ~]# cat /var/named/named.ca
a.root-servers.net. 3600000 IN A 198.41.0.4
b.root-servers.net. 3600000 IN A 192.228.79.201
c.root-servers.net. 3600000 IN A 192.33.4.12
d.root-servers.net. 3600000 IN A 199.7.91.13
e.root-servers.net. 3600000 IN A 192.203.230.10
f.root-servers.net. 3600000 IN A 192.5.5.241
g.root-servers.net. 3600000 IN A 192.112.36.4
h.root-servers.net. 3600000 IN A 198.97.190.53
i.root-servers.net. 3600000 IN A 192.36.148.17
j.root-servers.net. 3600000 IN A 192.58.128.30
k.root-servers.net. 3600000 IN A 193.0.14.129
l.root-servers.net. 3600000 IN A 199.7.83.42
m.root-servers.net. 3600000 IN A 202.12.27.33
a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 3600000 IN AAAA 2001:500:84::b
c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
域名分类
组织域:采用三个字符号,表示DNS域中所包含组织的主要功能或活动,包括 com:商业机构 edu:教育组织 gov:政府组织 mil:军事机构 net:网络机构组织 org:非盈利机构组织 int:国际机构组织
地址域:cn 中国,kr 韩国,us 美国,jp 日本,hk 香港,一般使用两个字符代表国家或者地区的代号
反向域:名字为in-addr.arpa,用于将IP地址映射到名字,反向查询,ip映射到域名
区(zone),资源记录
资源记录,DNS名称空间的一部分,其包含了一组存储在DNS服务器上的资源记录。
DNS服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。
资源记录参数说明
SOA:起始授权记录,Start of Authority Record; 每个区的开始处都包含起始授权记录,SOA定义了域的全局参数,进行整个域的管理,一个区有且仅有一个SOA记录。
NS:Name Server 域名服务记录;指定该域名由那个DNS服务器来解析,每个区在区根处至少包含一条NS记录。
A:address记录,把FQDN映射到IP地址,因为有此记录,所以DNS服务器能够解析FQDN域名对应的IP地址。
PTR:指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名,反A记录,指针PRT记录把IP映射到FQDN,用于反向查询,通过IP地址,找到域名。
CNAME:别名记录,记录创建特定FQDN的别名,用户可以使用CNAME记录来隐藏网络用户的实现细节,使连接的客户机无法知道真正的域名。例:ping百度时,解析到了百度的别名服务器。百度有个cname=www.a.shifen.com.的别名
MX:邮件交换记录,为DNS指定邮件交换服务器
主域名服务器与辅助域名服务器(主从)
辅助服务器启动的时候,他与该区主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通讯,查看区数据是否改变,如果改变了,他就进行一次数据更新传输。
每个区必须有主服务器,每个区至少应有一台辅助服务器,否则主服务器崩溃,就服务解析该区名称。
辅助服务器的优点:
1)容错
在主服务器崩溃的情况下,辅助服务器可以继续解析该名称,一般把区的主服务器和区的辅助服务器安装载不同的子网上,如果一个子网连接中断,DNS客户机还能直接查询另外一个子网上的名称服务器
2)减少广域网链路的通信量
某个区域有大量客户机,用户就可以远程添加该区的辅助服务器,并把远程的客户机配置成优选查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS解析。
3)减轻主服务器的负载
辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的次数。
DNS服务器:运行DNS服务器程序的计算机,存储DNS数据库信息,DNS服务器会尝试解析客户端的查询请求。
DNS缓存:DNS服务器在解析客户机的请求时,如果本地没有DNS信息,就会问其他DNS服务器,当其他域名服务器返回查询结果的时候,该DNS服务器会将结果记录在本地缓存中,成为DNS缓存。下一次客户机提交相同请求时,DNS服务器能够直接使用缓存里面的数据进行解析。记忆在 cache 当中的数据,其实是有时间性的,当过了 DNS 设定记忆的时间 (通常可能是 24 小时),那么该记录就会被释放喔!
DNS工作原理
DNS的查询过程包括递归查询和迭代查询:
递归查询:
客户机向DNS服务器发送请求,DNS服务器会使用一个准备的查询结果回复给客户端,如果DNS服务器本地没有储存查询的DNS信息,那么他会查询其他的DNS服务器,并将查询结果提交给客户机。对于客户机来讲只发出一次请求。
迭代查询:
客户端向DNS服务器发送请求,如果该服务器本地没有储存查询的DNS信息,那么他会告诉客户端另一台DNS服务器的地址,客户机在向这台DNS服务器查询DNS信息,依次查询直到返回结果。
PC-本地DNS是递归,DNS服务器之间的是迭代查询
正反向解析
1)正向解析
正向解析是指域名到IP 地址的解析过程。
域名----IP
nslookup 域名
或
dig 域名
2)反向解析
反向解析是从IP 地址到域名的解析过程。反向解析的作用为服务器的身份验证。
IP----域名
nslookup IP地址
或
dig -x IP地址
工作模式和端口
端口:TCP/53,UDP/53 //用户客户端查询,递归查询
TCP/953,UDP/953 //DNS主从同步
工作模式:C/S模式
安装软件包
bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm //DNS服务主程序包,Berkeley Internet Name Domain 伯克利英特网名称域系统,有BIND4.8.9三个版本BIND8融合了许多提高效率和安全性的技术,BIND9支持IPv6,密钥加密,多处理器支持,线程安全操作,增量区传送等。
bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm //使bind运行时的/目录不是系统真正的/,而是系统的一个子目录而已,这样提高了系统的安全性。Bind访问的范围仅限于这个子目录的范围内,无法进一步提成,进入系统其它目录中。该包在3.x以上的内核版本,默认不安装。
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm //包含客户端工具。默认安装,用于搜索域名指令。
bind-dyndb-ldap-2.3-5.el6.x86_64.rpm //LDAP的插件,提供主机名IP动态更新(非必装)。
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm //一些库文件。
[root@node63 ~]# yum install -y bind bind-chroot bind-utils bind-libs //软件包安装
DNS服务启动及配置文件
DNS的核心配置文件位置:/etc/named.conf,这里只有最基本的配置,不包括区域数据和记录这个/var/named/目录是DNS的工作目录,但是对于由于安全性,启动DNS服务器之后,这个目录会挂载到我们的/:下面,然后用这个对外服务,而却这个目录是囚牢的,在对外的同时会认为这就是一个根目录(/var/named/chroot),保证了DNSServer的安全性!
[root@node63 ~]# systemctl restart named //启动服务
[root@node63 ~]# systemctl enable named
核心配置文件
[root@node63 ~]# vim /etc/named.conf
options { #全局设置,整体有效
listen-on port 53 { any; }; #侦听端口和IP,这里所有使用any
listen-on-v6 port 53 { ::1; }; #IPv6的端口和地址
directory "/var/named"; #dns工作的目录
dump-file "/var/named/data/cache_dump.db"; #cache,缓存信息保存地址
statistics-file "/var/named/data/named_stats.txt"; #服务器的数据信息
memstatistics-file "/var/named/data/named_mem_stats.txt"; #以记录日志相关
allow-query { any; }; #允许谁来查
recursion yes; #允许递归查询,如果构建授权的DNS服务器,请不要开启递归,如果构建递归(缓存)的DNS服务器,请开启递归。
dnssec-enable yes; #dnssec都是安全相关,如果没有做秘钥认证,需要将这两行注释。
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key"; #key文件
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { #13个根服务器地址
type hint; #type类型,hint为根
file "named.ca";
};
include "/etc/named.rfc1912.zones"; #include中的文件也是主配置文件
include "/etc/named.root.key";
DNS服务类型分为:hint(根)、master(主)、forward(转发)、slave(从);Slave 必须要与 Master 相互搭配。
include配置文件
[root@node63 ~]# vim /etc/named.rfc1912.zones
通过添加一个实例,来说明每个字段的含义(几乎这个文件的字段含义都是如此)
zone "example.cn" IN { #域名
type master; #type类型,master
file "example.cn.zone"; #区域文件保存位置.zone文件位置,用实例来说明买个字段的意思
allow-update { none; }; #是否允许动态更新(DNS和DHCP结合是使用)
};
最后一个zone的{}后没有分号。
#这一部分当然也可以集成到/var/named/chroot/etc/named.conf里面去,没有问题
配置正反向解析
正向解析文件格式:
zone "DNS域名" IN {
type hint;
file "解析文件名";
allow-update { none; };
};
反向解析文件格式:
zone "IP地址网段反写.in-addr.arpa" IN {
type master;
file "解析文件名";
allow-update { none; };
};
核心配置文件的修改
[root@node63 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; #这里修改
listen-on-v6 port 53 { ::1; }; #没有启用IPV6,不改
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; }; #允许谁来查询,修改
recursion yes;
……
正向解析配置zone文件指定
[root@node63 ~]# vim /etc/named.rfc1912.zones //介绍的时候已经建立了,我们利用起来
zone "example.cn" IN { #域名
type master; #type类型,master
file "example.cn.zone"; #区域文件保存位置.zone文件位置,用实例来说明买个字段的意思
allow-update { none; }; #是否允许动态更新(DNS和DHCP结合是使用)
};
建立zone文件记录文件
[root@node63 ~]# cd /var/named/ //这个是区域记录文件位置
[root@node63 named]# vim example.cn.zone
$TTL 1D #设置有效地址解析记录的默认缓存时间,最大生存时间,1D就是1天,缓存声明周期 time to live
#@代表区域名,引用主配置文件定义的域,这里就是代表example.cn.,可以改写为example.cn
#IN Internet Name
#SOA 权威结构,起始授权记录。后面的dns.就是其实授权记录,有且仅有一条SOA
#主机名,DNS名称
#代表DNS管理员的邮箱地址,有什么问题通知谁,@用.代替@有其他含义
@ IN SOA dns.example.cn. root.example.cn. (
0 ; serial #序列号,手工改,同步用
1D ; refresh #1天更新,多长时间请求更新
1H ; retry #一天联系上,过一个小时再试
1W ; expire #1周时间过期,一直联系不上时
3H ) ; minimum #最短的有效期,3小时,不需要更新
#下面这里没有写@符号,代表继承了上层
NS dns.example.cn. #最好和上面同步,如果要写完整,可以写dns.example.cn.后面的.一定要带上
#主机头,这里填写主机头,注意要对我们上面的NS记录做一条主机记录
dns A 192.168.1.63
ftp A 192.168.122.122
www1 CNAME ftp.example.cn.
#没有启用IPV6,就把最后一行删除,否则在CNAME或者其他的情况会出现错误
[root@node63 named]# chown root:named example.cn.zone
[root@node63 named]# named-checkzone "example.cn" /var/named/example.cn.zone //测试配置文件是否有问题
zone example.cn/IN: loaded serial 0
OK
[root@node63 named]# systemctl restart named
[root@node63 named]# named-checkconf
测试
[root@node63 named]# cd
[root@node63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 //修改DNS地址为本机自己
DNS1=192.168.1.63
[root@node63 ~]# systemctl restart network
[root@node63 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.63
[root@node63 ~]# ping dns.example.cn //测试ping命令
PING dns.example.cn (192.168.1.63) 56(84) bytes of data.
64 bytes from example63 (192.168.1.63): icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from example63 (192.168.1.63): icmp_seq=2 ttl=64 time=0.053 ms
……
[root@node63 ~]# dig ftp.example.cn @localhost //使用dig命令测试DNS解析
dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便,不用象nslookup总是set不停。
由于一些原因,希望从指定的 DNS 服务器上进行查询(从默认的 DNS 服务器上获得的结果可能不准确)。指定 DNS 服务器的方式为使用 @ 符号:
dig是domain information groper的缩写,域名信息查询
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> ftp.example.cn @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20983
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;ftp.example.cn. IN A
;; ANSWER SECTION:
ftp.example.cn. 86400 IN A 192.168.122.122
;; AUTHORITY SECTION:
example.cn. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Oct 15 14:35:48 2015
;; MSG SIZE rcvd: 81
在这个范例当中,我们可以看到整个显示出的讯息包括有几个部分:
QUESTION(问题):显示所要查询的内容,因为我们是查询ftp.example.cn.的 IP,所以这里显示 A (Address);
ANSWER(回答):依据刚刚的 QUESTION 去查询所得到的结果,答案就是回答IP 啊!
AUTHORITY(验证):由这里我们可以知道ftp.example.cn. 是由哪部 DNS服务器所提供的答案! 结果是dns.example.cn.主机管理的。另外,那个 86400 是啥?是允许查询者能够保留这笔记录多久的意思 ,在dns.example.cn.的设定中,预设可以保留 600 秒。
[root@node63 ~]# dig www1.example.cn @localhost //查询别名相关信息
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> www1.example.cn @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65198
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www1.example.cn. IN A
;; ANSWER SECTION:
www1.example.cn. 86400 IN CNAME ftp.example.cn.
ftp.example.cn. 86400 IN A 192.168.122.122
;; AUTHORITY SECTION:
example.cn. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Oct 15 14:37:40 2015
;; MSG SIZE rcvd: 100
正向解析的步骤:
1、修改named.conf
2、修改include named.rfc1912.zones 添加资源记录
3、修改区域记录example.cn.zone
4、检测文件错误 named-checkconf 、named-checkzone
5、重启服务
6、dig解析测试
反向解析
[root@node63 ~]# vim /etc/named.rfc1912.zones
zone "111.168.192.in-addr.arpa" IN {
type master;
file "example.cn.rev";
allow-update { none; };
};
[root@node63 ~]# cd /var/named/
[root@node63 named]# cp -p example.cn.zone example.cn.rev //记录文件创建
[root@node63 named]# vim example.cn.rev
$TTL 1D
@ IN SOA dns.example.cn. root.example.cn. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.cn.
123 IN PTR abc.example.cn.
122 IN PTR bcd.example.cn. #PTR指针,反向解析记录
[root@node63 named]# named-checkzone "111.168.192.in-addr,arpa" /var/named/example.cn.rev
111.168.192.in-addr,arpa/IN: loaded serial 0
OK
重启服务
[root@node63 named]# systemctl restart named
[root@node63 named]# dig -x 192.168.111.123 @localhost //-x后面应该直接跟IP即可
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 192.168.111.123 @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31102
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;123.111.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
123.111.168.192.in-addr.arpa. 86400 IN PTR abc.example.cn.
;; AUTHORITY SECTION:
111.168.192.in-addr.arpa. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Oct 15 14:47:25 2015
;; MSG SIZE rcvd: 107
配置递归查询
[root@node63 ~]# vim /etc/named.conf
……
recursion yes; #默认就是支持递归查询,但是我们需要把下面关于三条加密的内容注销,实验环境客户端才能进行DNS递归查询,其他内容不用管,同时,关闭了加密通讯功能,才可以和根服务器进行迭代查询
# dnssec-enable yes;
# dnssec-validation yes;
# dnssec-lookaside auto;
……
[root@node63 ~]# systemctl reload named //重新读取配置文件
测试:
DNS修改为本机的DNS,如果没有配置DNS,我们是没有办法解析外面的服务器,那么现在测试
[root@node63 ~]# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108: icmp_seq=1 ttl=52 time=31.4 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=52 time=31.5 ms
64 bytes from 180.97.33.108: icmp_seq=3 ttl=52 time=30.6 ms
配置DNS转发
典型应用场景:家用路由器
我们再配置一台DNS服务器node64
[root@node64 ~]# yum install -y bind bind-chroot bind-utils
[root@node64 ~]# systemctl restart named
[root@node64 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; #修改
listen-on-v6 port 53 { any; };
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; }; #修改
recursion yes;
#idnssec-enable yes; #三行注释
#dnssec-validation yes;
#dnssec-lookaside auto;
forward only; #only,仅仅转发,first,先查找再转发,实验效果,仅仅转发
forwarders { 192.168.1.63; }; #指定转发查询请求的DNS服务器列表
……
测试
[root@node64 ~]# dig @localhost ftp.example.cn
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> @localhost ftp.example.cn
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58841
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;ftp.example.cn. IN A
;; ANSWER SECTION:
ftp.example.cn. 86400 IN A 192.168.122.122
;; Query time: 950 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Oct 15 15:10:02 2015
;; MSG SIZE rcvd: 47
主从服务器配置
主服务器配置文件
[root@node63 ~]# vim /etc/named.rfc1912.zones
zone "example.com" IN {
type master;
file "example.com.zone";
allow-transfer { 10.10.0.0/24; }; #将allow-update { none; };修改为allow-transfer { IP网段; };,允许10.10.0.0/24网段的从服务器同步example.com区域的配置。
# 允许那个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认所有。
从服务器配置文件
Slave 必须要与 Master 相互搭配。
Master / Slave 的查询优先权?
另外,既然我的所有 DNS 服务器是需要同时提供 internet 上面的领域名解析的服务, 所以不论是 Master 还是 Slave 服务器,他都必须要可以同时提供 DNS 的服务才好! 因为在 DNS 系统当中,领域名的查询是『先抢先赢』的状态,我们不会晓得哪一部主机的数据会先被查询到的! 为了提供良好的 DNS 服务,每部 DNS 主机都要能正常工作才好啊!而且,每一部 DNS 服务器的数据库内容需要完全一致,否则就会造成客户端找到的 IP 是错误的!
[root@node64 ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; }; #修改监控地址
listen-on-v6 port 53 { any; }; #修改监控地址
● ● ● ● ● ●
allow-query { any; }; #允许所有来查询
recursion yes;
masterfile-format text; #麒麟OS需要加上该参数,否则,从服务器上的同步文件显示乱码
● ● ● ● ● ●
#dnssec-enable yes; #注释这三行
#dnssec-validation yes;
#dnssec-lookaside auto;
● ● ● ● ● ●
[root@node64 ~]# vim /etc/named.rfc1912.zones
zone "example.cn" IN {
type slave; #更改类型为从服务器
file "slaves/example.cn.zone.slave"; #从主服务器上获取的zone文件存放位置
masters { 192.168.1.63; }; #主服务器地址,可能是很多台,所以用masters
};
#通过这一段配置,从DNS服务器就可以从主服务器上获取解析记录文件,这里需要注意的是slave和slaves以及masters的单词,有的有s,有的没有。配置好之后,重启服务就会在指定的//var/named/chroot/var/named/slaves/example.cn.zone.slavec创建该文件,这个文而建是从DNS主服务器上获取的数据
[root@node64 ~]# systemctl restart named
[root@node64 ~]# ll /var/named/slaves/example.cn.zone.slave//查看文件产生与否
-rw-r--r-- 1 named named 352 Oct 15 15:59 /var/named/slaves/example.cn.zone.slave
[root@node64 ~]# vim /var/named/chroot/var/named/slaves/example.cn.zone.slave
$ORIGIN .
$TTL 86400 ; 1 day
example.cn IN SOA dns.example.cn. root.example.cn. (
0 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.example.cn.
$ORIGIN example.cn.
dns A 192.168.1.63
ftp A 192.168.111.111
www
主从秘钥认证
配置主从秘钥认证,保证主从同步的时候数据的安全性
时间同步
主从都做
[root@node63 ~]# ntpdate 0.rhel.pool.ntp.org
[root@node64 ~]# ntpdate 0.rhel.pool.ntp.org
准备秘钥
主服务器上准备秘钥。
[root@node63 ~]# cd /var/named/chroot/
[root@node63 chroot]# dnssec-keygen -a hmac-md5 -b 128 -n HOST densec
-a,algorithm 算法的意思,这里采用Hmac-MD5的加散发
-b,keysize 生成密钥的长度 128位
-n,nametype 密钥类型,主机类型 HOST,常用的:ZONE,HOST,ENTITY,USER,OTHER 默认认证是ZONE类型
dnssec,生成密钥的名字
[root@node63 chroot]# ll Kdensec.+157+13812.* //查看密钥对
-rw------- 1 root root 50 Oct 15 16:19 Kdensec.+157+13812.key
-rw------- 1 root root 165 Oct 15 16:19 Kdensec.+157+13812.private
[root@node63 chroot]# cat Kdensec.+157+13812.key //查看密钥
densec. IN KEY 512 3 157 uWmHZ/J20tcZSLsXDiBHtw==
修改主DNS支持秘钥认证
[root@node63 chroot]# cd ; vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
……
allow-query { any; };
recursion yes;
dnssec-enable yes; #这三项注释取消
dnssec-validation yes;
dnssec-lookaside auto;
……
key dnsseckey { #先定义我们传输过程使用的秘钥名字,这几行要添加
algorithm hmac-md5; #加密算法
secret "uWmHZ/J20tcZSLsXDiBHtw=="; #密钥
};
配置zone使用秘钥传输
[root@node63 ~]# vim /var/named/chroot/etc/named.rfc1912.zones
zone "example.cn" IN {
type master;
file "example.cn.zone";
allow-transfer { key dnsseckey; }; #修改这儿允许使用秘钥传输,采用密钥同步,将网段修改为key dnsseckey
};
example.cn.zone记录文件就用以前的
修改从DNS支持秘钥认证
[root@node64 ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
……
allow-query { any; };
recursion yes;
dnssec-enable yes; #这三项注释取消
dnssec-validation yes;
dnssec-lookaside auto;
……
key dnsseckey { #先定义我们传输过程使用的秘钥名字,这几行要添加
algorithm hmac-md5; #加密算法
secret "uWmHZ/J20tcZSLsXDiBHtw=="; #密钥
};
[root@node64 ~]# vim /var/named/chroot/etc/named.rfc1912.zones
zone "example.cn" IN {
type slave;
file "slaves/example.cn.zone.sec"; #修改存储文件,换一个
masters { 192.168.1.63 key dnsseckey; }; #制定Master,使用的密钥
};
测试
[root@node63 ~]# systemctl restart named
[root@node64 ~]# systemctl restart named
[root@node64 ~]# ll /var/named/slaves/example.cn.zone.sec
-rw-r--r-- 1 named named 412 Oct 15 16:48 /var/named/slaves/example.cn.zone.sec
[root@node64 ~]# dig @localhost ftp.example.cn
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> @localhost ftp.example.cn
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46123
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;ftp.example.cn. IN A
;; ANSWER SECTION:
ftp.example.cn. 86400 IN A 192.168.111.111
;; AUTHORITY SECTION:
example.cn. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Thu Oct 15 16:49:26 2015
;; MSG SIZE rcvd: 81
配置DNS负载均衡
在主上的配置:
[root@node63 ~]# vim /var/named/example.cn.zone
TTL 1D
@ IN SOA dns.example.cn. root.example.cn. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.cn.
dns A 192.168.1.63
www.example.cn. 1 A 192.168.122.122 #1 :表示此记录保存1秒
www.example.cn. 1 A 192.168.122.127
www.example.cn. 1 A 192.168.122.129
example.cn. MX 10 mail.example.cn. #添加邮件记录
mail.example.cn. A 192.168.1.63
ftp A 192.168.111.111
[root@node63 ~]# systemctl restart named
测试:
[root@node63 ~]# ping www.example.cn -c 1 #每ping一次,都会发现IP地址不一样
PING www.example.cn (192.168.122.127) 56(84) bytes of data.
[root@node63 ~]# ping www.example.cn -c 1
PING www.example.cn (192.168.122.129) 56(84) bytes of data.
[root@node63 ~]# ping www.example.cn -c 1
PING www.example.cn (192.168.122.122) 56(84) bytes of data.
智能DNS
根据不同的区域,解析出不同的IP地址
核心配置文件view控制
[root@node63 ~]# vim /etc/named.conf
acl local { 127/8; }; #最前面添加
acl network { 192.168.1/24; };
……
#zone "." IN { #这一段要注销,写到我们的include的zone文件中
# type hint;
# file "named.ca";
#};
view local { #对于上面定义的acl进行区定义,名字可以不一样
match-clients {local;}; #正式定义,名字要和acl中的相同
recursion yes;
include "/etc/named.local"; #这里定义我们的配置文件的另外块儿
};
view network {
match-clients {network;};
recursion yes;
include "/etc/named.network";
};
#include "/etc/named.rfc1912.zones"; #上面按已经包含了,那么我们就把这行include去掉
include文件创建
[root@node63 ~]# cd /var/named/chroot/etc/
[root@node63 etc]# cp -a named.rfc1912.zones named.local
[root@node63 etc]# cp -a named.rfc1912.zones named.network
[root@node63 etc]# vim named.local
zone "." IN {
type hint;
file "named.ca";
};
zone "example.cn" IN {
type master;
file "example.cn.local";
allow-update { none; };
};
[root@node63 etc]# vim named.network
zone "." IN {
type hint;
file "named.ca";
};
zone "example.cn" IN {
type master;
file "example.cn.network";
allow-update { none; };
};
Zone记录文件创建
[root@node63 named]# cp -a example.cn.zone example.cn.local //注意权限
[root@node63 named]# cp -a example.cn.zone example.cn.network
[root@node63 named]# vim /var/named/chroot/var/named/example.cn.local
$TTL 1D
@ IN SOA dns.example.cn. root.example.cn. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.cn.
dns A 192.168.1.63
www A 192.168.111.111
[root@node63 named]# vim /var/named/chroot/var/named/example.cn.network
$TTL 1D
@ IN SOA dns.example.cn. root.example.cn. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.cn.
dns A 192.168.1.63
www A 192.168.111.222
[root@node63 etc]# service named restart
测试
[root@node63 named]# dig @127.0.0.1 www.example.cn
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @127.0.0.1 www.example.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33315
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.cn. IN A
;; ANSWER SECTION:
www.example.cn. 86400 IN A 192.168.111.111
;; AUTHORITY SECTION:
example.cn. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 15 17:18:23 2015
;; MSG SIZE rcvd: 81
[root@node63 named]# dig @192.168.1.63 www.example.cn
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.63 www.example.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36607
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.cn. IN A
;; ANSWER SECTION:
www.example.cn. 86400 IN A 192.168.111.222
;; AUTHORITY SECTION:
example.cn. 86400 IN NS dns.example.cn.
;; ADDITIONAL SECTION:
dns.example.cn. 86400 IN A 192.168.1.63
;; Query time: 0 msec
;; SERVER: 192.168.1.63#53(192.168.1.63)
;; WHEN: Thu Oct 15 17:19:09 2015
;; MSG SIZE rcvd: 81
DNS泛解析
在解析文件中使用关键词$GENERATE
1、正向解析的泛解析
$GENERATE 10-20 www$ IN A 192.168.0.$
把www10-www20的主机解析为192.168.0.10-20
2、反向解析的泛解析
$GENERATE 10-20 $ PTR www$.example.com
把所有网段下的10-20的地址解析为www(10-20).example.com
$引用$GENERATE定义的范围。
linux服务篇-DNS服务相关推荐
- Linux服务篇--openssh服务
Linux高级篇–SSH服务 一. SSH ssh: secure shell, protocol, 22/tcp, 安全的远程登录 具体的软件实现: OpenSSH: ssh协议的开源实现,Ce ...
- 【Linux】循序渐进学运维-服务篇-FTP服务配置文件详解
大家好,我是互联网老辛,本文是Linux运维-循序渐进学运维-服务篇的第14篇文章 文章目录 前言 ftp配置文件详解 1. 常见默认配置参数 2. 常见参数的含义 配置文件使用举例 1. 创建本地用 ...
- linux防火墙允许dns服务,Linux防火墙设置-DNS服务器篇
亲测可用,对于刚刚搭建了DNS服务器,需要开启防火墙但又不知道该怎么设置的朋友,可以参考下面的内容,或者直接使用我下面给出的脚本程序. 如果服务器是作为DNS服务器使用的,针对绝大多数的情况,为了开启 ...
- Linux网络服务之DNS服务
一.DNS简介 1.1DNS名词介绍 域名管理系统DNS(Domain Name System)是域名解析服务器的意思,应用层协议,是互联网的一项服务.它在互联网的作用是:把域名转换成网络可以识别的i ...
- linux服务篇-Xinetd服务
Xinetd=eXtended InterNET services daemon(扩展互联网服务守护进程=超级互联网守护进程=超级服务),xinetd是新一代的网络守护进程服务程序,又叫超级Inter ...
- Linux下配置DNS服务
一.DNS服务简介 DNS服务器,也称为域名解析服务器,是用来将互联网上的域名解析为IP地址的一类服务器,在世界上有成百上千台DNS服务器.对于有些公司来说,对于同一个域名可能有多个DNS服务器,这样 ...
- linux服务篇-DHCP服务
DHCP服务概述: 名称:DHCP - Dynamic Host Configuration Protocol 动态主机配置协议 功能:DHCP(Dynamic Host Configuratio ...
- 【Linux】循序渐进学运维-服务篇-ssh服务入门
大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-服务篇的第3篇文章 文章目录 前言 1. 什么是SSH? 2. ssh的连接原理 3. ssh服务的安装 1) OpenSSH的构成 2) 安 ...
- linux dns服务配置,在Linux上配置DNS服务
一.DNS服务简介 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所 ...
最新文章
- 浏览器常见兼容性问题汇总
- slf4j+log4j打印日志,控制台无日志输出
- [转载]深入理解JavaScript闭包(closure)
- SpringBoot中自定义Banner(启动图案)
- 【arduino】亲测MAC上arduino安装ESP32 SPIFFS插件
- JAVA I/O操作那些事之标准I/0
- Linux 系统之软件管理
- lightoj 1004 dp:数字三角形
- Python官方文档学习心得(第三篇)
- Linux下java web服务器搭建(JDK1.6、MySQL5.1、Apache2.2+2...
- 数据结构预算法(六) 数组和矩阵(1)
- Bootstrap 3.2.0 源码试读 2014/08/14
- (原创)创建windows域---深入理解域概念
- python的质量控制模块_11. 语言学数据管理 - 2.2 质量控制 - 《Python 自然语言处理 第二版》 - 书栈网 · BookStack...
- 关于计算机方面英语ppt模板,经典ppt模板--计算机软件.ppt
- webpack ——css兼容性处理
- 大规模手机定位采集系统设计
- 最后一周 | 微生物组-宏基因组分析(线上/线下同时开课,2021.1)
- 最新系统MacOs13 Ventura(M1/M2芯片) + Parallels Desktop 18(PD18史上最强虚拟机)永久使用攻略
- 机房动环监控系统应用意义
热门文章
- GPS基础知识(七)、GPS卫星位置解算
- 2021年「资料员」-通用基础及岗位技能(资料员)考试资料
- Windows权限设置
- 波士顿大学计算机科学的就业,波士顿大学计算机科学(计算机网络)介绍_就业方向和前景-小站留学...
- ameya:什么是连接器 连接器采购平台有哪些
- 毕业设计 深度学习大数据物流平台 python
- 2008服务器系统只有回收站,win2008系统中彻底清空回收站的教程
- 三相光伏并网逆变器设计,原理图,PCB,以及源代码
- MySQL学习笔记(三)查询
- 外贸公司申请E-mark认证有什么要求?