在法國用 Freebox 跑自架 DNS 轉發:上游一掛就全斷的實測

这篇内容暂时只有 繁體中文 版本,以下是原文。

Freebox Pop 韌體 4.8.x,區網裡一台 x86 小主機跑 Unbound 當轉發器,上游指到 Freebox 自己的 DNS。平常沒問題,但只要 Freebox 那一端解析出狀況(例如線路重撥、或上游回應變慢),整個區網就等於沒有 DNS,瀏覽器轉圈、apt 卡住,但 ping 8.8.8.8 又是通的。這個現象很容易誤判成斷線,我一開始也以為是光纖不穩,查了半天才發現是解析卡住。

我的做法是讓 Unbound 不要只認一個上游,並且把快取留下來扛過短暫中斷。設定片段大致是這樣:

forward-zone:
  name: "."
  forward-addr: 212.27.40.240
  forward-addr: 212.27.40.241
  forward-addr: 9.9.9.9
  forward-first: no

另外把 cache-min-ttl 設成 300,讓常見域名在快取裡多撐五分鐘;serve-expired: yes 和 serve-expired-ttl: 3600 也開著,上游掛掉時還能吐舊答案。Freebox 那邊的 DHCP 把 DNS 發給區網裝置時,我改成只發小主機的 IP,讓它自己決定往哪走,而不是每台裝置各自去問 Freebox。

為什麼這樣做:Freebox 的 DNS 轉發本身沒有什麼可調的地方,出了問題只能等它自己恢復。把解析集中在一台自己能控制的機器上,至少能加第二、第三個上游,也能觀察查詢延遲。代價是多一個故障點,這台小主機掛了全區網就沒 DNS,所以我在另一台機器上留了一份同樣的 Unbound 設定,出事時手動改 DHCP 指向。

會失效的地方:serve-expired 只對已經快取過的域名有用,第一次查的新域名照樣失敗;如果 Freebox 給的是內部域名(例如它的管理介面主機名),轉到 9.9.9.9 是查不到的,要另外加 local-zone 或 stub。我自己踩過一次:把上游全換成外部 DNS 之後,區網裡幾台依賴 Freebox 內部名稱的裝置就找不到彼此,後來補了一條 local-zone: "freebox.local." static 才回來。另外 Freebox 重撥後如果 IPv6 前綴變了,Unbound 監聽的介面要確認有沒有跟著重綁,這點我還沒完全摸清,目前是靠重啟服務繞過。

你們在 Freebox 後面跑自架解析時,是直接讓裝置問 Freebox,還是像我這樣集中一台?如果集中,上游是怎麼排優先順序的?

0
赞同度 100% · 0 条评论 · 2 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。