SNAT通过Racoon IPSec VPN

我试图将连接到我的Ubuntu盒子(我将称之为“主机”)的设备(我称之为“目标”)的设备路由到远程办公室的服务器。

主机使用通过名为efix的NIC连接的Racoon IPSec VPN。 这将创build一个名为efix:0的别名IF,其IP地址为192.168.190.132 。 它能够到达服务器。

主机和目标之间的链接是以太网链接,在主机的IF eusb上使用IP地址10.0.0.1 ,在目标上使用IF eth0上的10.0.0.2

我已经设置了以下路由和iptables条目:

  • 估计的正好:

     10.0.0.0 * 255.255.255.0 U 0 0 0 eth0 default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0 
  • 主持人:

     echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 192.168.190.132 iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT 

使用Wireshark监视一个HTTP GET,我可以看到来自目标的SYN数据包一直到达服务器,但服务器的SYNACK数据包在主机上停止,并且不会被转发到目标。 我在这里错过了什么? SNAT是不是应该跟踪连接?

您的问题可能是您的转发规则依赖SNAT已经发生的返回数据包。 当你说'iptables -A FORWARD -d 10.0.0.0/24'时,它依赖于已经通过NAT改变的stream量,这是转发之后发生的。当初始数据包进入时,它具有NAT的IP地址192.168.190.32)作为目的地。

可能你想要的是这样的规则:

 iptables -A forward -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A -i efix -j ACCEPT iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.190.132 

第一个规则允许与现有连接相关的stream量,如来自“主机”的SNATed连接的返回stream量。 第二个接受来自“主机”的stream量(如果我理解你的布局,“主机”将stream量传递到你的NATing防火墙的“etho0”接口,对吧? 您可能还想用“-d 192.168.190.0/24”限制该规则,具体取决于您的具体需求。

最后一条规则是你已经发布的内容,其中说SNAT的stream量。