博客重建以及解决 Starlink 无法与 ConoHa VPS 进行 TCP 通信的问题
你好,我是无能。
好久没有更新了。或者说,一些 2025 年下半年的文章丢失了,直到现在才更新。
Codex
最近我开始使用 Codex,开发体验太好了,我完全陷入其中了。
因此,我将博客从一直不满意的 Lume CMS 使用 Codex 进行了重新架构。
虽然可以用 SSG 的 Markdown 编写很好,但是我大部分时间都是从浏览器更新的,我意识到最终没有必要特意使用我平时用的编辑器 vim 来编写。
特别是图片方面有问题,让我没有轻松更新博客的动力。
代码在这里公开了,但目前充满了 bug。
GitHub - haturatu/alleycat: cms
似乎也可以重新开始维护了,所以我又开始维护了,没想到在 Reddit 上回复了一个正在寻找 fork 目标的人,那个人竟然是之前在我的仓库里提交过 issue 的人。
真是世界真小啊。
ConoHa VPS 网络无法连接
然后,突然出现了问题。
似乎发生了 Path MTU Black hole 的情况。这真的很奇怪,像 WireGuard 这种需要 UDP 通信的服务,以及 DNS 服务器等都可以访问,但是所有需要 TCP 的通信,比如 SSH 和 HTTP,都无法工作。
于是,由于 ConoHa VPS 本身是托管在 FreeBSD 上的,我进行了一番调查,看到有信息说可以通过使用包过滤器 ( pf ) 的 scrub 功能来规范化数据包,从而解决问题,于是进行了如下设置。
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
~~~这样一来,上行和下行流量都得到了规范化,数据包的段大小将变为 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 就有问题,那么这个问题应该更早发生才对,但这实在是一个太奇怪的现象,我一直感到困惑不解。