iptablesを使用してすべてのトラフィックをローカルWebサーバーにリダイレクトする

iptablesを使用してすべてのトラフィックをローカルWebサーバーにリダイレクトする

iptablesを使用して、Wi-FiルーターからのすべてのトラフィックをローカルのWebサーバーにリダイレクトしようとしています。私のコマンドが正しいかどうかわからないので、ルールからルーターIP(172.16.0.1)を除いてルーターにアクセスできないようにロックするのを防ぎたいと思います。

これまで私が思いついたこと:

iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 172.16.0.2:80
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 172.16.0.2:80

上記でテストした結果、ルータに再アクセスできず、リダイレクトが機能しなくなりました。何が間違っているのか、172.16.0.1が172.16.0.2にリダイレクトされないように除外するにはどうすればよいですか?

設定:172.16.0.2はWebサーバーのIPです。 172.16.0.1は、インターネットに接続されていないマイルータ(dd-wrt)です。

私が達成したいものの例:

  • ユーザーはWi-Fiホットスポットに接続してwww.siteA.comにアクセスしようとしますが、172.16.0.2(/index.html)にリダイレクトされます。
  • ユーザーはWi-Fiホットスポットに接続してwww.siteB.comにアクセスしようとしますが、172.16.0.2(/index.html)にリダイレクトされます。
  • ユーザーは172.16.0.1にアクセスしようとしますが、何も表示されません。

ベストアンサー1

必要なのは次のルールだけです。

iptables -t nat -I PREROUTING --src 0/0 --dst 172.16.0.2 

これは、natテーブル(-t nat)のPREROUTINGチェーン(?= -I)にルールを挿入します。つまり:

宛先アドレスが172.16.0.2(--dst 172.16.0.2)のすべての受信(-src 0/0)パケット。

覚えておくべきこと:着信トラフィックをリダイレクトすることは、natテーブルのPREROUTINGチェーンにルールを挿入することを意味します。指定されたインターフェイスに対してのみリダイレクトします。詳細については、man iptablesを参照してREDIRECTキーワードを検索してください。

--append PREROUTING  --source 172.16.0.1 --jump RETURN

RETURNは、チェーン巡回を停止し、前の(呼び出し)チェーンの次のルールから再開することを意味します。チェーンポリシーで指定された宛先は、組み込みチェーンの終わりに到達するか、組み込みチェーンの宛先RETURNを持つルールが一致する場合にパケットの運命を決定します。

おすすめ記事