設定 DNS,並確認路由器、用戶端與瀏覽器各自使用的 DNS
你可以分別回答三個問題:
- 路由器使用哪一個上游 DNS 伺服器?
- 用戶端從 OpenWrt 取得哪一個 DNS 伺服器?
- 瀏覽器是否透過 DoH 繞過系統解析器?
並且在變更失敗後,能夠回到可解析的狀態。
- OpenWrt 25.12.6,預設為
dnsmasq+odhcpd;25.12 使用apk,24.10 使用opkg。 - 檢查指令不需要額外安裝套件。若裝置執行
unbound或https-dns-proxy,請先確認是否由它們佔用 53 連接埠。 - 24.10 的選單名稱與設定鍵相近,但套件指令不同;請勿把
apk指令複製到 24.10。
DNS 路徑與各層職責
Section titled “DNS 路徑與各層職責”| 位置 | 預設負責者 | 檢查項目 |
|---|---|---|
| WAN 上游 | DHCP/PPPoE 用戶端 | cat /tmp/resolv.conf.d/resolv.conf.auto |
| 路由器解析器 | dnsmasq |
nslookup openwrt.org 127.0.0.1 |
| LAN 通告 | dnsmasq DHCP option 6 / odhcpd RDNSS |
用戶端上顯示的 DNS |
| 瀏覽器 | 系統解析器或瀏覽器 DoH | 瀏覽器的安全 DNS 設定 |
更換 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'請保留一條連到 LuCI/SSH 的有線 LAN 路徑。不要讓唯一的管理路徑依賴你正在變更的 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 後,上游解析器是你設定的值。
netstat -lnp | grep ':53'/etc/init.d/dnsmasq restartlogread -e dnsmasq | tail -20若 dnsmasq 無法啟動,請停止修改 DHCP 選項,並依錯誤訊息找出語法錯誤或連接埠衝突。
預期53 連接埠正在監聽,記錄中沒有設定錯誤。
開啟 網路 → DHCP與DNS → DHCP 伺服器 → 進階設定,檢查「DHCP 選項」。沒有 option 6 時,用戶端通常以路由器的 LAN 位址作為 DNS;有 option 6 時,用戶端會直接取得該位址。
請勿讓用戶端指向沒有在 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,且查詢成功。
從用戶端驗證
Section titled “從用戶端驗證”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 沒有生效」。
預期測試期間 DoH 已關閉,或你清楚知道它指向哪裡。
nslookup -type=AAAA openwrt.orgip -6 route當上游沒有 IPv6 前綴時,不要從 IPv4 的結果推論 IPv6 DNS 正常。
預期有 IPv6 上游時 AAAA 可解析;否則記錄缺少的條件。
失敗分支與回復
Section titled “失敗分支與回復”網頁無法載入,但 ping IP 正常
Section titled “網頁無法載入,但 ping IP 正常”先懷疑 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,為它設定同一子網路的靜態位址,並確認閘道是 OpenWrt 的 LAN 位址。再從主控台或 SSH 還原:
cp /etc/config/dhcp.bak.YYYY-MM-DD /etc/config/dhcpuci commit dhcp/etc/init.d/dnsmasq restart若你修改了 WAN DNS,請還原為自動取得的上游 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常見原因是其他解析器佔用 53 連接埠、語法錯誤,或上游無法連線。請先還原備份,再逐項重新加入自訂設定。
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,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 的流程。