ファイアウォールで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コマンドを見つけることができませんでした。