CentOS 7のopenvpn with firewalld を実行しています。パブリック(デフォルト)ゾーンでマスカレードを有効にしましたが、正常に機能します。ただし、ローカルホスト/ 127.0.0.1でサービスを実行する必要がある場合があり、マスカレードがそれを台無しにしています。サービスは127.0.0.1に適切にバインドされますが、それに接続しようとするクライアントコードは、宛先IPアドレス127.0.0.1を、サーバーがリッスンしていないeth0のIPアドレスにマッピングしているようです(127.0用に構成されています)。 .0.1のみ)。
マスカレードを特定のサブネットのみに制限して、openvpnが引き続き機能するようにするにはどうすればよいですか?
私の質問を言い表す別の方法:ループバックアドレスのマスカレードを防ぐにはどうすればよいですか?
私が持っていたいくつかのアイデアは、どうすればいいのかわからない(または何かを壊さずにやる):
私は解決策を見つけました:
external
interfaces: eth0
masquerade: yes
internal
interfaces: tun0
masquerade: no
public (default)
interfaces: # not used
masquerade: no
trusted
interfaces: lo
masquerade: no
これが機能するためには、lo
がtrusted
ゾーンにあり、tun0
がinternal
ゾーンにあり、eth0
がexternal
ゾーンにあることを明示的に宣言する必要がありました。それを行うために、私は(例えば)を使用しました:
firewall-cmd --permanent --zone=external --add-interface=eth0
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --zone=trusted --add-interface=lo
firewall-cmd --reload
eth0
の場合、再起動後も機能し続けるには、ZONE="external"
を/etc/sysconfig/network-scripts/ifcfg-eth0
に追加する必要もありました。これは他のインターフェースでは必要ありませんでした。
trusted
ゾーンとinternal
ゾーンで開いている実際のサービス/ポートは、デフォルトのままにしました。緊急時(更新によってeth0
インターフェイスの名前が変更された場合など)に備えて、デフォルトゾーン(public
)にssh(デフォルト)が設定されていることを確認し、公開するサービスをexternal
ゾーンに追加しました。
masquerade
は、デフォルトでexternal
ゾーンではすでにオンになっており、その他のゾーンではオフになっています。
この設定はfirewalld-0.3.9-14.el7.noarchで機能します除外するためにそれらを別々のゾーンに配置する必要がある理由がわかりませんマスカレードからのループバックインターフェイス(マスカレードをオンにすると、ルールが設定されます:-A POST_external_allow ! -i lo -j MASQUERADE
、これで十分に見えますが、私は専門家ではありません)。ただし、 このバグ が関連している可能性があり、この問題は将来のバージョンで修正される可能性があることがわかりました。