小编al.*_*al.的帖子

超过 PMTU 后,通过 IPSec(Linux/Strongswan)的 TCP 连接停止

我的一台服务器(“A”)的备份(通过 Bacula)通过 IPSec(Debian 测试中的 Strongswan)连接到存储守护进程(“B”),它们运行的​​时间没有完成 95%。显然发生的是:

  1. Bacula 打开到存储守护进程的 VPN IP 的 TCP 连接。(甲?乙)
  2. 由于内核设置net.ipv4.ip_no_pmtu_disc=0是默认设置的,因此在明文数据包中设置了 IP Don't Fragment 位。
  3. 当将数据包路由到 IPSec 隧道时,有效载荷的 DF 位被复制到 ESP 数据包的 IP 标头。
  4. 经过一段时间(通常大约 20 分钟)并发送多达几 GB 的数据后,会发送一个比之前的 ESP 数据包稍大的数据包。(甲?乙)
  5. 由于存储守护程序接口的 MTU 低于发送主机之一,因此沿途的路由器会向主机发送 ICMP 类型 3、代码 4(需要分段且未设置分段)错误。(一些路由器?A)
  6. 连接停止,出于某种原因,主机 A 将约 100 个空的重复 ACK 泛洪到 B(在约 20 毫秒内)。

(ICMP 数据包到达主机 A,并且没有阻止 ICMP 的 iptables 规则。)

发生这种情况的可能原因,我能想到的:

  • 内核错误 (Debian 3.13.7-1)
  • Linux 的 IPSec 实现故意忽略 PMTU 消息作为安全措施,因为它不受保护并且会影响现有的 SA。(根据RFC 4301 8.2.1似乎是有效的行为)
  • 必须对 PMTU 老化(RFC 4301 …

networking linux vpn ipsec strongswan

5
推荐指数
1
解决办法
3623
查看次数

标签 统计

ipsec ×1

linux ×1

networking ×1

strongswan ×1

vpn ×1