自己的简单VPN的数据包封装

Packets incapsulation for own simple VPN

我想在 Linux 上用 C 语言实现我自己的非常简单的 VPN。为此,我将捕获 IP 数据包,修改它们并转发。修改包括加密、身份验证和 IPSec 中的其他内容。我的问题是我应该以某种方式处理数据包的大小还是自动处理?我知道它的最大大小是 65535 - 20(对于 header),但根据 MTU,它较小。我认为这是因为 NAT-T 的加密负载 "incapsulated into UDP" 比 IP 数据包的 "normal payload" 大得多。

嗯,我发现实际上有两种方法可以解决这个问题:

1) 我们可以通过设置 DF 标志来发送大数据包,告诉我们要分片数据包。但是在这种情况下数据包可能会丢失,因为并非所有devices/etc都支持数据包分片

2) 我们可以自动计算主机之间的最大 MTU,拆分它们并发送。另一方面,我们将所有这些数据包放在一起并恢复它们。这可以通过为此目的实施我们自己的 "system" 来完成。

有关 IP 数据包分段和重组的更多信息,您可以阅读 here