DNS基本知识以及OpenWrt路由器DNS配置详解
DNS基本知识以及OpenWrt路由器DNS配置详解
DNS(域名系统)是互联网的基础服务之一,它将人类可读的域名(如baidu.com)转换为机器可读的IP地址。在OpenWrt路由器上正确配置DNS,不仅可以提高上网效率,还是使用一些插件(如访问国外网站、AdGuard Home等)的前提条件。本文将从DNS基础知识入手,详细介绍OpenWrt路由器的DNS配置方法,并通过实际测试验证不同配置下的效果。
DNS的基本作用
为了方便人们识别和访问互联网上的各种服务,我们通常使用易于记忆的域名(如baidu.com、jd.com等),而不是难以记忆的IP地址。DNS系统的作用就是将这些域名转换为对应的IP地址,使用户能够顺利访问互联网上的各种服务。
如何查看当前使用的DNS服务器
在Windows系统中,可以通过命令行查看当前使用的DNS服务器:
ipconfig /all
在Linux系统中,则需要编辑/etc/resolv.conf
文件来手动指定DNS服务器:
root@localhost:~# cat /etc/resolv.conf
search lan
nameserver 127.0.0.1
nameserver ::1
DNS查询过程详解
DNS查询过程可以概括为以下几步:
- 用户在浏览器中输入域名(如www.baidu.com)。
- 浏览器向本地DNS服务器发送查询请求。
- 如果本地DNS服务器缓存中有该域名的记录,则直接返回结果;否则,会向上一级DNS服务器发起查询。
- 这个过程会一直持续到找到对应的IP地址或确认域名不存在。
DNS查询过程中的几个细节
- 本地缓存:第一次访问某个网站时可能较慢,但之后会变快,因为结果会被缓存。
- DNS服务器缓存:多个用户访问同一个网站时,第一个用户可能需要更长时间,但后续用户会更快,因为DNS服务器也会缓存结果。
- 查询次数与效率:查询次数越多,效率越低,因此选择一个响应速度快的DNS服务器很重要。
- 缓存时间:不同DNS服务器的缓存时间不同,可能今天能快速找到,过几天又需要重新查询。
- 高可用性与负载均衡:同一个域名可能对应多个IP地址,这样可以避免单点故障和流量过载。
OpenWrt路由器上的DNS配置
在OpenWrt路由器上,DNS配置主要涉及以下几个方面:
- WAN口DNS
- LAN口DNS
- LAN口DHCP通告
- DHCP/DNS配置
其中,DHCP/DNS配置主要是dnsmasq服务的配置,包括端口、缓存大小等参数。
DNS配置验证过程
为了验证不同DNS配置的效果,我们设计了以下测试场景:
场景1:默认配置
在这种情况下,DNS服务器由WAN口自动获取。查看OpenWrt上的/tmp/resolv.conf.d/resolv.conf.auto
文件,可以看到自动获取的DNS服务器信息:
root@localhost:/tmp# cat /tmp/resolv.conf.d/resolv.conf.auto
# Interface WAN
nameserver 172.23.32.1
search .
客户端和路由器的日志显示,所有DNS查询都会被转发到上一级DNS服务器:
root@localhost:/tmp# cat message|grep zhaobudao
Wed Oct 9 02:09:27 2024 daemon.info dnsmasq[1]: 907 127.0.0.1/36195 query[A] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:09:27 2024 daemon.info dnsmasq[1]: 907 127.0.0.1/36195 forwarded zhaobudao.com to 172.23.32.1
Wed Oct 9 02:09:27 2024 daemon.info dnsmasq[1]: 908 127.0.0.1/36195 query[AAAA] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:09:27 2024 daemon.info dnsmasq[1]: 908 127.0.0.1/36195 forwarded zhaobudao.com to 172.23.32.1
场景2:仅配置WAN口DNS
将WAN口DNS设置为阿里公共DNS(223.5.5.5)后,查看/tmp/resolv.conf.d/resolv.conf.auto
文件:
root@localhost:/tmp# cat /tmp/resolv.conf.d/resolv.conf.auto
# Interface WAN
nameserver 223.5.5.5
此时所有DNS查询都会被转发到223.5.5.5:
root@localhost:/tmp# cat message|grep zhaobudao
Wed Oct 9 02:31:31 2024 daemon.info dnsmasq[1]: 1602 127.0.0.1/58081 query[A] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:31:31 2024 daemon.info dnsmasq[1]: 1602 127.0.0.1/58081 forwarded zhaobudao.com to 223.5.5.5
Wed Oct 9 02:31:31 2024 daemon.info dnsmasq[1]: 1603 127.0.0.1/58081 query[AAAA] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:31:31 2024 daemon.info dnsmasq[1]: 1603 127.0.0.1/58081 forwarded zhaobudao.com to 223.5.5.5
场景3:仅配置LAN口DNS
将LAN口DNS设置为腾讯公共DNS(119.29.29.29)后,查看/tmp/resolv.conf.d/resolv.conf.auto
文件:
root@localhost:/tmp# cat resolv.conf.d/resolv.conf.auto
# Interface WAN
# Interface lan
nameserver 119.29.29.29
此时所有DNS查询都会被转发到119.29.29.29:
root@localhost:/tmp# cat message|grep zhaobudao
Wed Oct 9 02:43:57 2024 daemon.info dnsmasq[1]: 1775 127.0.0.1/56587 query[A] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:43:57 2024 daemon.info dnsmasq[1]: 1775 127.0.0.1/56587 forwarded zhaobudao.com to 119.29.29.29
Wed Oct 9 02:43:57 2024 daemon.info dnsmasq[1]: 1776 127.0.0.1/56587 query[AAAA] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:43:57 2024 daemon.info dnsmasq[1]: 1776 127.0.0.1/56587 forwarded zhaobudao.com to 119.29.29.29
场景4:同时配置LAN和WAN口DNS
当同时配置LAN和WAN口DNS时,查询会按照权重顺序转发。例如,LAN口DNS设置为119.29.29.29(权重100),WAN口DNS设置为223.5.5.5(权重200):
root@localhost:/tmp# cat resolv.conf.d/resolv.conf.auto
# Interface lan
nameserver 119.29.29.29
# Interface WAN
nameserver 223.5.5.5
此时,客户端的DNS查询会同时转发到两个DNS服务器,而路由器本身的查询只会转发到WAN口DNS:
root@localhost:/tmp# cat message |grep zhaobudao
Wed Oct 9 02:58:24 2024 daemon.info dnsmasq[1]: 6 10.20.30.113/37640 query[A] zhaobudao.domain from 10.20.30.113
Wed Oct 9 02:58:24 2024 daemon.info dnsmasq[1]: 6 10.20.30.113/37640 forwarded zhaobudao.domain to 119.29.29.29
Wed Oct 9 02:58:24 2024 daemon.info dnsmasq[1]: 6 10.20.30.113/37640 forwarded zhaobudao.domain to 223.5.5.5
Wed Oct 9 02:58:24 2024 daemon.info dnsmasq[1]: 6 10.20.30.113/37640 reply zhaobudao.domain is NXDOMAIN
Wed Oct 9 02:58:43 2024 daemon.info dnsmasq[1]: 7 127.0.0.1/54050 query[A] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:58:43 2024 daemon.info dnsmasq[1]: 7 127.0.0.1/54050 forwarded zhaobudao.com to 223.5.5.5
Wed Oct 9 02:58:43 2024 daemon.info dnsmasq[1]: 8 127.0.0.1/54050 query[AAAA] zhaobudao.com from 127.0.0.1
Wed Oct 9 02:58:43 2024 daemon.info dnsmasq[1]: 8 127.0.0.1/54050 forwarded zhaobudao.com to 223.5.5.5
场景5:LAN口DHCP通告特定DNS
在LAN口DHCP中配置特定DNS(如8.8.8.8和180.76.76.76)后,客户端的DNS配置会相应改变:
# 客户机
root@ubuntu-host:~# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 8.8.8.8
nameserver 180.76.76.76
nameserver fe80::215:5dff:fe12:910a%eth0
root@ubuntu-host:~#
# 路由器
root@localhost:~# cat /tmp/resolv.conf.d/resolv.conf.auto
# Interface lan
nameserver 119.29.29.29
# Interface WAN
nameserver 223.5.5.5
此时,客户端的DNS查询会直接由配置的DNS服务器(8.8.8.8)应答,而路由器本身的查询仍由本地dnsmasq处理:
# 客户机上
root@ubuntu-host:~# nslookup zhaobudao.domain
Server: 8.8.8.8
Address: 8.8.8.8#53
** server can't find zhaobudao.domain: NXDOMAIN
# 路由器上
root@localhost:~# nslookup zhaobudao.com
Server: 127.0.0.1
Address: 127.0.0.1:53
Non-authoritative answer:
Non-authoritative answer:
场景6:DHCP/DNS配置
这部分主要涉及dnsmasq服务的高级配置,包括端口、缓存大小等参数。由于没有自己的DNS上游,这部分配置的实际效果有限,因此不再单独验证。
结语
通过以上实测验证,我们可以清晰地看到不同DNS配置下的行为差异。希望本文能帮助读者更好地理解OpenWrt路由器上的DNS配置原理,并根据实际需求进行合理设置。