OpenWrt DNS 怎么设置:路由器、电脑和浏览器分别走哪里
完成后你能确认什么
Section titled “完成后你能确认什么”你能分别回答三个问题:
- 路由器的上游 DNS 是谁;
- 电脑/手机从 OpenWrt 拿到的 DNS 是谁;
- 浏览器是否绕过系统 DNS(DoH)。
并且在改动失败后,能用备份或 WAN 恢复步骤回到可解析状态。
- OpenWrt 25.12.6,默认
dnsmasq+odhcpd;25.12 使用apk,24.10 使用opkg。 - 本文的检查命令不需要安装额外软件包;如果设备使用其他 DNS 组件(如
unbound、https-dns-proxy),先确认它是否接管了 53 端口。 - 24.10 的菜单和配置键基本一致,但包管理命令不同;不要把
apk命令直接套到 24.10。
DNS 路径与职责
Section titled “DNS 路径与职责”| 位置 | 默认由谁负责 | 本页怎么检查 |
|---|---|---|
| WAN 上游 | DHCP/PPPoE 客户端下发的 DNS | cat /tmp/resolv.conf.d/resolv.conf.auto |
| 路由器本地解析 | dnsmasq |
nslookup openwrt.org 127.0.0.1 |
| LAN 终端通告 | dnsmasq 的 DHCP option 6 / odhcpd 的 RDNSS |
在电脑或手机上查实际 DNS |
| 浏览器 | 系统 DNS 或浏览器自带 DoH | 浏览器安全设置里确认 DoH 是否开启 |
先判断问题在哪一层,不要一上来就换公共 DNS。
cp /etc/config/dhcp /etc/config/dhcp.bak.$(date +%F)uci export dhcp > /tmp/dhcp.beforeuci show dhcp | grep -E 'dns|resolv|server|option'同时确认你能用网线通过 LAN 访问 LuCI/SSH;不要把唯一管理入口建立在正在修改的 DNS 上。
预期备份文件存在,且你知道怎么恢复。
cat /tmp/resolv.conf.d/resolv.conf.autouci show dhcp.@dnsmasq[0]uci show network.wan | grep -E 'peerdns|dns'/tmp/resolv.conf.d/resolv.conf.auto 是 WAN 客户端写入的解析文件;dhcp.@dnsmasq[0].resolvfile 指向哪里,以实际输出为准。若 noresolv='1',dnsmasq 会忽略这个文件,改用 server 列表。
预期你能指出 resolvfile、server、noresolv 的当前值。
打开 网络 → 接口 → WAN → 高级设置:
- 取消勾选“使用对端通告的 DNS 服务器”(
peerdns变为 0)。 - 在“自定义 DNS 服务器”填入你信任的 DNS,例如
1.1.1.1和9.9.9.9。 - 保存并应用;必要时重新连接 WAN。
这一步会短暂中断 WAN,但不会改 LAN 的 DHCP/DNS 结构,失败时更容易回退。
预期WAN 重新拨号后,上游 DNS 变成你设置的值。
netstat -lnp | grep ':53'/etc/init.d/dnsmasq restartlogread -e dnsmasq | tail -20如果 dnsmasq 启动失败,先不要继续改 DHCP option;用 logread 的错误原文定位配置语法或端口冲突。
预期53 端口在监听,日志没有配置错误。
打开 网络 → DHCP/DNS → DHCP 服务器 → 高级设置,检查“DHCP 选项”是否包含 6,<DNS>。没有 option 6 时,客户端通常使用路由器 LAN 地址作为 DNS;有 option 6 时,客户端会直接拿到该地址。
不要同时把客户端 DNS 指向一个未监听 53 的地址。
预期终端拿到的是 OpenWrt 的 LAN 地址,或你明确设置的 option 6。
uci set network.wan.peerdns='0'uci -q delete network.wan.dnsuci add_list network.wan.dns='1.1.1.1'uci commit networkifup wancat /tmp/resolv.conf.d/resolv.conf.auto改完用 logread -e dnsmasq 确认它加载了新上游;如果客户端仍拿到旧 DNS,重启 dnsmasq 或检查 DHCP option 6。
预期resolv.auto 显示 1.1.1.1,查询成功。
nslookup openwrt.org 127.0.0.1nslookup -type=AAAA openwrt.org 127.0.0.1预期两条查询都返回结果,且没有超时。
Linux:
resolvectl statuscat /etc/resolv.confnslookup openwrt.orgWindows:
ipconfig /allnslookup openwrt.orgmacOS:
scutil --dnsnslookup openwrt.org预期客户端 DNS 与 DHCP/静态配置一致,查询能返回结果。
Chrome/Edge:chrome://settings/security 或“隐私和安全 → 安全 → 使用安全 DNS”。Firefox:设置 → 隐私与安全 → DNS over HTTPS。浏览器开启 DoH 时,系统 DNS 可能完全不被使用;这会让“改了路由器 DNS 但浏览器不生效”看起来像故障。
预期做 DNS 验证时 DoH 已关闭,或你明确知道它指向哪里。
nslookup -type=AAAA openwrt.orgip -6 route如果上游没有 IPv6 前缀,不要用 IPv4 的结果推断 IPv6 DNS 正常。
预期有 IPv6 上游时 AAAA 可解析;没有时明确记录条件不足。
失败分支与恢复
Section titled “失败分支与恢复”网页打不开,但能 ping 通 IP
Section titled “网页打不开,但能 ping 通 IP”优先怀疑 DNS,而不是 WAN 断线:
- 在客户端查实际 DNS:
resolvectl status/ipconfig /all/scutil --dns。 - 在路由器查 53 端口和 dnsmasq 日志:
netstat -lnp | grep ':53'、logread -e dnsmasq。 - 确认浏览器 DoH 是否开启;临时关闭后重试。
- 确认 DHCP option 6 没有把客户端指向错误地址。
LuCI/SSH 进不去
Section titled “LuCI/SSH 进不去”不要继续改 DNS。用网线接 LAN,给客户端配一个同网段静态 IP,确认默认网关是 OpenWrt LAN 地址;再从本地控制台或 SSH 恢复:
cp /etc/config/dhcp.bak.YYYY-MM-DD /etc/config/dhcpuci commit dhcp/etc/init.d/dnsmasq restart如果你刚刚改了 WAN 的自定义 DNS,也可以把 peerdns 改回 1,让上游 DNS 自动下发:
uci set network.wan.peerdns='1'uci -q delete network.wan.dnsuci commit networkifup wan改完 WAN DNS 但客户端仍走旧解析
Section titled “改完 WAN DNS 但客户端仍走旧解析”先确认 resolv.auto 是否真的变了,再看 dnsmasq 是否加载了新上游:
cat /tmp/resolv.conf.d/resolv.conf.autologread -e dnsmasq | tail -20/etc/init.d/dnsmasq restart如果 resolv.auto 没变,检查 network.wan.dns 和 peerdns;如果客户端仍拿到旧 DNS,检查 DHCP option 6 和浏览器 DoH。
dnsmasq 起不来
Section titled “dnsmasq 起不来”先看错误原文,不要反复重启:
logread -e dnsmasq | tail -50dnsmasq --test常见原因是端口被其他 DNS 组件占用、配置语法错误、上游地址不可达。恢复备份后再逐项恢复自定义配置。
E2 实测记录(2026-10-20)
Section titled “E2 实测记录(2026-10-20)”- 环境:PVE 9.2.2 单网口;OpenWrt 25.12.6 VM 200;WAN
192.168.50.77/24,LAN192.168.1.1/24。 - 基线:
resolv.auto为nameserver 192.168.50.1;nslookup openwrt.org 127.0.0.1返回 A/AAAA。 - 自定义:
peerdns=0+network.wan.dns=1.1.1.1;resolv.auto变为nameserver 1.1.1.1,查询仍成功。 - 故障:dnsmasq 上游改为不可达
192.0.2.1,随机.example.com查询返回connection timed out; no servers could be reached;删除noresolv/server并恢复peerdns=1后解析恢复。 - 客户端:netns DHCP 获得
192.168.1.116/24,DNS192.168.1.1,dig @192.168.1.1 openwrt.org成功,ping 192.168.50.1通。 - 未测:浏览器 DoH、IPv6 上游/RA/RDNSS、物理 LAN 客户端、长期稳定性。
- 本页已在固定实验环境完成 E2 复现;浏览器 DoH 与 IPv6 上游仍未测,不能写成已验证。
- 复现记录见
docs/dns-e2-run.md与tests/recipes/dns-25.12-x86.md。 - 版本/菜单变化时更新
testedVersions与lastVerifiedAt;不要把 24.10 的opkg命令写进 25.12 的步骤。