Iptables
在 openvz 上執行的 OpenVPN 伺服器。如何在沒有偽裝的情況下編寫 iptables 規則?
我正在使用 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 盒子。