web-dev-qa-db-ja.com

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

Iptablesを使用して、wifiルーター上のすべてのトラフィックをローカルウェブサーバーにリダイレクトしようとしています。コマンドが正しいかどうかはわかりませんが、ルーターの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)で、インターネット接続はありません。

私が達成しようとしていることの例:

  • ユーザーがwifiホットスポットに接続し、www.siteA.comにアクセスしようとすると、172.16.0.2(/index.html)にリダイレクトされます
  • ユーザーがwifiホットスポットに接続し、www.siteB.comにアクセスしようとすると、172.16.0.2(/index.html)にリダイレクトされます
  • ユーザーが172.16.0.1にアクセスしようとすると、指示は行われません
3
D. Eight

必要なのは次の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を持つ組み込みチェーン内のルールが一致した場合、チェーンポリシーで指定されたターゲットがパケットの運命を決定します。

4
malyy