OpenVPN和Linux NATing

我有一个关于OpenVPN和Linux NATing的问题。

OpenVPN服务器(10.0.0.1)< – >(10.0.0.9)OpenVPN客户端(192.168.0.1)< – >(192.168.0.0/24)内部LAN

我在客户端上build立了一个基本的iptables规则,这个规则是/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 。 有了这个,我可以从服务器ping到内部局域网。 但是,当我查看服务器端的tcpdump时,我看到了内部LAN IP。 我需要查看OpenVPN服务器的10.0.0.9 IP分类的原因,所以我知道它去了哪里。 有没有一种方法可以对返回stream量进行另一个NAT,所以当服务器看到ping响应时,它来自10.0.0.9 IP而不是192.168.0.X IP?

谢谢你的帮助。

编辑 – 我以为我可以做这样的事情,但似乎并没有工作。

 /sbin/iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source 10.0.0.9 

请指定您要ping的地址以及从哪个主机。

我假定你从10.0.0.1 ping 192.160.0.2(或192.160.0.0/24中不同于192.160.0.1的任何其他主机),并且你希望响应来自10.0.0.9。 这是不正确的。 IP协议不能以这种方式工作。 🙂

如果您未在客户端上为tun0configuration静态IP,则必须使用MASQUERADE

 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o tun0 -j MASQUERADE 

否则,你可以使用SNAT

 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o tun0 -j SNAT --to-source 10.0.0.9