ファイアウォールでiptablesを使用してNATを構成するのに問題があります。
私のファイアウォールの設定は次のとおりです。
これが私のルールです:
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
問題は、要するに、アドレス変換が発信トラフィックに対しては機能するが、応答に対しては機能しないことです。テスト例を次に示します。
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になります。したがって、返信はローカルIPに変換されません。何が欠けていますか?
ご協力いただきありがとうございます!
(注:NATルールを削除し、ラップトップでパブリックIP xxx.195.142.205を使用すると、完全なインターネットアクセスが可能になります)
@dirktが示唆しているように、conntrackはブリッジではうまく機能しないようです。したがって、必要のないiptablesルールはブリッジでは機能するように見えますが、NATでは機能しません。
ファイアウォールをレイヤー3ファイアウォールとして構成するとすぐに問題が解決しました。
他の人が興味を持っている場合:NATで透過的なレイヤー2ファイアウォールを使用できるかどうか、Webを広範囲に検索しましたが、正解は得られませんでした。
ebtablesウェブサイト それが可能であることを示唆しています:
bridge-nfコードは、iptablesにブリッジされたIPパケットを認識させ、透過的なIPNATを有効にします。
ただし、どのebtablesコマンドで機能するかはわかりませんでした。