server_config: 新增 PMTUD 黑洞缓解(tcp_mtu_probing)与 REALITY 公钥推导验证要求
- 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 检查项
This commit is contained in:
@@ -112,6 +112,27 @@ timedatectl set-timezone Asia/Shanghai
|
|||||||
apt install -y chrony && systemctl enable --now chrony
|
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. 伪装站点页面
|
## 3. 伪装站点页面
|
||||||
@@ -252,6 +273,22 @@ sing-box generate uuid
|
|||||||
|
|
||||||
> 私钥只放服务端配置;公钥给客户端订阅。UUID/short_id 全节点一致。
|
> 私钥只放服务端配置;公钥给客户端订阅。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('<REALITY_PRIVATE_KEY>' + '==')
|
||||||
|
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 代理)
|
## 7. mtg(MTProto 代理)
|
||||||
@@ -336,6 +373,7 @@ systemctl start nginx # 4. nginx(最后,依赖证书/伪装
|
|||||||
```bash
|
```bash
|
||||||
# BBR
|
# BBR
|
||||||
sysctl net.ipv4.tcp_congestion_control # => bbr
|
sysctl net.ipv4.tcp_congestion_control # => bbr
|
||||||
|
sysctl net.ipv4.tcp_mtu_probing # => 1(PMTUD 黑洞缓解,见 2.4)
|
||||||
|
|
||||||
# sing-box
|
# sing-box
|
||||||
sing-box check -c /etc/sing-box/config.json
|
sing-box check -c /etc/sing-box/config.json
|
||||||
|
|||||||
Reference in New Issue
Block a user