NAT伪装成L2TP / IPSec连接

我试图创build两个networking(使用debian服务器):

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

我目前的拓扑是:

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

如果一个客户端使用10.0.0.1作为路由器,他通过eth0,如果客户端使用10.1.0.1作为路由器,他通过ppp0。 所以,为了达到这个目的,我创build了这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

第一个networking(10.0.0.0/16)运行良好,nat假面舞会效果很好。 但是对于第二个(10.1.0.0/16),它根本不工作。

我确定ppp0正在工作,因为如果我更改服务器上的默认路由以使用ppp0地址, traceroute google.com显示我正在通过VPN。

我的问题是:为什么它不是与NAT的工作?

我怀疑你的路由规则有问题。 你需要指定哪个目的地址出去哪个接口。 它可能都只是当前的默认网关。 这些POSTROUTING规则在路由完成后得到应用。

您的问题很可能来自您的IPSec隧道封装您的数据包的encryption。您需要NATting的目标和源头来正确地转发您的数据包,但是您的IPSec隧道封装这些数据包并encryption它们,使您的路由器无法指挥交通。

根据您的路由器型号和构build有一些共同的解决scheme。 思科硬件可以通过访问控制列表来解决这个问题

参考文档: VPN和Natting解释