web-dev-qa-db-ja.com

iptablesとブリッジでNAT

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

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

  • これは、ゲートウェイとISPのゲートウェイの間のレイヤー2透過ファイアウォールです。
  • 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

問題は、要するに、アドレス変換が発信トラフィックに対しては機能するが、応答に対しては機能しないことです。テスト例を次に示します。

  • LAN上でIP10.50.1.7のラップトップを接続し、それを使用して8.8.8.8にpingを実行しました
  • ファイアウォール上で、tcpdump -i eno1、10.50.1.7から8.8.8.8までのICMP要求が表示されますが、応答がありません
  • ファイアウォール上で、tcpdump -i eno0、xxx.195.142.205から8.8.8.8へのICMP要求が表示され、ICMP応答は8.8.8.8からxxx.195.142.205になります。
  • 明らかに、ラップトップでは、ICMP応答を受け取りません

したがって、返信はローカルIPに変換されません。何が欠けていますか?

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

(注:NATルールを削除し、ラップトップでパブリックIP xxx.195.142.205を使用すると、完全なインターネットアクセスが可能になります)

1
oxley

@dirktが示唆しているように、conntrackはブリッジではうまく機能しないようです。したがって、必要のないiptablesルールはブリッジでは機能するように見えますが、NATでは機能しません。

ファイアウォールをレイヤー3ファイアウォールとして構成するとすぐに問題が解決しました。

他の人が興味を持っている場合:NATで透過的なレイヤー2ファイアウォールを使用できるかどうか、Webを広範囲に検索しましたが、正解は得られませんでした。

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

bridge-nfコードは、iptablesにブリッジされたIPパケットを認識させ、透過的なIPNATを有効にします。

ただし、どのebtablesコマンドで機能するかはわかりませんでした。

1
oxley