![使用 IPtables for IPsec 取消全锥 NAT](https://linux22.com/image/203851/%E4%BD%BF%E7%94%A8%20IPtables%20for%20IPsec%20%E5%8F%96%E6%B6%88%E5%85%A8%E9%94%A5%20NAT.png)
我目前有一个托管在 Oracle Cloud 中的免费 VPS。这台机器位于所谓的“虚拟云网络”中,它只是一个地址范围为 10.0.0.0/8(准确地说是 10.0.0.19)的虚拟 LAN。
为了与现实世界通信,它有一个公共的专用 IPv4,假设它是 203.0.113.1。网关应用全锥 1:1 NAT,因此发送到此 203.0.113.1 IP 的每个数据包,无论协议和端口(如果适用)如何,都会转发到计算机。
然而,此 NAT 意味着目标 IP 被替换为 10.0.0.19,而不是实际的公共 IP 203.0.113.1。对于大多数不关心目标 IP 的服务(例如 HTTPS、SSH 等)来说,这不是问题。
然而对于 IPsec 来说,这是一个问题。 IPsec 期望计算机分配一个可公开路由的 IP 地址,并且它使用连接请求的目标 IP 来报告客户端连接到的位置。这会导致客户端尝试连接到 10.0.0.19,当然会失败。
是否可以创建某种虚拟适配器(例如环回适配器),并将来自互联网的数据包转发到它,将 10.0.0.19 IP 替换为真实 IP 203.0.113.1,以便 IPsec 工作?
答案1
看来我是在转移注意力。
在 Android 中,我当时使用的系统由于无法访问桌面计算机,问题表现为尝试连接的连接,在该过程中停留大约一分钟,然后失败。因此,考虑到错误发生需要多长时间,我认为这归因于重试连接和超时。
然而,在 Windows 计算机上,系统日志中会立即抛出错误 13801,这是由于计算机不信任证书导致的。
使用 Wireshark 进行的 MitM 证明 OpenIKED 守护程序未正确传输中间 Let's Encrypt 使用的内容,因此机器不信任它。