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

Ric*_*ich 6 iptables openvpn openvz

我正在将一个在 openvz 上运行的 VPS 配置为使用 tun 接口的 OpenVPN 服务器。

我在使用 iptables 规则时遇到了一些麻烦,因为 MASQUERADE 不可用。

如果 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
Run Code Online (Sandbox Code Playgroud)

但是,鉴于我无法使用 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
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*pro 6

如果您的全球 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
Run Code Online (Sandbox Code Playgroud)

用虚拟机的实际公共 IP 替换 1.2.3.4...此外,我希望 eth0 是 veth0 或 venet0,因为它是一个 OpenVZ 框。