今天在公司中,告知要搭建一台DNS给研发做测试环境用,一开费了很大的劲,后来发现没有这么麻烦。下面先给出正向解析DNS的过程,后面会逐渐给出反向解析与DNS主从的配置。

操作系统使用的是Centos7.3,Selinux权限开启,防火墙开启。下面给出配置过程。

1.配置DNS正向解析

安装的软件是bind bind-chroot,这些事DNS服务器必须的,另外安装了bind-utils。这是为了使用nslook命令。进程名字是named。这里是将www.abc.com解析成 192.168.122.1。


# yum -y install bind bind-chroot bind-utils
  # systemctl start named
  # systemctl enable named
/etc/named.conf
  # cat /etc/named.conf
  options {
    listen-on port 53 { any; };              //改为any,谁能监听这个主机
// 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 "abc.com" IN {               //在后面添加这个字段,就是你要解析的域名
        type master;                 //主域名
        file "abc.zone";         
};
 去/var/named目录下编辑abc.zone文件
# cp -p named.localhost abc.zone
# cat abc.zone
$TTL 1D
@    IN SOA  @ rname.invalid. (    //不用改,并且下面的@和这里的@一致
                 0   ; serial
                 1D  ; refresh
                 1H  ; retry
                 1W  ; expire
                 3H )    ; minimum
     IN    NS    @
@    IN     A    192.168.189.129
www  IN    A    192.168.122.1
# systemctl restart named
 在本机上使用nslookup命令测试
[root@192 named]# nslookup
> server 192.168.189.129
Default server: 192.168.189.129
Address: 192.168.189.129#53
> www.abc.com
Server:      192.168.189.129
Address: 192.168.189.129#53
 
Name:    www.abc.com
Address: 192.168.122.1
解析成功,之后再其他服务器上测试,不成功。在关闭DNS本机防火墙后,成功。所以,在防火墙上要放开对53端口的访问。放开后,这台DNS服务器就可以对外访问了。并且注意,如果在编辑完/etc/named.conf文件后添加了zone文件后,要去/var/named目录下吧文件创建出来,权限也要正确。否则启动服务是会报错。
在换完之后,要更改规则。因为自己目前还不会写规则,所以是用了另一台DNS机器上的防火墙规则,之后重启 了iptables服务。这里用的规则是/etc/sysconfig目录下的iptables文件。要注意的是,这个文件一开始并没有。是在安装了iptables-services后才有的。之后,重启iptables,DNS没有问题。关于防火墙的话,去参考另一篇文档 “工作中的问题(已解决)”里面的将firewalld换成iptables部分,里面有相关的规则。
因为之前工作中,都是关闭了防火墙的,所以并没有研究过防火墙。前两天搭建了一台dns,告知要开启防火墙,所以要在打开防火墙的基础上开放53端口。今天打算设置的时候,发现centos中firewalld与iptables只能存在一个。所以,我需要把firewalld换成iptables。是通过下面的命令换的。
# systemctl stop firewalld
  # systemctl disable firewalld
  # systemctl mask firewalld
  # yum -y install iptables-services
# systemctl start iptables
  # systemctl enable iptables
在换完之后,要更改规则。因为自己目前还不会写规则,所以是用了另一台DNS机器上的防火墙规则,之后重启 了iptables服务。这里用的规则是/etc/sysconfig目录下的iptables文件。要注意的是,这个文件一开始并没有。是在安装了iptables-services后才有的。之后,重启iptables,DNS没有问题。
# systemctl restart iptables
下面是iptables文件的配置内容。
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
2.配置反向解析DNS
DNS反向解析,与正向解析差不多。需要在/etc/named.conf文件中添加相应的zone文件字段,之后去/var/named/目录下添加相应的zone文件即可。
# cat /etc/named.conf
zone "189.168.192.in-addr.arpa" IN {
        type master;
        file "189.168.192.zone";
};
# cat /var/named/189.168.192.zone
$TTL 1D
@    IN SOA  dns.efg.com. rname.invalid. (
                 0   ; serial
                 1D  ; refresh
                 1H  ; retry
                 1W  ; expire
                 3H )    ; minimum
     IN  NS dns.efg.com.
192  IN  PTR    dns.efg.com.
10   IN   PTR    www.efg.com.
 上面的dns.efg.com是随便写的,下=下面注意要用PTR字段。之后重启服务即可。
# systemctl restart named
使用dig命令测试,没有问题。
# dig -x 192.168.189.10 @192.168.189.129
 
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> -x 192.168.189.10 @192.168.189.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30323
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.189.168.192.in-addr.arpa.    IN  PTR
 
;; ANSWER SECTION:
10.189.168.192.in-addr.arpa. 86400 IN    PTR www.efg.com.
 
;; AUTHORITY SECTION:
189.168.192.in-addr.arpa. 86400  IN  NS  dns.efg.com.
 
;; Query time: 2 msec
;; SERVER: 192.168.189.129#53(192.168.189.129)
;; WHEN: Mon Jul 31 11:52:37 CST 2017
;; MSG SIZE  rcvd: 99
配置DNS主从
192.168.189.129为主,192.168.189.130为从
修改主机的配置文件 /etc/named.conf
# cat /etc/named.conf      //只给出部分参数
zone "abc.com" IN {
        type master;
        file "abc.zone";
        allow-transfer {192.168.189.130;};  // 定义丛集
        allow-update {none;};
};
# cat /var/named/abc.zone
$TTL 1D
@    IN SOA  @ rname.invalid. (
                 201784  ; serial  //这一项很重要,每次同步的根据,对比的ID
                 1D  ; refresh
                 1H  ; retry
                 1W  ; expire
                 3H )    ; minimum
     IN    NS    @
@    IN     A    192.168.189.129
www  IN    A    192.168.122.1
之后去从主机下修改配置文件
# cat /var/named/abc.zone
zone "abc.com" IN {
        type slave;
        file "slaves/abc.zone";
        masters {192.168.189.129;};   //定义主机
        allow-update {none;};
};
之后先后重启主机,从机上的 named服务。如果在/var/named/slaves目录下看到abc.zone文件,主从成功。
不过,我一开始并没有看到。当时的机器环境是从机的防火墙,Selinux都关闭了,主机的都开着。之后我把主机的防火墙停掉,就OK了。
配置方向解析主从也一样,下面仅给出配置文件的关键部分。
主机配置文件
# cat /etc/named.conf
zone "189.168.192.in-addr.arpa" IN {
        type master;
        file "189.168.192.zone";
        allow-transfer {192.168.189.130;};
        allow-update {none;};
 
};
# cat /var/named/189.168.192.zone
$TTL 1D
@    IN SOA  dns.efg.com. rname.invalid. (
                 201784  ; serial
                 1D  ; refresh
                 1H  ; retry
                 1W  ; expire
                 3H )    ; minimum
     IN  NS dns.efg.com.
192  IN  PTR    dns.efg.com.
10   IN  PTR    www.efg.com.
从机配置文件
# cat /etc/named.conf
zone "189.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/189.168.192.zone";
        masters {192.168.189.129;};
        allow-update {none;};
 
};