pppdでパスMTUの問題を発見

pppdでパスMTUの問題を発見

CentOS 6.3でpppdを使用してPPPoEを実行する際に問題があります。

CentOSシステムは、NAT(双方向)およびさまざまなパケットフィルタリングを実行する専用のルータ/ゲートウェイです。 LAN 側とインターネット側には、それぞれ eth0 と eth1 に別々のネットワークカードがあります。

インターネット側にはDSLモデムがあります。モデムは、NATを含むすべての作業を独自に実行するのが好きです。これを防ぐために、間違ったアカウント情報を提供し、CentOSシステムにPPPoEを実装する必要がありました。

CentOSシステムでPPPoEを実行するのに問題があり、インターネット接続が非常に不安定です。クライアントは一部のWebサイトにアクセスできますが、他のWebサイトにはアクセスできず、一部のWebページは途中で読み込まれ、常に同じ場所に表示され、TCP接続は頻繁にリセットされます。

MTUの問題で解決しました。 MTUを標準1500から1492に下げると、LAN側の特定のクライアントシステム(すべてのWindows)が正しく機能するようになります。

一方、モデムがPPPoEとNATを実行できるようにし、eth1でIPおよびDHCPクライアントを有効にしてppp0の代わりにeth1にルーティングするようにIPフィルタリングスクリプトを設定すると、クライアントはMTUを1500に設定しても正常に動作できます。正常な仕事。 (この構成の問題は、デュアルNATがパフォーマンスに影響を与え、インバウンド接続ルーティングをよりトリッキーにすることです。)

DFを使用したPingテストは、クライアントをこの方法で設定する必要がないにもかかわらず、インターネットバインディングのためのMTUが実際にはまだ1492に制限されていることを示しています。

したがって、クライアントは通常パスMTU検索を実行しているように見えますが、pppd(またはNetFilter)が何らかの方法でそれを妨げているようです。

私は通常、CentOSシステムにNetFilter(iptables)を設定して、すべてのINPUTおよびOUTPUTトラフィックを破棄します(システムの唯一の操作は転送であるため)。パスMTU検索がICMPエラーに依存している場合に備えて、これらのポリシーを一時的にACCEPTに変更しようとしましたが、問題は解決しません。

私はPPPoEの経験が全くなく、誰かが私に正しい方向を伝えることを願っていました。ありがとうございます!

ベストアンサー1

まず、PMTUdにはICMPが必要です。渡されたトラフィックを送信するシステムに送信されます。ただし、RELATED、ESTABLISHEDを許可すると、必要なICMPが通過します。接続追跡機能を持つNATはそれを正しいシステムに返します。

しかし、次のような魔法のiptablesラインを探しているかもしれません。

iptables -t mangle -I FORWARD -p tcp -o ppp0 -j TCPMSS --set-mss 1452 # MTU-40 for IPv4
# use the correct outbound interface in place of ppp0

ルータはこれを自動的に実行できます。

おすすめ記事