今、ルーティングの問題に関する非常に基本的な質問があります。
したがって、私のネットワークのip 10.0.0.1の中央サーバーはip net 10.0.0.0/25のルーターです。クライアント10.0.0.100には、IPネットワーク172.20.10.0/25を提供するアクセスポイントへのWiFi接続があります。
10.0.0.0./25のすべてのクライアントが172.20.10.0/25に到達できるように10.0.0.1にパスを追加するにはどうすればよいですか?
これまでにテストしたもの(ipv4配信とiptables迷彩が処理されました):
たとえば、10.0.0.1にパスを追加します。
route add -net 172.20.10.0 netmask 255.255.255.128 dev br0
10.0.0.1を172.20.10.0/25ネットワークに接続できますが、それ以上ではありません。他のクライアントのTracerouteは、要求が10.0.0.1で輻輳し、すべてのクライアントが個別に同じパスを構成するまで、他のネットワークに接続できないことを示しています。しかし、これは10.0.0.1がゲートウェイであるという考えと矛盾しています。
上記のコマンドを使用した後、10.0.0.1のルーティングテーブルは次のようになります。
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 <WANIP IS HERE> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.128 U 0 0 0 br0
<WANIP IS HERE> 0.0.0.0 255.255.255.252 U 0 0 0 eth0
172.20.10.0 10.0.0.100 255.255.255.128 UG 0 0 0 br0
私がここで何を見逃しているのでしょうか?
時間をかけておそらくとても愚かな質問に答えてくれてありがとう!
答え1
通常、ゲートウェイ(この場合は10.0.0.1システム)に同じネットワーク(たとえば10.0.0.100)の他のホストを介して目的のネットワークへのパスがある場合は、ICMPリダイレクトメッセージを送信してクライアントを別のゲートウェイに送信します。 。
ただし、これを行うには、内部ネットワークから内部ネットワークへの転送を許可するiptablesルールを追加する必要があります。これは非論理的に聞こえるかもしれませんが、実際には内部ネットワークから内部ネットワークにトラフィックを効果的に送信するためです。
次のルールを追加します。
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
10.0.0.0/25ネットワーク上のクライアントホストが172.20.10.xにアクセスしようとすると、ホストはデフォルトゲートウェイ10.0.0.1にパケットを送信します。デフォルトゲートウェイは、172.20.10.0/25へのパスが10.0.0.100を通過することを知っているので、ICMP redirect 172.20.10.x to host 10.0.0.100
パケットをクライアントホストに送信します。クライアントホストは、ターゲットホストに一時パスを追加し、そのホストのゲートウェイとして10.0.0.100を使用します。
クライアントホストは、これらのICMPリダイレクトを許可するように設定する必要があります。これらのリダイレクトは、悪意のあるリダイレクトがトラフィックを偽のゲートウェイに移行するときにセキュリティ上の問題を示す可能性がありますが、これはLinuxのデフォルトであり、Windowsでもこれを許可します。 Linuxでは、net.ipv4.conf.default.accept_redirects
sysctl設定を使用して制御できます。
答え2
@Wurtelの以前の答えに次のように入力する必要があることを追加したいと思います。
echo 1 > /proc/sys/net/ipv4/ip_forward
また、次のように連絡先を偽装する必要があります。
IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
それ以外の場合、発信トラフィックは正しく処理されません。