在Linux中通过 /etc/nsswitch.conf配置文件修改DNS查询的顺序,打开后可以看到这样的配置:
这里的 files 代表的就是 /etc/hosts 文件,dns 代表的是系统配置的 DNS 服务器地址。所以在 Linux 中默认是先查询 hosts 文件中的记录,然后再请求 DNS 服务器。
系统设定的DNS服务器配置文件位于 /etc/resolv.conf中:
nameserver后面对应的就是内网中的DNS服务器地址。
DNS搭建:
本次学习使用BIND9来搭建服务器,首先安装:
sudo apt-get update
sudo apt-get install -y bind9 bind9utils bind9-doc
激活IPV4 Mode:
在继续配置 DNS 服务器之前,先修改一下 bind9 service 参数文件,设置 BIND 为 IPv4 Mode。
sudo vi /etc/default/bind9
把 "-4" 添加到 OPTIONS 变量,如下所示 /etc/default/bind9
确定DNS服务器:
首先就ifconfig查看本机IP :
然后找几个内网IP去ping一下:
DNS服务器的配置:
BIND 的配置由多个文件组成,这些文件包含在主配置文件中named.conf。这些文件名以“named”开头,因为这是BIND 运行的进程的名称。我们将开始配置选项文件。
cat /etc/bind/named.conf
配置选项文件:
vi /etc/bind/named.conf.options
在现有的文档之上,添加一个新的 ACL 块并命名 "trusted",我们把之前找到的内网 ip 添加到可信客户端列表里,并称为 ns1 ,只允许它们查询 DNS 服务器 , 提高安全性
通过上面的设置只有信任的主机才能查询 DNS 服务器,其他主机不能。
配置本地文件:
打开 named.conf.local并编辑:
sudo vi /etc/bind/named.conf.local
我们修改配置文件,完成后如下,在配置文件中添加了正向解析和反向解析的文件在系统中的位置,简单的说,正向解析就是根据域名查 ip,反向就是根据 ip 查域名
注意,反向区域名称以 168.192 开头,即 192.168 反转。
添加完成后,保存退出。这样我们在 BIND 我们就有了指定的文件,接下来我们就编写正向解析和反向解析的域文件。
4.3.4 创建正向解析域文件
正向解析:通过主机名获取其对应的广域网 IP 地址,我们以 "host1.shiyanlou.example.com" 为例来编写来这个文件。
sudo mkdir /etc/bind/zones
我们根据现有的域文件db.local,来复制一份作为db.shiyanlou.example.com 编辑这个正向解析文件
sudo cp /etc/bind/db.local /etc/bind/zones/db.shiyanlou.example.com
sudo vi /etc/bind/zones/db.shiyanlou.example.com
我们在原来文件的基础上,修改了很多,具体如下
;
; BIND data file for local loopback interface
$TTL 604800
@ IN SOA ns1.shiyanlou.example.com. admin.shiyanlou.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
;
; name servers - NS records
IN NS ns1.shiyanlou.example.com.
; name servers - A records
ns1.shiyanlou.example.com. IN A 192.168.42.5
host1.shiyanlou.example.com. IN A 192.168.42.1
注意上面加点的地方不要漏写
ip 地址根据自己的实际地址填写。
4.3.5 创建反向解析域文件
反向域名解析与通常的正向域名解析相反,提供IP地址到域名的对应。 IP 反向解析主要应用到邮件服务器中来阻拦垃圾邮件,特别是在国外。多数垃圾邮件发送者使用动态分配或者没有注册域名的IP地址来发送垃圾邮件,以逃避追踪,使用了域名反向解析后,就可以大大降低垃圾邮件的数量。
在之前的 named.conf.local 的文件里我们写了一个反向域名解析的文件名db.192.168,现在来编写它:
sudo cp /etc/bind/db.127 /etc/bind.zones/db.192.168
sudo vi /etc/bind/zones/db.192.168
文件的具体内容如下:
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA shiyanlou.example.com. admin.shiyanlou.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers
IN NS ns1.shiyanlou.example.com.
; PTR Records
5.42 IN PTR ns1.shiyanlou.example.com. ; 192.168.42.5
1.42 IN PTR host1.shiyanlou.example.com. ; 192.168.42.1
ip 地址根据自己的实际地址填写。
PTR 首位根据后面的 ip 反转。
4.3.6 检验 BIND 配置文件语法错误
运行下面的命令检验 named.conf* 有没有语法错误:
sudo named-checkconf
如果没有报错则编写是正确的,如果报错了,那就根据报的错误去修改文件。 运行下面的命令查看正向解析和反向解析文件是否正确。
sudo named-checkzone shiyanlou.example.com /etc/bind/zones/db.shiyanlou.example.com
sudo named-checkzone 168.192.in-addr.arpa /etc/bind/zones/db.192.168
做到这里,离成功已经不远了:-),我们重启 BIND service
sudo service bind9 restart
DNS 客户端配置
配置 DNS 客户端,在我们的实验环境里,客户端和服务器是一体的,用自己的电脑的话,可以试试局域网的其他电脑做客户端。将客户端的 DNS 修改为服务器的 ip 地址。 因为我们用的是 Ubuntu 的系统,所以运行命令
sudo vi /etc/resolvconf/resolv.conf.d/head
把文档修改为如下所示:
nameserver 192.168.42.5 # ns1 private IP address
然后打开文档resolv.conf
sudo vi /etc/resolv.conf
编辑为:
options timeout:1 attempts:1 rotate
nameserver 192.168.42.5
接下来运行 resolvconf 生成一个新的 resolv.conf文件
sudo resolvconf -u
好了,你的客户端可以检验你的服务器是否可以正常使用了。