在Linux上配置DNS服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux上配置DNS服务相关的知识,希望对你有一定的参考价值。
一、DNS服务简介
DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
二、DNS安装配置
准备工作
1.配置DNS服务器所需的安装包
DNS服务程序包:bind
DNS相关库:bind-libs
DNS客户端:bind-utils
限制DNS在一个目录中:bind-chroot
关闭防火墙:iptables -F
关闭selinux: setenforce 0
2.编辑配置文件
全局配置文件/etc/named.conf
options {
listen-on port 53 { localhost; }; #括号内改为localhost是将本机ip监听在53端口上,也可以写上本机IP,注意最后的;号
listen-on-v6 port 53 { ::1; };
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; }; #改为any是指允许任何人通过你的服务器来解析DNS,也可以指定IP。
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
#上面两个就是DNS解析域名的模板,可以在下面接着写也可以写在下面的文件中/etc/named.rfc1912.zones
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
我们在/etc/named.rfc1912.zones中写入DNS解析域
zone "lpx123.com" IN { #正向解析域名lpx123.com
type master; #主域名
file "lpx123.com.zone"; #域名对应的文件
};
zone "252.18.172.in-addr.arpa" IN { #反向解析域名
type master;
file "172.18.252.zone";
};
区域数据库文件存放在/var/named/中,这个目录中也有模板文件,我们可以拷贝模板文件进行修改。
[[email protected] named]# cp -p named.localhost lpx123.com.zone
[[email protected] named]# cp -p named.localhost 172.18.252.zone
注意拷贝的时候要加上-p因为这个文件所属组是named,不加-p所属组就会变成当前用户所属组,named就无法访问。
编辑正向区域数据库配置文件
$TTL 1D
@ IN SOA nsl.lpx123.com. root.lpx123.com. (
20132702 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS nsl.lpx123.com.
nsl IN A 172.18.252.36
mail IN A 2.2.2.2
[[email protected] named]# vim 172.18.252.zone
$TTL 1D
@ IN SOA nsl.lpx123.com. root.lpx123.com. (
20132703 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS nsl.lpx123.com.
36 PTR nsl.lpx123.com.
100 PTR www.lpx123.com.
~
反向区域数据库文件和正向区域数据库文件差不多,区别就在多了一个RPT记录
PTR的格式:前面是对应的IP地址,后面是主机名。
三、测试
重启服务
[[email protected] named]# systemctl restart named
我们在另一台机器上进行测试
首先我们要设置下DNS服务器地址:
[[email protected] ~]# vim /etc/resolv.conf
nameserver 172.18.252.36 #把里面的内容都注释掉添加一个DNS服务器地址
[[email protected] ~]# dig nsl.lpx123.com @172.18.252.36
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> nsl.lpx123.com @172.18.252.36
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 821
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 #aa代表的是权威,是指这个解析是通过这个域名的本身服务器解析出来的而不是通过转发解析出来的。
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nsl.lpx123.com. IN A
;; ANSWER SECTION:
nsl.lpx123.com. 86400 IN A 172.18.252.36 #解析出来的A记录对应的地址
;; AUTHORITY SECTION:
lpx123.com. 86400 IN NS nsl.lpx123.com.
;; Query time: 1 msec
;; SERVER: 172.18.252.36#53(172.18.252.36)
;; WHEN: Wed May 23 01:50:46 CST 2018
;; MSG SIZE rcvd: 73
[[email protected] ~]# nslookup 172.18.252.36 #反向解析
Server: 172.18.252.36
Address: 172.18.252.36#53
36.252.18.172.in-addr.arpa name = nsl.lpx123.com.
四、泛域名名字解析
当我们需要批量添加DNS解析时就可以用通配符来写如下
[[email protected] named]# vim lpx123.com.zone
$GENERATE 1-100 server$ A 3.3.3.$ #在正向域名解析中添加一条这样的记录
这样就添加了从server1.lpx123.com到server100.lpx.com的记录,与之对应的ip分别也是从3.3.3.1到3.3.3.100
[[email protected] named]# nslookup server1.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: server1.lpx123.com
Address: 3.3.3.1
[[email protected] named]# nslookup server2.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: server2.lpx123.com
Address: 3.3.3.2
[[email protected] named]# nslookup server100.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: server100.lpx123.com
Address: 3.3.3.100
还有就是我们有的时候多输入了一个w也能访问到我们要访问的网站,或者输错了也能访问到,这就是用到了泛域名解析
写法如下*.lpx123.com. A 4.4.4.4
[[email protected] named]# nslookup www.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: www.lpx123.com
Address: 4.4.4.4
[[email protected] named]# nslookup dns.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: dns.lpx123.com
Address: 4.4.4.4
[[email protected] named]# nslookup nsl.lpx123.com
Server: 172.18.252.36
Address: 172.18.252.36#53
Name: nsl.lpx123.com
Address: 172.18.252.36
只要是我们没写的lpx123.com的域名全部都解析到4.4.4.4主机上,写入的不受影响。
五、DNS主从
我们已经搭建好了主DNS服务器,所以我们现在只需要再搭建一个从DNS服务器就可以了
1.我们首先准备好搭建环境,安装好软件包(同上)
2.编辑全局配置文件(同主配置文件)
3.写区域数据库文件/etc/named.conf
options {
listen-on port 53 { localhost; }; #这里还是改为localhost
listen-on-v6 port 53 { ::1; };
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; }; #这里改为any
我们在模板后面添加
zone "lpx123.com" IN {
type slave; #代表为从域名
file "slaves/lpx123.com.zone"; #复制主域名库文件后的存放位置
masters { 172.18.252.36; }; #主域名的IP地址
};
启动服务,我们会看到在/var/named/slaves目录下有一个文件,这就是从域名库文件,我们用另一台机器看能否解析
[[email protected] ~]# dig nsl.lpx123.com @172.18.250.216
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> nsl.lpx123.com @172.18.250.216
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32433
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;nsl.lpx123.com. IN A
;; ANSWER SECTION:
nsl.lpx123.com. 86400 IN A 172.18.252.36
;; AUTHORITY SECTION:
lpx123.com. 86400 IN NS nsl.lpx123.com.
;; Query time: 4 msec
;; SERVER: 172.18.250.216#53(172.18.250.216)
;; WHEN: Thu May 24 21:03:47 2018
;; MSG SIZE rcvd: 62
解析成功
指定传输机器
我们发现搭建从服务器时主服务器并没有同意我们就当了从服务器并获取到了区域库文件,这对主DNS来说是不安全的,所以我们加个指定传输机器
在/etc/named.conf中添加一条allow-transfer { 172.18.250.216;}; #括号内填写从服务器ip地址
测试
我们用从服务器能获取数据
[[email protected] slaves]# dig -t axfr lpx123.com @172.18.252.36
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -t axfr lpx123.com @172.18.252.36
;; global options: +cmd
lpx123.com. 86400 IN SOA nsl.lpx123.com. root.lpx123.com. 20132702 86400 3600 604800 10800
lpx123.com. 86400 IN NS nsl.lpx123.com.
*.lpx123.com. 86400 IN A 4.4.4.4
mail.lpx123.com. 86400 IN A 2.2.2.2
用别的机器就不能抓取数据,但对与通过域名正常获取没影响
[[email protected] ~]# dig -axfr l.lpx123.com @172.18.252.36
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> -t axfr lpx123.com @172.18.252.36
;; global options: +cmd
; Transfer failed.
[[email protected] ~]# dig nsl.lpx123.com @172.18.252.36
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> nsl.lpx123.com @172.18.252.36
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12384
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;nsl.lpx123.com. IN A
;; ANSWER SECTION:
nsl.lpx123.com. 86400 IN A 172.18.252.36
;; AUTHORITY SECTION:
lpx123.com. 86400 IN NS nsl.lpx123.com.
;; Query time: 1 msec
;; SERVER: 172.18.252.36#53(172.18.252.36)
;; WHEN: Thu May 24 21:23:47 2018
;; MSG SIZE rcvd: 62
PS:我们对主DNS做了设置,从DNS也要做设置不然别人也可以从你的从DNS抓取数据,只不过从DNS要是没有从从DNS那括号里就可以改为none。
以上是关于在Linux上配置DNS服务的主要内容,如果未能解决你的问题,请参考以下文章