私は IP 192.168.1.1 の openwrt ルーターを持っています。私がやりたいことは、LAN にプロキシ サーバー (192.168.1.249) を設定し、2 つのデバイス (192.168.1.244、192.168.1.131) からのすべての通信を傍受することです。私が使用する方法は、プロキシ サーバーをデフォルト ゲートウェイとして設定し、openwrt ルーターで次の項目を構成しました。
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp -s 192.168.1.131
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp -s 192.168.1.244
# Set default gateway as the proxy server in table 2
ip route add default via 192.168.1.249 table 2
# Forward traffic with mark 3 to table 2
ip rule add fwmark 3 table 2
テストの結果、2 つのデバイスのすべての WAN 通信について、プロキシ サーバーがそれらを傍受して転送できることがわかりました。しかし、これら2つのデバイスは相互に通信しており、これらのLAN通信はプロキシサーバーに転送されていないようです。理由は何ですか? これらのトラフィックをプロキシ サーバーに転送するにはどうすればよいですか?
テスト: iptables の設定が有用かどうかを判断するために、テスト用のルールを追加しました。
iptables -t mangle -A PREROUTING -j DROP -s 192.168.1.131
私の意見では、このルールが機能する場合、IP 244 のデバイスは IP 131 のデバイスからのトラフィックを受信せず、これは iptables が LAN 通信に機能することを証明します。ただし、131 デバイスを使用して TCP トラフィックを 244 デバイスに送信したところ、機能しました。iptables を構成しても、これらの LAN トラフィックをプロキシ サーバーに転送できないとは思えません。正しいでしょうか?
答え1
IP サブネットは であると想定しています192.168.1.0/24
。つまり、 で始まるすべての IP アドレスは192.168.1
同じ L2 ブロードキャスト ドメインにあり、同じスイッチに接続されています。
同じ IP サブネットにあるデバイスは、レイヤー 2 の「接続」を介して直接通信し、レイヤー 3 のルーティングは行われません。
IPTables は、異なるサブネット間でルーティングされたパケットに対してファイアウォールを実行するメカニズムです。同じサブネット ホストが相互に送信するトラフィックは認識されません。
2 つのホスト間にファイアウォールをインストールする場合は、いくつかのオプションがあります。
- ホストを異なるサブネット (たとえば、
192.168.1.0/24
と192.168.2.0/24
) に移動し、ルーターが 2 つのサブネット間をルーティングするようにします。 - 2 つの異なるイーサネット セグメントをインストールし、ルーターをセグメント間のブリッジとして構成します。次に、2 つのイーサネット セグメント間のパケットをフィルターするように IPTables を構成できます。