私のホームネットワークには次のトポロジがあります。
Internet
|
wifi |
C ----------- A ---------- B
どこ
- A(固定IP 192.168.0.254)は、ISPが提供するルーター/ APです。
- B(固定IP 192.168.0.1)は、ローカルDNSおよびDHCPサーバーとして機能するLinuxシステムです(dnsmasqを実行)。
- C は AP に接続され、DHCP によって構成されたクライアントです。
現在、BがDHCPサーバーとして提供するデフォルトゲートウェイはAのみです。
次に、BのクライアントCからのすべてのトラフィックをキャプチャするとします。 Bで私がしたことは次のとおりです。
IP転送を有効にする
# sysctl net.ipv4.ip_forward=1"
プロビジョニングBはゲートウェイとして機能します。もちろん、B自体はAを独自のゲートウェイとして使用します。
- Bでtcpdumpを実行して、何が起こっているのかを確認してください。
クライアントCで次の要求を開始します。
$ traceroute www.google.com
これで、CのトラフィックはB、A、最後にインターネットにルーティングされることが予想されます。
働くもの。Cはインターネットにアクセスできます
動作しないこと。最初の要求を除いて、Bは完全にバイパスされているようです。 tcpdump は B のアドレスを Traceroute 出力に表示しません。しかし、BでIP転送を無効にすると、Cのインターネット接続が失われるため、再ルーティングが発生すると確信しています。
どのような段落が発生した場合にこれを防ぐにはどうすればよいですか?
婦人声明:ネットワークトポロジを変更すると、「すべてのトラフィックキャプチャ」の問題(ポートミラーリングなどを介して)を解決できることがわかりますが、設定に何が起こっているのか、トポロジを変更せずに問題を解決する方法を本当に知りたいです。 。 。
答え1
ホストAが同じパケットを再度見ることができないように、NATにホストBが必要です。代わりに、Bは、パケットがBで始まったかのようにAを介してパケットを送信する必要があります。これを達成するには、iptables
次の規則を追加できます。
# iptables -t nat -A POSTROUTING -s ip-of-C -j MASQUERADE
この規則によれば、Bから送信されたすべてのパケットはBから始まったかのように書き換えられるが、関連する応答を逆変換してCに送ることができるように、逆変換テーブルは維持される。
-s ...
たとえば、応答パケットには適用されず、Cで発生するパケットにのみルールが適用されるように制限する部分(またはローカルLANに設定できます)に注意してください。
編集(@theuncleのコメントを考慮):NATなしで動作しない理由の説明は、ホストBが同じインターフェイスからパケットが変更なしで入ってくることを認識して、Cがネットワークを改善して直接知ることができることです。 Aと交通関連の問題を交渉します。