Como faço para aumentar o MTU PPPoE?

Como faço para aumentar o MTU PPPoE?

Eu tenho uma instalação do Ubuntu Server 14.04 que está conectada à internet usando PPPoE. No momento minha ppp0interface tem um MTU de 1492 que funciona principalmente.

Gostaria de aumentar o MTU para 1.500, que é suportado pelo meu ISP.

Até agora aumentei o MTU da interface Ethernet subjacente para 1508 e tentei adicionar as seguintes linhas em/etc/ppp/peers/dsl-provider

mtu 1500
mru 1500

Mas minha ppp0interface ainda possui um MTU de 1492. Acredito que a sintaxe das minhas linhas adicionadas esteja correta, pois usar valores inferiores a 1492 funciona conforme o esperado.

Alterar manualmente o MTU da ppp0interface para 1500 depois que ela for ativada funciona, mas afeta apenas os pacotes em uma direção. Fazendo isso consigo enviar pacotes de 1.500 bytes pela internet e eles chegarão ao destino sem fragmentação. Mas o tráfego de entrada para mim ainda é enviado em fragmentos de 1.492 bytes.

Ao capturar o tráfego na interface Ethernet conforme a conexão PPPoE é ativada, posso ver que na solicitação de configuração que minha máquina Ubuntu Server 14.04 envia ao provedor, o MRU é especificado como 1492. Portanto, sei que o problema está no meu fim da conexão.

Por que o Ubuntu Server 14.04 usa 1492 como MRU na solicitação de configuração, quando o arquivo de configuração diz 1500? E como posso mudar para 1500?

Responder1

Baixei o pppcódigo-fonte digitando estes dois comandos:

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

No arquivo de cabeçalho pppd/plugins/rp-pppoe/pppoe.hencontrei isto:

/* 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é definido em/usr/include/linux/if_ether.h

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

E em pppd/plugins/rp-pppoe/plugin.ceu encontrei isso:

    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;

O que tudo isso significa é que o rp-pppoeplugin tem um limite codificado de 1492 bytes. E a única maneira de aumentá-lo é modificando a fonte e reconstruindo o plugin com um limite maior.

Ao remover as quatro linhas acima plugin.ce reconstruir o módulo, consegui aumentar o MTU de 1492 para 1500. Isso só funciona enquanto a linha subjacente suporta o tamanho maior, o que é o caso da minha conexão .

Para detectar a capacidade da linha subjacente seria necessário usar uma versão mais recente do pppd com suporte RFC 4638. O Ubuntu 16.04 possui uma versão mais recente do pppd e, portanto, deve ser capaz de usar tamanhos maiores de MTU para PPPoE sem a necessidade de recompilar qualquer código.

Responder2

você poderia executar o pppd via strace e filter para exibir solicitações 'abertas' para ver de quais arquivos ele está abrindo para obter sua configuração.

sudo strace -f -e open pppd

Na minha experiência (de banda larga no Reino Unido), todas as conexões foram 1492 se passarem por BT. Existe um motivo específico para você precisar de mais 8 octetos?

Meu entendimento é que, se você não combinar o MRU corretamente, poderá acabar fazendo com que seus pacotes se tornem vários pacotes, especialmente se você não permitir coisas como uma sobrecarga de 8 octetos para encapsulamento.

informação relacionada