找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 0|回覆: 0

    家裡的 DNS 規劃:本地名稱解析與廣告過濾

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    DNS 是那種「平常不會想到,但出問題時什麼都不能用」的東西。

    這篇講家庭網路的 DNS 該怎麼規劃。



    先搞懂查詢的路徑

    你在瀏覽器打一個網址,發生的事情是:
    1. 裝置 → 問「DNS 伺服器」(通常是路由器)
    2.       → 路由器問「上游 DNS」(ISP 或 8.8.8.8)
    3.       → 上游一層一層查到答案
    4.       → 回傳 IP
    複製代碼

    每一層都可以介入,這就是我們能做事的地方。

    目標一:本地名稱解析

    問題:你想用 http://nashttp://ha.home 存取,
    而不是背 192.168.1.20。

    解法 A:路由器的本地 DNS(最簡單)

    多數路由器會自動把 DHCP 的主機名稱註冊成本地 DNS。

    OpenWrt(dnsmasq) 預設就會做。
    你在 DHCP 保留裡填的 name 就是主機名:
    1. config host
    2.     option name 'nas'
    3.     option mac 'AA:BB:CC:DD:EE:FF'
    4.     option ip '192.168.1.20'
    複製代碼

    之後 ping nasping nas.lan 就會通。

    預設網域可以改:
    1. # /etc/config/dhcp
    2. config dnsmasq
    3.     option domain 'home'
    4.     option local '/home/'
    5.     option expandhosts '1'
    複製代碼

    這樣就變成 nas.home

    解法 B:自訂 DNS 記錄

    想指向不存在於 DHCP 的東西(例如一個 Docker 服務):
    1. # OpenWrt: /etc/config/dhcp
    2. config domain
    3.     option name 'grafana.home'
    4.     option ip '192.168.1.20'
    5. config domain
    6.     option name 'frigate.home'
    7.     option ip '192.168.1.20'
    複製代碼

    解法 C:用 .local 還是自訂網域?

    不要用 .local。

    .local 是 mDNS 專用的,跟一般 DNS 會打架。
    你可能會遇到「有時候通有時候不通」的詭異狀況。

    建議用


    • .home.arpa —— 這是 RFC 8375 正式保留給家庭網路的,最正確
    • .lan —— 事實上的慣例,很多路由器預設
    • .internal —— 也是保留用途


    不要用


    • .local(跟 mDNS 衝突)
    • .dev、.app(真的存在的頂級網域,而且強制 HTTPS)
    • 你自己的真實網域(除非你知道自己在做什麼)




    目標二:廣告與追蹤過濾

    原理:在 DNS 層攔截廣告網域的查詢,直接回「找不到」。

    好處


    • 全家所有裝置都生效 —— 包含手機 App、智慧電視、IoT 裝置
    • 不用在每台裝置裝擋廣告軟體
    • 會順便擋掉很多 IoT 裝置的回報行為


    常見的方案


    • Pi-hole —— 最有名,介面友善,社群大
    • AdGuard Home —— 功能更多(內建 DoH/DoT、家長控制),設定更直覺
    • OpenWrt 的 adblock 套件 —— 輕量,不用另外跑機器
    • 路由器內建 —— 某些品牌有,但通常不能自訂清單


    我的建議:有 NAS 或小主機的話跑 AdGuard Home(Docker 一行就起來)。
    沒有的話用 OpenWrt 的 adblock。

    AdGuard Home 的 Docker Compose
    1. services:
    2.   adguardhome:
    3.     image: adguard/adguardhome:latest
    4.     container_name: adguardhome
    5.     restart: unless-stopped
    6.     network_mode: host      # DNS 服務建議用 host 網路
    7.     volumes:
    8.       - ./work:/opt/adguardhome/work
    9.       - ./conf:/opt/adguardhome/conf
    複製代碼

    啟動後到 http://你的IP:3000 做初始設定。

    然後把路由器的 DHCP DNS 指向它
    1. # OpenWrt
    2. config dhcp 'lan'
    3.     list dhcp_option '6,192.168.1.20'    # 6 = DNS 伺服器
    複製代碼

    非常重要:一定要有備援

    如果 AdGuard 掛了,全家都不能上網(因為 DNS 解析不了)。

    三個對策:


    • DHCP 發兩個 DNS:主要是 AdGuard,次要是路由器自己
        (但裝置不一定會乖乖用次要的)
    • 跑兩個實例(一個在 NAS、一個在樹莓派)
    • 設定容器 restart: unless-stopped,掛了會自己起來
    • 在 HA 做一個監控,DNS 服務掛掉就推播


    HA 監控 DNS 的做法
    1. command_line:
    2.   - binary_sensor:
    3.       name: DNS 服務正常
    4.       unique_id: dns_alive
    5.       command: >
    6.         nslookup google.com 192.168.1.20 > /dev/null 2>&1
    7.         && echo ON || echo OFF
    8.       payload_on: "ON"
    9.       payload_off: "OFF"
    10.       scan_interval: 120
    11.       device_class: connectivity
    複製代碼

    目標三:看見 IoT 裝置在連哪裡

    這是 AdGuard / Pi-hole 最有趣的附加價值。

    打開查詢日誌,你會看到每一個裝置在查什麼網域

    我自己看到的東西包括:


    • 某個攝影機每分鐘查一次某個境外網域
    • 某台電視每小時回報一次資料到廠商的分析伺服器
    • 某個插座在查一個已經停止營運的雲端服務(所以它一直重試)


    然後你可以決定要不要擋。

    注意:擋掉之後有些功能會壞
    建議先「觀察一週」,再決定擋哪些。



    目標四:加密的 DNS(可選)

    預設的 DNS 查詢是明文的,ISP 看得到你查了什麼。

    DoH(DNS over HTTPS)DoT(DNS over TLS) 可以加密。

    AdGuard Home 內建支援,在「設定 → DNS 設定 → 上游伺服器」填:
    1. https://dns.quad9.net/dns-query
    2. tls://dns.quad9.net
    複製代碼

    或者 Cloudflare:
    1. https://cloudflare-dns.com/dns-query
    複製代碼

    取捨


    • 好處:ISP 看不到你的查詢內容
    • 壞處:延遲稍微增加、而且你是把信任從 ISP 轉移給那家 DNS 商
    • 注意:這只加密「你到上游」那一段,家裡內部還是明文


    一個容易被忽略的問題:裝置繞過你的 DNS

    有些裝置(尤其是 Google、Amazon 的產品)會寫死使用 8.8.8.8
    根本不理路由器發的 DNS。

    對策:在防火牆上強制重導向
    1. # OpenWrt: 把所有對外的 53 埠重導到本地 DNS
    2. config redirect
    3.     option name 'Force-DNS'
    4.     option src 'lan'
    5.     option proto 'tcp udp'
    6.     option src_dport '53'
    7.     option dest_port '53'
    8.     option dest_ip '192.168.1.20'
    9.     option target 'DNAT'
    複製代碼

    DoH 的話比較難擋(它走 443,混在一般 HTTPS 流量裡),
    但多數 IoT 裝置還沒用 DoH。

    規劃總結

    一個完整的家庭 DNS 架構:
    1. 所有裝置
    2.    ↓ (DHCP 發的 DNS:192.168.1.20)
    3. AdGuard Home(過濾廣告、本地記錄、查詢日誌)
    4.    ↓ (上游用 DoH)
    5. Quad9 / Cloudflare
    6.    ↓
    7. 網際網路
    8. + 防火牆規則:強制所有 53 埠流量走 AdGuard
    9. + HA 監控:DNS 服務掛掉就推播
    10. + 備援:路由器自己的 dnsmasq 當第二 DNS
    複製代碼

    ---

    最後一個實用建議:

    做任何 DNS 改動之前,先確認你有辦法在「DNS 完全壞掉」的情況下連上路由器。

    也就是用 IP 連,不要只記網址。

    我有一次把上游 DNS 設錯,結果家裡完全不能上網,
    而我一時想不起來路由器的 IP……

    (後來是翻手機的 Wi-Fi 詳細資訊才看到閘道位址。)
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 11:13 , Processed in 0.080354 second(s), 25 queries .

    快速回覆 返回頂部 返回列表