在法國用舊 Raspberry Pi 跑 Tailscale 當跳板:一次斷線的實測

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

上個月把家裡那台舊的 Raspberry Pi 4(2GB,Raspberry Pi OS Bullseye 64-bit)拿來當 Tailscale 跳板,主要是想從外面連回 Orange 光纖後面的 NAS 跟幾台內網機器。Pi 本身接在 Livebox 的 LAN 口,用 DHCP 拿固定租約,Tailscale 版本是 1.56(apt 裝的),沒有開 exit node,只做 subnet router,內網網段是 192.168.1.0/24。

做法很直接,先裝再開轉發:

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo tailscale up --advertise-routes=192.168.1.0/24 --accept-dns=false

之後在 admin console 把 route 核准,Pi 端用 systemd 的 tailscaled 常駐。前兩週都正常,從手機跟筆電都能直接 ping 到 NAS 的內網 IP,SSH 也沒問題。

轉折點是某次 Livebox 重開(法國電力公司跳電,UPS 只撐了 Pi 沒撐到 Livebox)。來電後 Tailscale 的 control plane 顯示 Pi 在線,但從外面連 192.168.1.x 全部 timeout,tailscale status 看到的是 direct 變 relay,而且 relay 節點是巴黎的 DERP。我當下以為是 route 掉了,重新核准一次沒用,重啟 tailscaled 也沒用。

真正的原因是我踩到的坑:Pi 的 DHCP 租約在 Livebox 重開後換了 IP,而 Tailscale 的 subnet router 是綁在「當下那張網卡的位址」上做 NAT 轉發,舊的 conntrack 還在,新位址進來後 forward 規則對不上。我的解法是不要在 Livebox 上依賴 DHCP,直接在 Pi 的 dhcpcd.conf 裡釘死一個 LAN 外的位址,避開 Livebox 的 DHCP pool:

interface eth0
static ip_address=192.168.1.240/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

釘死之後重開機,Tailscale 的 route 就穩定多了。代價是每次改內網拓撲要手動記這個位址,而且如果 Livebox 哪天把 192.168.1.240 發給別的裝置就會衝突,所以我把 pool 設成 .100 到 .200。

還有一個邊界:Pi 的 2GB 記憶體跑 tailscaled 加一般負載很夠,但如果同時開 exit node 加上大流量,會看到 OOM killer 動 tailscaled。我後來把 exit node 關掉,只留 subnet router,才沒有再發生。另外 Tailscale 的 MagicDNS 我沒開,因為 Livebox 的 DNS 會蓋掉,開了反而讓內網解析變慢。

現在想問的是:你們在法國用 Livebox 或 Freebox 的時候,是怎麼處理 subnet router 那台的位址穩定性?釘死 IP 還是有更好的做法,例如用 MAC 綁定或是在路由器上做 reservation?我目前是釘死加 pool 避開,但總覺得還是有點土法煉鋼。

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

0 条评论

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

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