重新製作部落格與解決從 Starlink 到 ConoHa VPS 僅 TCP 通訊無法到達的問題

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

你好,我是無能。

好久沒更新了。或者該說,2025 年後半部分的文章消失了一些,就變成現在這樣了。

Codex

最近開始使用 Codex,開發體驗實在太棒了,完全陷入其中。

因此,我利用 Codex 對一直以來感到不滿意的 Lume CMS 進行了部落格架構重構。

雖然能用 SSG 的 Markdown 撰寫很不錯,但因為大多是透過瀏覽器更新,我才發現到頭來根本沒必要特地用平常慣用的編輯器 vim 來寫。

特別是圖片處理方面的問題,讓我提不起勁輕鬆更新部落格……

程式碼公開在這裡,但目前還滿是 bug。

GitHub - haturatu/alleycat: cms

GitHub - haturatu/ViMusic

似乎也能恢復維護了,所以又開始動手維護;沒想到在 Reddit 回覆尋找 fork 對象的人時,對方竟然是在我的儲存庫(repository)開過 issue 的人。

這世界還真是小呢。

無法連線至 ConoHa VPS 網路

接著,突然發生了問題。

看來是發生了所謂的 Path MTU Black hole。真的很神祕,像 WireGuard 這種需要 UDP 通訊的,或是 DNS 伺服器等都能連上,但需要 TCPSSHHTTP 通訊卻全都掛了。

由於 ConoHa VPS 本身是用 FreeBSD 託管的,查了一下發現,似乎可以利用封包過濾器 ( pf ) 的 scrub 功能進行封包正規化(normalization)來解決問題,於是進行了如下設定:

set skip on lo
set block-policy drop
exsrv1 = dummy
insrv1 = dummy
insrv2 = dummy
wireguard_clients="{ dummy, dummy, dummy }"
wanint="vtnet0"
wg_ports="{51820}"
scrub in on $wanint all random-id max-mss 1360
scrub out on $wanint all random-id max-mss 1360
~~~

這樣一來,上傳和下載都會被正規化,封包的分段大小(segment size)會變成 1360

神祕的點

關於發生原因,有一種推測是 Starlink 的 CGNAT 出問題了?

$ mtr -T -P 443 -n -r -c 2 163.44.113.145
Start: 2026-02-24T00:13:53+0900
HOST: thepassenger                Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.1.1                0.0%     2    1.4   1.5   1.4   1.6   0.1
  2.|-- 100.64.0.1                 0.0%     2   19.3  19.4  19.3  19.4   0.1
  3.|-- 172.16.251.26              0.0%     2   20.1  23.4  20.1  26.8   4.8
  4.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  5.|-- 206.224.70.186             0.0%     2   25.9  22.3  18.8  25.9   5.0
        206.224.70.182                   
  6.|-- 210.171.225.229            0.0%     2   23.0  22.7  22.4  23.0   0.4
  7.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  8.|-- 172.71.208.15              0.0%     2   24.9  23.1  21.3  24.9   2.5
        162.159.109.42                   
  9.|-- 172.71.4.38                0.0%     2   21.9  23.3  21.9  24.8   2.1
        172.64.212.62                    
 10.|-- 172.71.4.35                0.0%     2   63.3  43.8  24.2  63.3  27.7
        172.70.221.227                   
 11.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
 12.|-- 172.70.165.3               0.0%     2   44.7  39.8  35.0  44.7   6.9
 13.|-- 150.95.7.204               0.0%     2   33.4  34.0  33.4  34.6   0.8
 14.|-- 150.95.7.139               0.0%     2   39.2  50.3  39.2  61.4  15.7
 15.|-- 150.95.7.147               0.0%     2   36.6  37.2  36.6  37.9   0.9
 16.|-- 163.44.113.145             0.0%     2   34.2  35.8  34.2  37.5   2.3
$ tracepath -n -m 30 163.44.113.145
 1?: [LOCALHOST]                      pmtu 1500
 1:  192.168.1.1                                           1.347 毫秒 
 1:  192.168.1.1                                           1.293 毫秒 
 2:  100.64.0.1                                           53.580 毫秒 asymm  3 
 3:  172.16.251.26                                        37.025 毫秒 
 4:  206.224.70.208                                       34.552 毫秒 (不完整的路由器回傳了損壞的資料) asymm  7 
 5:  206.224.70.184                                       37.307 毫秒 
 6:  210.171.225.229                                      34.518 毫秒 
 7:  無回應
8: 172.71.4.43 34.303 毫秒 9: 162.159.109.87 39.922 毫秒 10: 162.159.109.55 33.535 毫秒 11: 無回應 12: 172.70.165.3 56.395 毫秒 asymm 11 13: 150.95.7.204 46.647 毫秒 asymm 10 14: 150.95.7.139 66.797 毫秒 asymm 11 15: 150.95.7.147 46.542 毫秒 asymm 12 16: 無回應 17: 無回應 18: 無回應

原本的印象是,即便 Starlink 和我家網路環境的預設封包大小是 1500,TCP 通訊也會自動處理妥當,但我不明白為什麼這件事會在這個月突然發生在 ConoHa VPS <-> Starlink 之間。

如果原本 Starlink 的 CGNAT 有問題,按理說應該更早就會發生才對,但這現象實在太過不可思議,讓我一直感到很困惑。

Related Posts