接獲投訴,抱怨家裡網路不穩,時有偏慢或瞬斷情事,身為寒舍 APNIOC(亞太地區網路基礎建設維運中心)主任(蛤?),立即指派首席工程師(誰?)進行調查,以示對此事的重視。

網路慢、網路不穩都是主觀跟感覺,沒有數據哪來科學?因此,第一步便是要蒐集客觀證據,讓數字說話,究竟是網路本身真有問題,亦或一切該怪手機怪筆電怪 PC,先有資訊才能推理。

於是我想在家裡建個 24 小時網路品質監控服務,持續蒐集網路封包延遲、下載速度的狀況,遇到問題時回頭查詢當時的數據,是否真的出現變慢或中斷,至少就能釐清是否是無線路由器或對外寬頻的問題。

迷你家用伺服器前陣子剛升級 OS 喜獲重生,監控網路品質的重責大任就由他一肩扛下了。

thumbnail
念其低薪工時超長還堅守崗位七年,特拾荒把報廢電源供應器改裝成散熱風扇,改善其工作環境(日常 CPU 溫度約 42 度,額外降溫其實有點多餘,呵),以免被說是慣老闆。 (笑)

研究了一下,網路品質監控的開源專案最有名的當屬 SmokePing,GSLin 大有個台灣各單位 SmokePing 清單,他自己也架了一個 SmokePing 站台監測世界各大 CDN、DNS、ISP、Hosting、雲端服務,以及海內外知名網站(Facebook、Github、Slack、104、PCHome、KKBox...):

而要觀測我家的聯外網路品質,架個地端 SmokePing 即可。SmokePing 有 Docker,用以下的 docker-compose.yaml 可以輕鬆建一個:

services:
  smokeping:
    image: lscr.io/linuxserver/smokeping:latest
    container_name: smokeping
    network_mode: bridge
    security_opt:
      - no-new-privileges:true
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Taipei
    volumes:
      - ./config:/config
      - ./data:/data
    ports:
      - 8086:80
    restart: unless-stopped

以上設定會對映 docker-compose.yaml 所在目錄下的 config 跟 data 子資料夾 (建議先手動建好,確認權限正確),使用 docker compose up 執行初始化,SmokePing 會在 config 目錄產生範例設定檔,此時可 Ctrl-C 結束,再手動調整探針。

範例設定包含一大堆知名 DNS 及網站,對我來說有點太多,SmokePing 的設定語法即多又雜,從頭寫起很累,但修改刪掉多餘的不難。我修改了 config/Targets,只留下 Facebook、YouTube、Google,Google / Cloudflare DNS,再補上中華電信 DNS 做為主要指標。SmokePing 的探針種類繁多,涵蓋 ICMP、DNS、HTTP/HTTPS、SMTP、curl、SSH、MySQL... 等,但用 Ping 及 DNS 查詢應該就夠有代表性了,未來有需要再加。

*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of WORKS Company. \
         Here you will learn all about the latency of our network.

+ InternetSites

menu = Internet Sites
title = Internet Sites

++ Facebook
menu = Facebook
title = Facebook
host = facebook.com

++ Youtube
menu = YouTube
title = YouTube
host = youtube.com

++ GoogleSearch
menu = Google
title = google.com
host = google.com

+ DNS
menu = DNS
title = DNS

++ GoogleDNS
menu = Google DNS
title = Google DNS 8.8.8.8
host = 8.8.8.8

++ CloudflareDNS
menu = Cloudflare DNS
title = Cloudflare DNS 1.1.1.1
host = 1.1.1.1

++ HiNetDNS
menu = HiNet DNS 
title = HiNet DNS 168.95.1.1
host = 168.95.1.1

+ DNSProbes
menu = DNS Probes
title = DNS Probes
probe = DNS

++ GoogleDNS
menu = Google DNS
title = Google DNS 8.8.8.8
host = 8.8.8.8
lookup = google.com

++ CloudflareDNS
menu = Cloudflare DNS
title = Cloudflare DNS 1.1.1.1
host = 1.1.1.1
lookup = google.com

++ HiNetDNS
menu = HiNet DNS 
title = HiNet DNS 168.95.1.1
host = 168.95.1.1
lookup = google.com

點選各標的可查詢詳細資料,以 Google PING 數據為例簡單說明:

在過去 3 小時內,每 300 秒從本主機發出 20 個 PING 到 Google DNS (8.8.8.8),平均與中位往返時間 (RTT) 約在 12–14 毫秒之間,未發現任何封包遺失,僅偶有短暫的抖動 (Jitter) 尖峰,但整體延遲波動範圍極小,網路品質穩定。

中央的綠線為中位數往返時間 (Median RTT),階垂直區塊表示上下 10–90 百分位範圍,深淺表示落在此區的數量,線的顏色則代表封包丟失數量,圖表下方有各顏色代表的數量。最理想狀況是灰階範圍很小(表示沒有忽快忽慢),線的顏色是綠色表示 0 丟失。

就醬,下回再接到網路品質不佳的投訴,就可以調閱記錄,判斷是無線路由器到寬頻這段有問題,還是客戶端設備自己的問題,用更科學的方式排除故障。


Comments

# by joker

居然是用軟路由,我也要來弄一個。 有沒有推薦配置呢?

# by Jeffrey

to joker, 我的迷你主機不是當路由器,主要是裝 Linux 跑一些 Docker 服務 (價格低廉,耗電不到 10W,CP 值破表)

# by ChrisTorng

自己不久前的訊息,提供參考: 對 GitHub (?) 下載緩慢問題超過兩個月,先前在家裡筆電下載影片 (非 YouTube) 及 WSL Ubuntu 裡要開啟 VSCode Insiders (經常需要下載) 慢到爆 (超過半小時到一小時以上),再多花了些時間查查。 發現有 [GitHub Debug](https://github-debug.com/ "https://github-debug.com/") 可以好好查 GitHub 網路各個節點速度。 git clone https 很快,git clone ssh 好像是認證不通,反正我也沒用。 下面測試各節點一堆,github.com 主網站 15Mbps OK,其他的各地多是個位數算還好,但 cloud.githubusercontent.com/github.githubassets.com 竟只有 0.1xMbps 最誇張,這些應該是放一些靜態資源,也就是我前面所遇到的問題。ping 它們的速度是 1xxms 也比 github 主站的 < 50ms 偏慢。 詢問 ChatGPT 說停用 IPv6/換 DNS 到 Cloudflare/Google,試了也沒變。我沒用過 VPN,看其他人說的是有效。 依 tracert 的結果,ChatGPT 說經過日本的快,而走到新加坡再往倫敦或阿姆斯特丹段 Fastly 歐洲節點的兩個就慢。 ChatGPT 對話 (包括原始測試結果) 可在[這裡參考](https://chatgpt.com/share/68f6d542-cffc-8002-91f8-34deef8e69dd "https://chatgpt.com/share/68f6d542-cffc-8002-91f8-34deef8e69dd")。 手機行動上網 (在室內訊號不算好) 測的結果,除了 avatars.githubusercontent.com 超過 30Mbps,其他的都在 1~4Mbps 間。而前述兩個並沒有特別糟。 看到 [台灣海纜動態地圖](https://smc.peering.tw/ "https://smc.peering.tw/")。就 VPN 後可以變快來說,應該是走了不同路由就變快。不知是否還有除 VPN 以外其他解法,或者完全就是中華電信自己的問題? ISP 應該有辦法決定走什麼路由,不要繞去歐洲吧? GitHub 是開發人員常用網站,一般網站也有些會依賴它的免費靜態資源。以往幾分鐘內的下載,現在要花約一百倍的時間...!? 若有使用 VPN 變快的,查得 cloud.githubusercontent.com/github.githubassets.com 的不同 IP 並提供出來,那我在 hosts 裡設定 IP 對應,是否就有可能繞過緩慢的歐洲節點了呢? [中華電信的 peering policy 導致的高延遲 - Mobile01](https://www.mobile01.com/topicdetail.php?f=507&t=6597095 "https://www.mobile01.com/topicdetail.php?f=507&t=6597095") 2022 年的文章了。這些互連的商業考量看不太懂。我只覺得先前沒這問題,大約是今年中左右才開始有似乎是 GitHub 相關網站明顯變慢的問題。如果這問題擺著不會被解決,可以猜測以後還會陸續有更多網站出現類似問題...

Post a comment