我正在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盒子。