net.ipv4.ip_forward=1 を有効にすると、正確に何が起こりますか?

net.ipv4.ip_forward=1 を有効にすると、正確に何が起こりますか?

私がこの状況にあり、デバイスMで正常にMITMを実行するために、ローカルネットワーク上の2つのデバイス(たとえばAとB)のARPキャッシュに感染するプログラムを書いているとします。プログラムはMデバイスで実行されます。デバイスMでコマンドを使用してIP転送を有効にすると、sysctl net.ipv4.ip_forward=1デバイスAからBへのHTTP接続が問題なく確立され、デバイスMからのトラフィックが表示されます。

ただし、同じ状況でデバイスMでコマンドを使用してIP転送を無効にした後、ARPキャッシュが破損してsysctl net.ipv4.ip_forward=0デバイスAからBへのHTTP接続を確立できません。デバイスMでは、デバイスAのTCP SYNパケットを見ることができます。私のプログラムでは、デバイスMからSYNパケットを受信し、パケットのsrc MACアドレスをMのMACアドレス(AのMACアドレス)に変更し、dst MACアドレスをBのMACアドレス(MのMACアドレス)に変更します。ネットワークに注入します。私はネットワーク層から何も修正しません。 TCPdump コマンドを使用して、B 内のパケットに新しい src および dst MAC があることを確認できます。これは、パケットがBに到着したことを意味します。しかし、Bはパケットに応答せず、その理由を理解できません。

もしそうなら、問題はip_forward=1このMITMの状況に特別なものがあるかということです。明確に言えば、すべてのマシンはLinuxです。デバイスMで転送を有効にした後は、パケットのMACアドレスを変更する必要はありません。ちょうどキャッシュを中毒し、そこからすべてがうまくいきました。

ベストアンサー1

Mのコアは、宛先IPアドレスがパケットがMのためではないことを示すパケットを受信します。それは何をしますか?

当時ip_forward=0は「これがなぜ私に送られたのか分からないし、気にしない。ゴミ箱に捨てられるぞ!」

vs ip_forward=1、「まあ、それは私がすることではありません。しかし、受信者がどこにいるのかを知っているので、正しいMACアドレスに送り返します」

つまりip_forward=1あなたカーネルは自動的にMACアドレスを変更するので、MACアドレスを変更する必要はありません。

おすすめ記事