运行在openvz上的OpenVPN服务器。 如何写没有伪装的iptables规则?

我正在configuration一个使用tun接口作为OpenVPN服务器在OpenVZ上运行的VPS。

由于MASQUERADE不可用,我在iptables规则上遇到了一些麻烦。

如果MASQUERADE可用,我会写如下的iptables规则:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE 

但是,鉴于我无法使用MASQUERADE,我怎样才能改写这些规则使用SNAT或DNAT呢?

提前致谢

————–编辑—————

感谢Olipro的解决scheme。 以下是适用于我的规则:

 iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source 1.2.3.4 

其中1.2.3.4是openvpn服务器的公共ip地址。

如果您的全球IPv4地址经常变化(例如在ADSL上),您实际上只需要MASQUERADE,否则SNAT通常更可取。

使用SNAT而不是MASQUERADE规则,如下所示:

 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 1.2.3.4 

用虚拟机的实际公共IPreplace1.2.3.4 …我也希望eth0是veth0或者venet0,因为它是一个OpenVZ盒子。