一、前言
由于课程局域网组网实验的要求,需要使用到DNS服务,而网上的教程又较为零散,尝试了一些之后磕磕绊绊也测试成功了,但由于后续还需要在实验室用设备测试,故记录在这里。
二、环境及IP说明
系统环境:Ubuntu-21.04-desktop
所用服务器软件:BIND9(Berkeley Internet Name Domain v9)
IP说明
此处都使用的同一台电脑。
- 也可以使用多台电脑,但是都必须在同一局域网内。如DNS服务器为192.168.43.28,客户端为192.168.2.1,Web服务器为192.168.3.1。几台机器需要通过交换机或路由器相连,并配置相应的路由/VLAN/DNS server。
- 也可以都在同一网段下,如使用手机热点让几台电脑处于同一局域网下。
- DNS服务器:192.168.43.28
- 客户端(需要访问域名服务器,将域名解析为Web服务器对应IP地址):192.168.43.28
- Web服务器:192.168.43.28
三、配置内网DNS服务
3.1 安装 BIND9
sudo apt install bind9 bind9utils bind9-doc
3.2 配置 BIND9 的IPv4 模式
只需要修改 BIND9 的 systemd unit file即可(
/etc/systemd/system/bind9.service
)sudo systemctl edit --full bind9
或者直接用vim修改文件
sudo vim /etc/systemd/system/bind9.service
在文件的
ExecStart
行最后加上-4
即可... [service] ... ExecStart=/usr/sbin/named -f $OPTIONS -4 ...
重新启动 BIND9 以重新载入 systemd 的 unit file
sudo systemctl daemon-reload sudo systemctl restart bind9
3.3 修改配置文件
/etc/bind/named.conf.options
acl "trusted" { 192.168.43.0/24; }; ... options { recursion yes; allow-recursion { trusted; }; listen-on { 192.168.43.28; }; allow-transfer { none; }; ... forwarders { 114.114.114.114; }; ... } ...
字段解析:
acl
:用于控制哪些客户端可以连接到这个DNS服务器;此处表示允许该网段的所有主机recursion
:yes表示允许递归DNS查询allow-recursion
:允许递归查询的客户端范围,此处设置为在acl
中声明的trusted
部分listen-on
:表示DNS服务器监听此地址的53端口,此处为本地IP(即DNS服务器IP)allow-transfer
:none表示不允许其他DNS服务器从本DNS服务器中查询forwarders
:这是BIND9提供的DNS查询转发机制,当本地DNS查询不到时,查询会转发到forwarders
上,并将查询结果缓存到本地DNS上
/etc/bind/named.conf.local
// Do any local configuration here // 正向解析 zone "test.com" { type master; file "/etc/bind/db.test.com"; //正向解析文件所在路径 }; //反向解析 zone "43.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192.168.43"; //反向解析文件所在路径 };
新增域名解析文件:
/etc/bind/db.test.com
可以直接将
db.local
的内容拷贝到db.test.com
sudo cp /etc/bind/db.local /etc/bind/db.test.com
然后再修改文件
; ; BIND data file for test.com loopback interface ; $TTL 604800 @ IN SOA test.com. root.test.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS test.com. @ IN A 192.168.43.28 *.test.com. 14400 IN A 192.168.43.28
- 需要注意的是:
- 不要漏掉域名后的点
- *为通配符,表示任意字母.test.com都被解析到192.168.43.28这个IP
- 需要注意的是:
新增IP地址反向解析文件
/etc/bind/db.192.168.43
; ; BIND data file for dev domains ; $TTL 604800 @ IN SOA dev. root.dev. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; NS Records @ IN NS test.com. ; PTR Records 28 IN PTR test.com. ; 192.168.43.28
3.4 检查语法并重启 BIND9 服务
检查
/etc/bind/name.conf.*
文件,没有任何输出代表没有错误,若有错误则根据提示修改sudo named-checkconf
若提示没有检查工具,根据提示安装即可
检查域名解析文件
etc/bind/db.test.com
和etc/bind/db.192.168.43
sudo named-checkzone test.com /etc/bind/db.test.com sudo named-checkzone 43.168.192.in-addr.arpa /etc/bind/db.192.168.43
都提示如下则没问题
zone test.com/IN: loaded serial 1 OK zone 43.168.192.in-addr.arpa/IN: loaded serial 1 OK
重启 BIND9 服务
service bind9 restart
修改本机的 name server 配置(若客户端为windows系统,则只需要手动设置DNS服务器IP即可
临时修改方法,直接修改
/etc/resolv.conf
,将其中的nameserver修改为上面配置好的DNS服务器IP... nameserver 192.168.43.28 ...
永久修改方法
修改
/etc/systemd/resolved.conf
文件,在DNS=
后加上需要加入的DNS服务器IP地址即可... DNS=192.168.43.28 114.114.114.114 ...
再在终端执行以下命令
sudo systemctl restart systemd-resolved sudo systemctl enable systemd-resolved sudo mv /etc/resolv.conf /etc/resolv.conf.bak sudo ln -s /run/systemd/resolve/resolv.conf /etc/
之后就可以在
etc/resolv.conf
看到刚刚添加的DNS nameserver信息了
3.5 测试
通过nslookup指令测试
# 正向解析 $ nslookup test.com Server: 192.168.43.28 Address: 192.168.43.28#53 Name: test.com Address: 192.168.43.28 $ nslookup baidu.com Server: 192.168.43.28 Address: 192.168.43.28#53 Non-authoritative answer: Name: baidu.com Address: 220.181.38.251 Name: baidu.com Address: 220.181.38.148 # 反向解析 $ nslookup 192.168.43.28 28.43.168.192.in-addr.arpa name = test.com.
使用网页测试(基于Node.js和Hexo搭建的静态网页,开启在4000端口,若端口为80端口,则域名不需要加端口)