Iptables

在 openvz 上執行的 OpenVPN 伺服器。如何在沒有偽裝的情況下編寫 iptables 規則?

  • August 29, 2018

我正在使用 tun 介面將在 openvz 上執行的 VPS 配置為 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

但是,鑑於我無法使用 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 地址。

如果您的全球 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

用虛擬機的實際公共 IP 替換 1.2.3.4 ……另外,我希望 eth0 是 veth0 或 venet0,因為它是一個 OpenVZ 盒子。

引用自:https://serverfault.com/questions/307059