私の設定は次のとおりです。
2 つのインターフェースを持つ Linux サーバーがあり、eth0
はeth1
通常eth1
の LAN 経由でインターネットに接続されています。eth0
は DHCP を提供しており、インターフェース自体の IP アドレスは です10.0.0.1
。
私は次のことを達成したいと考えています。
接続されているマシンから発信されたポート 80 のパケットをeth0
ルーティング マシン自体のポート 80 にリダイレクトし、応答パケットを当然リダイレクトして戻すようにしたいと考えています。それ自体は十分に簡単ですが、もう 1 つ要件があります。eth0
特定の IP アドレスを持つクライアントをこの例外から除外し、ポート 80 のパケットを通常どおりルーティングできるようにしたいと考えています。これはどのように実現できますか。これまでのところ、ポート 80 のすべてのパケットをeth0
ローカル マシンにリダイレクトするために、次の操作を実行しました。これは機能していますが、2 番目の要件をどのように実行すればよいかわかりません。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0
iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1
答え1
PREROUTING
次の行に到達する前にテーブルを終了する必要がありますDNAT
。
iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN
これにより、除外 IP ( ) からのすべてのパケットに対してルーティング テーブルを-I
終了する ( ) ための新しいルールが最初のルールとして挿入され、ルールに到達する前にヒットするようになります。-j RETURN
-s <exempt ip>
DNAT
( でも同様のことを行う必要があるかもしれませんがPOSTROUTING
、よくわかりません。)
man ipset
もう 1 つのオプションは、除外する IP のIP セット ( ) を作成し、DNAT
ルールに反転一致を追加することですSNAT
。
ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0
iptables を変更せずに、ipset から除外された IP を簡単に追加または削除できるため、管理が容易になります。