NAT 伪装成 L2TP/IPSec 连接

NAT 伪装成 L2TP/IPSec 连接

我正在尝试创建两个网络(使用 Debian 服务器):

  • 第一个旨在以正常方式传递数据包(到我的 ISP)。
  • 第二个旨在通过我在启动时建立的 L2TP/IPSec VPN 连接传递数据包。

我当前的拓扑是:

  • eth0连接到我的 ISP 路由器:(192.168.1.0/24)
  • eth1(10.0.0.1)连接到我的局域网(10.0.0.0/16)
  • eth1:1(10.1.0.1)已连接到我的局域网(10.1.0.0/16)
  • ppp0我的 L2TP/IPSec 连接

如果客户端使用 10.0.0.1 作为路由器,则通过 eth0 访问,如果客户端使用 10.1.0.1 作为路由器,则通过 ppp0 访问。因此,为了实现这一点,我创建了以下 2 条 IPTables 规则:

  • iptables -A POSTROUTING -t nat -o eth0 -s 10.0.0.0/16 -j MASQUERADE
  • iptables -A POSTROUTING -t nat -o ppp0 -s 10.1.0.0/16 -j MASQUERADE

第一个网络 (10.0.0.0/16) 运行良好,nat 伪装效果很好。但对于第二个网络 (10.1.0.0/16),它根本不起作用。

我确信 ppp0 正在运行,因为如果我将服务器上的默认路由更改为使用 ppp0 地址,则会traceroute google.com显示我正在通过 VPN。

我的问题是:为什么它不能与 nat 一起工作?

答案1

您的问题很可能来自于 IPSec 隧道封装数据包的加密。您需要目标和源标头才能使 Natting 正确转发数据包,但是 IPSec 隧道封装了这些数据包并对其进行加密,这使得您的路由器无法引导流量。

根据您的路由器型号和构造,有一些常见的解决方案。思科硬件可以通过以下方式解决这个问题:访问控制列表

参考文献: VPN 和 Natting 详解

答案2

我怀疑你的路由规则有问题。你需要指定哪些目标地址从哪些接口出去。目前可能所有路由都只是从默认网关出去。路由完成后才会应用这些 POSTROUTING 规则。

相关内容