PPPoE MTU を増やすにはどうすればいいですか?

PPPoE MTU を増やすにはどうすればいいですか?

PPPoE を使用してインターネットに接続された Ubuntu Server 14.04 をインストールしています。現時点では、ppp0インターフェイスの MTU は 1492 で、ほぼ正常に動作しています。

MTU を ISP がサポートする 1500 に増やしたいと思います。

これまで、基盤となるイーサネットインターフェースのMTUを1508に増やし、次の行を追加してみました。/etc/ppp/peers/dsl-provider

mtu 1500
mru 1500

しかし、私のppp0インターフェースの MTU はまだ 1492 です。1492 未満の値を使用すると期待どおりに動作するため、追加した行の構文は正しいと思います。

インターフェースを起動した後、手動で MTU をppp01500 に変更すると機能しますが、これは一方向のパケットにのみ影響します。これを行うと、1500 バイトのパケットをインターネット経由で送信でき、パケットは断片化されることなく宛先に到着します。しかし、私への着信トラフィックは、依然として 1492 バイトのフラグメントで送信されます。

PPPoE 接続が確立されたときにイーサネット インターフェイス上のトラフィックをキャプチャすると、Ubuntu Server 14.04 マシンがプロバイダーに送信する構成要求で、MRU が 1492 として指定されていることがわかります。したがって、問題は接続の私の側にあることがわかります。

構成ファイルでは 1500 と指定されているのに、Ubuntu Server 14.04 では構成要求で MRU として 1492 が使用されるのはなぜですか? また、これを 1500 に変更するにはどうすればいいですか?

答え1

ppp次の 2 つのコマンドを入力してソース コードをダウンロードしました。

sudo apt-get build-dep ppp
apt-get source ppp

ヘッダー ファイルでpppd/plugins/rp-pppoe/pppoe.h次の内容を見つけました:

/* Header size of a PPPoE packet */
#define PPPOE_OVERHEAD 6  /* type, code, session, length */
#define HDR_SIZE (sizeof(struct ethhdr) + PPPOE_OVERHEAD)
#define MAX_PPPOE_PAYLOAD (ETH_DATA_LEN - PPPOE_OVERHEAD)
#define MAX_PPPOE_MTU (MAX_PPPOE_PAYLOAD - 2)

ETH_DATA_LENは次のように定義されます/usr/include/linux/if_ether.h

#define ETH_DATA_LEN      1500            /* Max. octets in payload        */

そしてpppd/plugins/rp-pppoe/plugin.c私はこれを見つけました:

    if (lcp_allowoptions[0].mru > MAX_PPPOE_MTU)
        lcp_allowoptions[0].mru = MAX_PPPOE_MTU;
    if (lcp_wantoptions[0].mru > MAX_PPPOE_MTU)
        lcp_wantoptions[0].mru = MAX_PPPOE_MTU;

つまり、rp-pppoeプラグインには 1492 バイトのハードコードされた制限があるということです。そして、これを増やす唯一の方法は、ソースを変更し、より高い制限でプラグインを再構築することです。

上記の 4 行を削除してplugin.cモジュールを再構築することで、MTU を 1492 から 1500 に増やすことができました。これは、基礎となる行がより大きなサイズをサポートしていることがわかっている場合にのみ機能しますが、私の接続ではたまたまそのようになっています。

基礎となる回線の機能を検出するには、RFC 4638 をサポートする新しいバージョンの pppd を使用する必要があります。Ubuntu 16.04 には新しいバージョンの pppd が搭載されているため、コードを再コンパイルしなくても、PPPoE でより大きな MTU サイズを使用できるはずです。

答え2

strace とフィルターを介して pppd を実行し、「open」要求を表示して、どのファイルを開いて設定を取得しているかを確認できます。

sudo strace -f -e open pppd

私の経験(英国のブロードバンド)では、BT 経由の接続はすべて 1492 でしたが、さらに 8 オクテットが必要な特別な理由があるのでしょうか。

私の理解では、MRU を適切に一致させないと、特にカプセル化のための 8 オクテットのオーバーヘッドなどを許可しない場合は、パケットが複数のパケットになってしまう可能性があります。

関連情報