From efa7e25f66d78d4b46ca95abdb4d60c03ed73ecb Mon Sep 17 00:00:00 2001 From: RRRosmontis Date: Thu, 10 Sep 2026 09:49:19 +0800 Subject: [PATCH] =?UTF-8?q?server=5Fconfig:=20=E6=96=B0=E5=A2=9E=20PMTUD?= =?UTF-8?q?=20=E9=BB=91=E6=B4=9E=E7=BC=93=E8=A7=A3(tcp=5Fmtu=5Fprobing)?= =?UTF-8?q?=E4=B8=8E=20REALITY=20=E5=85=AC=E9=92=A5=E6=8E=A8=E5=AF=BC?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E8=A6=81=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2.4 节:客户端路径 PMTUD 黑洞导致「TCP 通但 TLS 握手稳定超时」, 节点开启 net.ipv4.tcp_mtu_probing=1(本次已在 us/ru/aq 落实,jp 原有) - 6.3 节:public_key 必须由 private_key 做 X25519 推导逐字符验证,禁止手抄 (手抄错 1 字符曾致全节点 REALITY 握手失败) - 验证清单补充 mtu_probing 检查项 --- server_config/README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/server_config/README.md b/server_config/README.md index fadf5ed..404206f 100644 --- a/server_config/README.md +++ b/server_config/README.md @@ -112,6 +112,27 @@ timedatectl set-timezone Asia/Shanghai apt install -y chrony && systemctl enable --now chrony ``` +### 2.4 PMTUD 黑洞缓解(tcp_mtu_probing) + +**症状**:部分客户端网络上出现"TCP 能连上、但 TLS 握手稳定超时" +(如 `_ssl.c:1011 handshake operation timed out`),而服务器从其他网络探测一切正常。 +原因是客户端↔服务器路径上某跳 MTU 变小且 ICMP Fragmentation Needed 被过滤 +(PMTUD 黑洞),服务器发出的满尺寸大包永远到不了客户端。 + +开启 RFC 4821 PLPMTUD,让服务器在探测失败后自动降低 MSS 恢复通信。 +写入 `/etc/sysctl.d/99-mtu-probing.conf`: + +```conf +net.ipv4.tcp_mtu_probing = 1 +``` + +```bash +sysctl --system +sysctl net.ipv4.tcp_mtu_probing # 期望输出: 1 +``` + +> 只影响命中黑洞的连接,正常连接无感知,可安全全节点开启。 + --- ## 3. 伪装站点页面 @@ -252,6 +273,22 @@ sing-box generate uuid > 私钥只放服务端配置;公钥给客户端订阅。UUID/short_id 全节点一致。 +**公钥必须推导验证,禁止手抄。** 订阅/节点配置里的 `public_key` 与服务端 +`private_key` 必须严格配对(X25519 推导),曾发生手抄错一个字符导致全节点 +REALITY 握手失败(客户端报 `reality verification failed`)的事故。改配置后验证: + +```bash +python3 - << 'EOF' +import base64 +from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey +from cryptography.hazmat.primitives import serialization +priv = base64.urlsafe_b64decode('' + '==') +pub = X25519PrivateKey.from_private_bytes(priv).public_key().public_bytes( + serialization.Encoding.Raw, serialization.PublicFormat.Raw) +print(base64.urlsafe_b64encode(pub).decode().rstrip('=')) # 应与下发的 public_key 逐字符一致 +EOF +``` + --- ## 7. mtg(MTProto 代理) @@ -336,6 +373,7 @@ systemctl start nginx # 4. nginx(最后,依赖证书/伪装 ```bash # BBR sysctl net.ipv4.tcp_congestion_control # => bbr +sysctl net.ipv4.tcp_mtu_probing # => 1(PMTUD 黑洞缓解,见 2.4) # sing-box sing-box check -c /etc/sing-box/config.json