Do n't Fragmentフラグを設定せずにICMPエコー応答を受け取らないのはなぜですか?

1
2022.01.13

電話のワイヤレスホットスポットを使用して、ルーターを介した一時的/バックアップインターネットアクセスを提供しています。ルーターはWi-Fiクライアントとして電話に接続しており、メインの有線接続に障害が発生した場合は、そのWi-Fi接続をアップストリームインターネット接続として使用します。これはおそらく少なくともトリプルNATです。

ルーティングとファイアウォールは、ルーターに接続されているすべてのクライアントでIPv4接続が正常に機能するように設定されていますが、インターネットホストへのpingはLinuxクライアントでは機能しますが、Windowsクライアントでは機能しないことがわかりました。 Windows ICMPエコー要求はルーターのWi-Fiインターフェイスを介して送信されますが、応答は返されません。

ファイアウォールは、メインの有線インターネット接続と同じ設定を使用して、双方向ですべてのICMPを許可するように設定されています。これは、ICMPに問題はありません(NATのレイヤーは1つだけです)。

ルーターのtcpdumpを介して動作しているpingと動作していないpingを比較することにより、LinuxはデフォルトでDo n't Fragmentビットを設定し、Windowsは設定していないことを発見しました。 Windows ping-fオプションを指定すると、フラグメント化しないビットが設定され、WindowsでICMPエコー応答が返されます。

tcpdumpによると、Windows pingからのエコー要求のサイズは40バイトであり、Linuxからのエコー要求のサイズは64バイトです。私はこれを少し調べましたが、私が見つけたほとんどすべては、大きなpingパケットを送信することによってMTUサイズを発見することに関するものであり、これらは小さいものです。

Do n't Fragmentビットをオンにすると、このセットアップでpingが機能するのはなぜですか?

回答
1
2022.01.13

小さなパケットはDFフラグがなくても正常に機能するため、これは発生しないはずです。

おそらく、サービス拒否攻撃の一種であるpingフラッドから保護する外部ファイアウォールにぶつかっている可能性があります。

この攻撃では、攻撃者は大きなメッセージを非常に小さなパケットにフラグメント化し、最後のフラグメントが受信されたときにフラグメントを1つの完全なパケットにアセンブルするために、ターゲットがフラグメントをメモリに保持する必要があります。このようにして、攻撃者は被害者のメモリを終わりのないパケットストリームでいっぱいにすることができます。

おそらく、電話のISPは、DFフラグのない小さなパケットに対して過敏であり、すべてを拒否します。