跳转到内容

OpenWrt DNS 怎么设置:路由器、电脑和浏览器分别走哪里

你能分别回答三个问题:

  • 路由器的上游 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。
位置 默认由谁负责 本页怎么检查
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。

路由器 Shell备份 DHCP/DNS 配置
终端窗口
cp /etc/config/dhcp /etc/config/dhcp.bak.$(date +%F)
uci export dhcp > /tmp/dhcp.before
uci show dhcp | grep -E 'dns|resolv|server|option'

同时确认你能用网线通过 LAN 访问 LuCI/SSH;不要把唯一管理入口建立在正在修改的 DNS 上。

预期备份文件存在,且你知道怎么恢复。

路由器 Shell看当前上游 DNS 和 dnsmasq 配置
终端窗口
cat /tmp/resolv.conf.d/resolv.conf.auto
uci 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 的当前值。

LuCI在 WAN 上设置自定义 DNS(推荐先改这一层)

打开 网络 → 接口 → WAN → 高级设置:

  1. 取消勾选“使用对端通告的 DNS 服务器”(peerdns 变为 0)。
  2. 在“自定义 DNS 服务器”填入你信任的 DNS,例如 1.1.1.1 和 9.9.9.9。
  3. 保存并应用;必要时重新连接 WAN。

这一步会短暂中断 WAN,但不会改 LAN 的 DHCP/DNS 结构,失败时更容易回退。

预期WAN 重新拨号后,上游 DNS 变成你设置的值。

路由器 Shell确认 dnsmasq 正在监听并已加载新上游
终端窗口
netstat -lnp | grep ':53'
/etc/init.d/dnsmasq restart
logread -e dnsmasq | tail -20

如果 dnsmasq 启动失败,先不要继续改 DHCP option;用 logread 的错误原文定位配置语法或端口冲突。

预期53 端口在监听,日志没有配置错误。

LuCI检查 DHCP 通告给终端的 DNS

打开 网络 → DHCP/DNS → DHCP 服务器 → 高级设置,检查“DHCP 选项”是否包含 6,<DNS>。没有 option 6 时,客户端通常使用路由器 LAN 地址作为 DNS;有 option 6 时,客户端会直接拿到该地址。

不要同时把客户端 DNS 指向一个未监听 53 的地址。

预期终端拿到的是 OpenWrt 的 LAN 地址,或你明确设置的 option 6。

路由器 ShellCLI 等价改法(可选)
终端窗口
uci set network.wan.peerdns='0'
uci -q delete network.wan.dns
uci add_list network.wan.dns='1.1.1.1'
uci commit network
ifup wan
cat /tmp/resolv.conf.d/resolv.conf.auto

改完用 logread -e dnsmasq 确认它加载了新上游;如果客户端仍拿到旧 DNS,重启 dnsmasq 或检查 DHCP option 6。

预期resolv.auto 显示 1.1.1.1,查询成功。

路由器 Shell从路由器本机验证 A 与 AAAA
终端窗口
nslookup openwrt.org 127.0.0.1
nslookup -type=AAAA openwrt.org 127.0.0.1

预期两条查询都返回结果,且没有超时。

电脑从电脑验证实际收到的 DNS

Linux:

终端窗口
resolvectl status
cat /etc/resolv.conf
nslookup openwrt.org

Windows:

终端窗口
ipconfig /all
nslookup openwrt.org

macOS:

终端窗口
scutil --dns
nslookup openwrt.org

预期客户端 DNS 与 DHCP/静态配置一致,查询能返回结果。

电脑在浏览器里确认是否绕过路由器 DNS

Chrome/Edge:chrome://settings/security 或“隐私和安全 → 安全 → 使用安全 DNS”。Firefox:设置 → 隐私与安全 → DNS over HTTPS。浏览器开启 DoH 时,系统 DNS 可能完全不被使用;这会让“改了路由器 DNS 但浏览器不生效”看起来像故障。

预期做 DNS 验证时 DoH 已关闭,或你明确知道它指向哪里。

电脑检查 IPv6 解析与 RA/RDNSS
终端窗口
nslookup -type=AAAA openwrt.org
ip -6 route

如果上游没有 IPv6 前缀,不要用 IPv4 的结果推断 IPv6 DNS 正常。

预期有 IPv6 上游时 AAAA 可解析;没有时明确记录条件不足。

优先怀疑 DNS,而不是 WAN 断线:

  1. 在客户端查实际 DNS:resolvectl status / ipconfig /all / scutil --dns。
  2. 在路由器查 53 端口和 dnsmasq 日志:netstat -lnp | grep ':53'、logread -e dnsmasq。
  3. 确认浏览器 DoH 是否开启;临时关闭后重试。
  4. 确认 DHCP option 6 没有把客户端指向错误地址。

不要继续改 DNS。用网线接 LAN,给客户端配一个同网段静态 IP,确认默认网关是 OpenWrt LAN 地址;再从本地控制台或 SSH 恢复:

终端窗口
cp /etc/config/dhcp.bak.YYYY-MM-DD /etc/config/dhcp
uci commit dhcp
/etc/init.d/dnsmasq restart

如果你刚刚改了 WAN 的自定义 DNS,也可以把 peerdns 改回 1,让上游 DNS 自动下发:

终端窗口
uci set network.wan.peerdns='1'
uci -q delete network.wan.dns
uci commit network
ifup wan

改完 WAN DNS 但客户端仍走旧解析

Section titled “改完 WAN DNS 但客户端仍走旧解析”

先确认 resolv.auto 是否真的变了,再看 dnsmasq 是否加载了新上游:

终端窗口
cat /tmp/resolv.conf.d/resolv.conf.auto
logread -e dnsmasq | tail -20
/etc/init.d/dnsmasq restart

如果 resolv.auto 没变,检查 network.wan.dns 和 peerdns;如果客户端仍拿到旧 DNS,检查 DHCP option 6 和浏览器 DoH。

先看错误原文,不要反复重启:

终端窗口
logread -e dnsmasq | tail -50
dnsmasq --test

常见原因是端口被其他 DNS 组件占用、配置语法错误、上游地址不可达。恢复备份后再逐项恢复自定义配置。

  • 环境:PVE 9.2.2 单网口;OpenWrt 25.12.6 VM 200;WAN 192.168.50.77/24,LAN 192.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,DNS 192.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 的步骤。

来源

Router.Homes

独立的 OpenWrt 实操笔记。每页写明固件、设备、包管理器与恢复路径。

图标:Solar by 480 Design, CC BY 4.0