OpenVPN 服务器在 openvz 上运行。如何编写不使用伪装的 iptables 规则?

OpenVPN 服务器在 openvz 上运行。如何编写不使用伪装的 iptables 规则?

我正在使用 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。

相关内容