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
ルータはこれを自動的に実行できます。