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

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

アロハ、

iptables を使用して、WiFi ルーター上のすべてのトラフィックをローカル 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 ルールは順番に処理されるため、最初のルールではルーターに送信されるすべてのトラフィックを許可する必要があります。

iptables -t nat -I PREROUTING -i br0 -p tcp -d 172.16.0.1--dport 80 -j ACCEPT 

次に、トラフィックをリダイレクトするルールを追加します。

iptables -t nat -A PREROUTING -d !172.16.0.1 -i br0 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.2:80

SSL でサーバーに接続していないため、https では機能しないと思います。

関連情報