外網突然連唔到 NAS?三步查清 ISP 有冇將你轉咗去 CGNAT
3C 產品

外網突然連唔到 NAS?三步查清 ISP 有冇將你轉咗去 CGNAT

圖片:via XDA Developers — https://www.xda-developers.com/isp-quietly-put-me-behind-cgnat-broke-half-my-home-lab-before-noticed/
TechLab 編輯部(譯)·

對照 WAN IP、共享位址同 traceroute 路徑,逐步排除路由器問題

XDA 作者 Shekhar Vaidya 最近遇到一個幾典型嘅 home server 怪症:屋企上網冇事,Jellyfin 喺內網亦照開到,但經手機 hotspot 由外面連入去就一直 timeout。佢查過 server、反向代理、路由器防火牆同 port forwarding,設定全部冇郁過,最後先發現 ISP 已經將條線放咗喺 CGNAT 後面。

呢件事值得講,因為 CGNAT 出事時,表面睇落最似自己設定壞咗。不過原文只係作者個人經歷,冇交代 ISP、地區同上網方案,亦冇證據顯示某類供應商普遍會靜靜轉客戶。香港用家遇到相似情況,都要逐步排除,唔好單靠一個 timeout 就落判斷。

第一步:對照路由器 WAN IP 同街外見到嘅 IP

登入路由器管理頁,搵 Internet、WAN 或 IPv4 Status,再用一個查 IP 網站睇街外見到嘅 public IPv4。兩邊要同一時間查,而且要確定比較緊 IPv4;雙 WAN、VPN、IPv6 或瀏覽器代理都可能搞亂結果。如果兩個位址完全一樣,你多數仍然直接攞到公網 IPv4,問題應該先向防火牆、DDNS、反向代理同 server 服務查。

如果兩邊唔同,代表中間仲有一層位址轉換,但未足以證明係 CGNAT。用緊 ISP modem 加自己路由器時,WAN 位址可能係 192.168.x.x10.x.x.x172.16.0.0172.31.255.255,呢種情況好多時係 double NAT。可以將 ISP modem 改做 bridge mode,或者喺兩部機都設 port forwarding;改之前記低原有設定,亦要確認電視或電話服務會唔會受影響。

Cloudflare Tunnel 點樣由內部 server 主動連去 Cloudflare,再接收外部請求嘅流程圖

圖片:Cloudflare

第二步:見到 100.64.0.0/10,CGNAT 機會就好高

RFC 6598 將 100.64.0.0/10 留畀供應商做共享位址,實際範圍係 100.64.0.0100.127.255.255。如果路由器 WAN IP 落喺呢段,而查 IP 網站顯示另一個公網位址,已經係相當有力嘅 CGNAT 線索。再跑 traceroute 或 Windows 嘅 tracert,早段路徑亦見到共享位址,成組證據就比較完整。

不過供應商亦可能喺上游使用傳統私人位址,所以冇見到 100.64.x.x 都唔代表一定冇 CGNAT。反過來講,單靠 port checker 顯示 closed 同樣證明唔到咩:服務冇 listen、主機防火牆擋住、測錯 TCP/UDP,結果都會一樣。最穩陣係將 WAN IP、外部 IPv4、traceroute 結果一齊交畀 ISP,直接問條線有冇共享 IPv4,同埋可唔可以申請 public IPv4。

點解 port forwarding 突然完全冇反應

一般屋企路由器攞住公網 IPv4 時,port forwarding 可以將指定連接送去 NAS 或 VPN server。CGNAT 就多咗 ISP 控制嘅 NAT 層,多個客戶共用一個公網 IPv4;你只改到自己路由器,改唔到供應商嗰層,所以街外送入嚟嘅封包搵唔到你部機。DDNS 只會更新名稱指向邊個 IP,佢唔會幫你穿過 CGNAT

呢個亦解釋到點解上網、串流同雲端備份仍然正常:呢類連線由屋企向外開,CGNAT 可以自動建立映射。受影響嘅主要係外面主動連入屋企,包括 NAS、閉路電視、傳統 WireGuard/OpenVPN server、遊戲 server、遠端桌面同自建網站。ISP 換咗動態公網 IP 則係另一回事;只要路由器當刻仍攞住公網位址,更新 DDNS 後 port forwarding 應該可以繼續用。

最直接嘅處理:先問 public IP,未必要 static IP

如果要畀任何裝置直接連入,先問 ISP 可唔可以免費退出 CGNAT,或者提供 動態 public IPv4。好多用途配合 DDNS 已經夠,未必要每月畀錢買 static IP;後者主要方便 IP 白名單、固定 DNS 紀錄同公司 VPN。申請前要問清楚係真正獨享公網位址、收費幾多、有冇 port 限制,同埋轉方案後會唔會改合約期。

原生 IPv6 都可以避開 IPv4 CGNAT,但連線兩邊都要支援 IPv6,DNS 要有正確 AAAA 紀錄,家中 prefix 變動時亦要更新。IPv6 裝置可以有全球可路由位址,唔代表應該拆走防火牆;只開實際用到嘅 inbound rule,NAS 管理頁、SSH 同閉路電視介面唔好直接擺上網,否則只係由 NAT 問題變成保安問題。

私人存取揀 Tailscale,公開網頁先考慮 Cloudflare Tunnel

只係自己手機、手提電腦同屋企設備互通,Tailscale 通常最省事。每部裝置先向外建立連線,成功時裝置會直接互連,遇到較難處理嘅 NAT 就經加密 relay 傳送,所以冇 public IP 亦用到。代價係裝置要裝 client、登入驗證同連線 metadata 都要交畀第三方控制服務處理;經 relay 時,速度同延遲亦可能差過直接連線,傳大型影片前最好先睇 tailscale status 顯示 direct 定 relay。

Cloudflare Tunnel 就較適合公開 Web app:屋企嘅 cloudflared 主動連去 Cloudflare,路由器毋須開 inbound port,再配 Cloudflare Access 做登入限制。不過流量同 TLS 都會經 Cloudflare;服務一故障、帳戶設錯,或者日後改收費,都可能影響使用。Jellyfin 呢類大量影片傳送亦要小心,Cloudflare 現行條款限制免費 CDN 傳送站外影片同大量檔案,唔應該當免費影片中轉站用。

如果 NAS、閉路電視或公司 VPN 原本靠 port forwarding,最好而家就記低正常時嘅 WAN IP 類型,再用手機數據做一次街外連線。日後突然斷線,先對照兩個 IPv4 位址,再查路徑同 ISP 方案,通常快過由頭重設成套 home server。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook