Ubuntu局域网DNS配置指南
在Ubuntu系统搭建的局域网环境中,DNS(域名系统)的配置对于实现网络中设备通过域名访问彼此至关重要,它能够将易于记忆的域名转换为对应的IP地址,方便用户在局域网内进行资源访问和共享,本文将详细介绍在Ubuntu系统中配置局域网DNS的方法,包括使用BIND和dnsmasq两种常见的DNS服务器软件,以及相关的测试和注意事项。
使用BIND配置局域网DNS
(一)安装BIND软件包
在终端中以root身份登录,然后运行以下命令安装BIND9:
sudo aptget install bind9 dnsutils
这将安装BIND9 DNS服务器软件以及一些常用的DNS工具,如dig
和nslookup
,用于后续的测试和诊断。
(二)全局配置
编辑/etc/bind/named.conf.options
文件,进行全局配置,以下是一些常见的配置选项:
|配置项|说明|示例|
||||
|directory
|指定BIND的工作目录,用于存储缓存文件等。|directory "/var/cache/bind";
|
|listenon port 53
|设置监听端口为53,并指定监听的IP地址范围,若想监听所有IP,可设置为any;
;若只监听特定IP,如168.10.3;
。|listenon port 53 { any;};
或 listenon port 53 { 192.168.10.3;};
|
|allowquery
|定义允许进行DNS查询的客户端地址范围。any;
表示允许所有客户端查询。|allowquery {any;};
|
|forwarders
|指定上游DNS服务器的IP地址,当本地DNS服务器无法解析域名时,将查询转发给这些上游DNS服务器。|forwarders { 223.5.5.5; 223.6.6.6; };
|
|dnssecvalidation
|设置是否启用DNSSEC验证,可选值为auto
、yes
或no
。auto
表示自动根据域名的DNSSEC状态进行验证。|dnssecvalidation auto;
|
|authnxdomain
|控制当请求的域名不存在时是否返回"不存在"的响应,设置为no
可避免返回不必要的信息。|authnxdomain no;
|
(三)配置区域文件
- 正向解析配置
- 复制示例区域文件
db.0
为自定义的正向解析区域文件,例如db.demo.com
:cp db.0 /etc/bind/db.demo.com
- 编辑
/etc/bind/db.demo.com
文件,配置域名与IP地址的映射关系,以下是一个简单的示例:; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA demo.com. root.demo.com. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 192.168.10.10 * IN A 192.168.10.10 ;泛解析,将所有子域名都解析到同一IP地址
- 在
/etc/bind/named.conf.local
文件中添加正向解析区域的定义:zone "demo.com" { type master; file "/etc/bind/db.demo.com"; };
- 复制示例区域文件
- 反向解析配置
- 复制示例反向解析区域文件
db.127
为自定义的反向解析区域文件,例如db.168.192
:cp db.127 /etc/bind/db.168.192
- 编辑
/etc/bind/db.168.192
文件,配置IP地址与域名的反向解析关系,以下是一个简单的示例:; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA demo.com. root.demo.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 1.0.0 IN PTR localhost. 10 IN PTR demo.com ;将IP地址192.168.10.10反向解析为demo.com
- 在
/etc/bind/named.conf.local
文件中添加反向解析区域的定义:zone "168.192.inaddr.arpa" { type master; file "/etc/bind/db.168.192"; };
- 复制示例反向解析区域文件
(四)重启BIND服务
完成配置文件的编辑后,需要重启BIND服务使配置生效:
sudo service bind9 restart
(五)测试BIND DNS服务器
- 检查区域文件语法
- 使用
namedcheckzone
命令检查正向和反向解析区域文件的语法是否正确:namedcheckzone demo.com /etc/bind/db.demo.com namedcheckzone 168.192.inaddr.arpa /etc/bind/db.168.192
- 如果没有任何错误提示,表示区域文件语法正确。
- 使用
- 使用dig命令测试正向解析
- 编辑
/etc/resolv.conf
文件,将DNS服务器设置为本地BIND服务器的IP地址(假设为192.168.10.10):nameserver 192.168.10.10 options edns0 trustad search demo.com
- 运行
dig
命令查询域名:dig www.demo.com
- 如果配置正确,将返回正确的IP地址解析结果。
- 编辑
- 使用nslookup命令测试反向解析
- 在终端中运行以下命令进行反向解析测试:
nslookup 192.168.10.10
- 如果配置正确,将返回对应的域名解析结果。
- 在终端中运行以下命令进行反向解析测试:
使用dnsmasq配置局域网DNS
(一)安装dnsmasq
如果系统中没有安装dnsmasq,可以使用以下命令进行安装:
sudo aptget install dnsmasq
(二)生成核心配置文件
创建自定义的配置文件目录,例如/home/xg/soft/dnsmasq
,然后在该目录下创建相关配置文件:
- 创建banner_add_hosts文件
- 使用
touch
命令创建文件:touch /home/xg/soft/dnsmasq/banner_add_hosts
- 编辑该文件,添加域名与IP地址的映射关系,
168.1.5 xg.com 192.168.2.21 km.xg.com 192.168.2.22 kn.xg.com
- 使用
- 创建resolv.conf文件
- 使用
touch
命令创建文件:touch /home/xg/soft/dnsmasq/resolv.conf
- 编辑该文件,指定上游DNS服务器,
nameserver 114.114.114.114 nameserver 8.8.8.8
- 使用
- 复制dnsmasq默认配置文件
- 从docker容器中复制默认的
dnsmasq.conf
文件到自定义目录:docker cp dnsmasq:/etc/dnsmasq.conf /home/xg/soft/dnsmasq/dnsmasq.conf
- 从docker容器中复制默认的
(三)更改配置文件
编辑/home/xg/soft/dnsmasq/dnsmasq.conf
文件,修改以下两个配置项:
|配置项|说明|示例|
||||
|addnhosts
|指定包含额外主机记录的文件路径。|addnhosts=/etc/banner_add_hosts
|
|resolvfile
|指定用于解析外部域名的上游DNS服务器配置文件路径。|resolvfile=/etc/resolv.conf
|
(四)启动dnsmasq服务
使用以下命令启动dnsmasq服务:
sudo docker run d \
p 127.0.0.1:53:53/tcp \
p 127.0.0.1:53:53/udp \
v /home/xg/soft/dnsmasq/banner_add_hosts:/etc/banner_add_hosts \
v /home/xg/soft/dnsmasq/resolv.conf:/etc/resolv.conf \
v /home/xg/soft/dnsmasq/dnsmasq.conf:/etc/dnsmasq.conf \
capadd=NET_ADMIN \
name dnsmasq \
andyshinn/dnsmasq
这将在后台启动dnsmasq容器,并将本地的配置文件挂载到容器中相应的位置。
(五)测试dnsmasq DNS服务器
- 在本机测试
- 编辑
/etc/resolv.conf
文件,添加本地dnsmasq服务器的IP地址(此处为127.0.0.1):nameserver 127.0.0.1
- 使用
dig
或nslookup
命令查询在banner_add_hosts
文件中配置的域名,dig xg.com nslookup km.xg.com
- 如果配置正确,将返回相应的IP地址解析结果。
- 编辑
- 在虚拟机测试
- 确保虚拟机的网络设置与宿主机在同一局域网内,并且将虚拟机的DNS服务器设置为本地dnsmasq服务器的IP地址(如果虚拟机与宿主机不在同一网段,需要根据实际情况进行网络配置)。
- 在虚拟机上使用
dig
或nslookup
命令查询配置的域名,检查是否能正确解析。
(六)配置新域名
如果在后期需要配置新的域名,只需在banner_add_hosts
文件中新增一行,指定IP地址和域名,
168.2.11 kmaster01.xg.com
然后保存文件即可,无需重启dnsmasq服务。
注意事项
- 防火墙设置
- 确保防火墙允许DNS服务器监听的端口(UDP和TCP的53端口)的入站流量,可以使用以下命令检查和配置防火墙(以UFW为例):
sudo ufw allow 53
- 确保防火墙允许DNS服务器监听的端口(UDP和TCP的53端口)的入站流量,可以使用以下命令检查和配置防火墙(以UFW为例):
- DHCP配置
如果局域网中使用DHCP服务器分配IP地址,建议在DHCP服务器的配置中将首选DNS服务器设置为搭建的DNS服务器的IP地址,这样客户端在获取IP地址时会自动获取正确的DNS服务器地址,无需手动配置每个客户端的DNS,具体配置方法因DHCP服务器软件而异,一般可以在DHCP服务器的配置文件中找到相关的DNS设置选项进行修改。
- 缓存清理
- 在对DNS服务器的配置进行修改后,客户端可能会因为缓存原因仍然使用旧的解析结果,可以通过重启客户端的网络服务或清除DNS缓存来确保客户端获取最新的DNS解析结果,在Linux系统中,可以使用以下命令清除DNS缓存:
sudo systemdresolve flushcaches
在Windows系统中,可以通过命令提示符运行以下命令清除DNS缓存:
ipconfig /flushdns
- 在对DNS服务器的配置进行修改后,客户端可能会因为缓存原因仍然使用旧的解析结果,可以通过重启客户端的网络服务或清除DNS缓存来确保客户端获取最新的DNS解析结果,在Linux系统中,可以使用以下命令清除DNS缓存:
相关问题与解答
(一)问题1:如何在Ubuntu系统中查看当前正在使用的DNS服务器地址?
解答:在Ubuntu系统中,可以通过查看/etc/resolv.conf
文件来获取当前正在使用的DNS服务器地址,使用以下命令打开该文件:
cat /etc/resolv.conf
文件中以nameserver
开头的行后面的IP地址即为当前正在使用的DNS服务器地址,对于使用systemdresolved服务的系统,还可以使用以下命令查看DNS服务器信息:
resolvectl dns
这将显示当前系统使用的DNS服务器列表以及其他相关的DNS配置信息。
(二)问题2:在配置BIND DNS服务器时,为什么需要设置allowquery
选项?如果不设置会有什么影响?
解答:allowquery
选项用于定义允许进行DNS查询的客户端地址范围,在局域网环境中,为了安全起见,通常只允许局域网内的客户端访问DNS服务器,防止外部非法访问和滥用DNS服务,如果不设置allowquery
选项,默认情况下BIND DNS服务器可能会允许任何客户端进行查询,这存在安全风险,例如可能会被外部攻击者利用进行DNS放大攻击等恶意行为,影响网络安全和DNS服务器的正常运行。