我正在使用 tun 接口将在 openvz 上运行的 VPS 配置为 OpenVPN 服务器。
由于 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 提供的解决方案。以下是对我有用的规则:
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地址。
答案1
如果您的全局 IPv4 地址经常更改(例如在 ADSL 上),您实际上只需要 MASQUERADE,否则,SNAT 通常是更好的选择。
不要使用 MASQUERADE 规则,而是使用 SNAT,如下所示:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 1.2.3.4
将 1.2.3.4 替换为 VM 的实际公共 IP...此外,由于它是一个 OpenVZ 盒,我希望 eth0 是 veth0 或 venet0。