重新搭建博客以及解决从 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 版本的人时,发现对方竟然是在我仓库里提过 issue 的人。

这世界还真是小啊。

ConoHa VPS 变得无法访问网络

接着,突然出了问题。

似乎是发生了 Path MTU Black hole 问题。真的很奇怪,像 WireGuard 这种需要 UDP 通信的,或者 DNS 服务器之类的都能访问,但需要 TCPSSHHTTP 通信全都挂了。

由于 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 和我家网络环境的默认数据包大小是 1500TCP 通信也会自动妥善处理,但我不明白为什么这个月突然在 ConoHa VPS <-> Starlink 之间发生了这种情况。

如果原本 Starlink 的 CGNAT 就有问题,按理说应该更早就会出现问题,但这现象实在太奇怪了,让我一直感到很困惑。

Related Posts