iptableとブリッジでNATを使用する

iptableとブリッジでNATを使用する

ファイアウォールでiptablesを使用してNATを設定するのに問題があります。

私のファイアウォールの設定は次のとおりです。

  • 私のゲートウェイとISPのゲートウェイの間に位置するレイヤ2透明ファイアウォール。
  • 両方のインターフェイスをbr0に接続しました。これら 2 つのインターフェイスは ISP 側では eno0、ローカルネットワーク側では eno1 です。
  • デフォルトでは、NATルールを除いてiptablesルールは設定されていません。

私のルールは次のとおりです。

root@firewall:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
root@firewall:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.50.1.0/24 -j SNAT --to-source xxx.195.142.205
root@firewall:~# iptables -t mangle -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

つまり、問題は、アドレス変換が発信するトラフィックには機能しますが、応答には機能しないことです。以下はテスト例です。

  • IP 10.50.1.7のラップトップをLANに接続し、8.8.8.8にpingを送信しました。
  • ファイアウォールで次tcpdump -i eno1のように
  • ファイアウォールで以下をtcpdump -i eno0使用して
  • ラップトップではICMP応答を受け取っていないようです。

したがって、応答はローカルIPに再変換されません。私は何を見逃していますか?

ご協力ありがとうございます!

(注:NATルールを削除し、私のラップトップからパブリックIP xxx.195.142.205を使用すると、インターネットに完全にアクセスできます。)

ベストアンサー1

@dirktが提案したように、conntrackはブリッジとうまく機能しないようです。したがって、不要なiptablesルールはブリッジでは機能しますが、NATでは機能しないようです。

ファイアウォールをレイヤ3ファイアウォールとして設定したところ、問題が解決しました。

他の人が興味を持っている場合に備えて、NATで透明なレイヤ2ファイアウォールを使用できるかどうかをオンラインで広範囲に検索しましたが、明確な回答は得られませんでした。

ebtablesウェブサイトこれが可能であることを示しています:

bridge-nfコードを使用すると、iptablesはブリッジされたIPパケットを確認し、透過的なIP NATを有効にできます。

私はそれを動作させるebtablesコマンドを見つけることができませんでした。

おすすめ記事