Как я увеличиваю PPPoE MTU?

У меня есть Сервер Ubuntu 14,04 установок, которые подключены к интернет-использованию PPPoE. В данный момент мой ppp0 интерфейс имеет MTU 1492, который главным образом работает.

Я хотел бы увеличить MTU до 1500, который поддерживается моим ISP.

До сих пор я увеличил MTU базового интерфейса Ethernet к 1508, и я попытался включить следующие строки /etc/ppp/peers/dsl-provider

mtu 1500
mru 1500

Но мой ppp0 интерфейс все еще имеет MTU 1492. Я полагаю, что синтаксис моих добавленных строк правилен, начиная с использования значений ниже, чем 1492 действительно работает как ожидалось.

Вручную изменяя MTU ppp0 взаимодействуйте через интерфейс к 1500 после того, как это было поднято работы, но это только влияет на пакеты в одном направлении. Выполнение этого, которое я могу отправить 1 500-байтовым пакетам через Интернет и они прибудут к своему месту назначения без фрагментации. Но входящий трафик мне все еще отправляется в 1 492-байтовых фрагментах.

Путем получения трафика в интерфейсе Ethernet, поскольку поднято соединение PPPoE, я вижу, что в конфигурации запрашивают, чтобы мой Сервер Ubuntu, который 14,04 машин отправляют поставщику, MRU, был указан как 1492. Таким образом, я знаю, что проблема находится на моем конце соединения.

Почему делает Сервер Ubuntu 14,04 использования 1492 как MRU в запросе конфигурации, когда конфигурационный файл говорит 1500? И как я могу изменить его на 1500?

2
задан 19 September 2016 в 22:54

2 ответа

Я загрузил ppp исходный код путем ввода этих двух команд:

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 плагин имеет трудный кодированный предел 1 492 байтов. И единственный способ увеличить его путем изменения источника, и восстановите плагин с более высоким пределом.

Путем удаления вышеупомянутых четырех строк из plugin.c и восстанавливая модуль, я смог увеличить MTU с 1492 до 1500. Это только работает, пока базовая строка, как известно, поддерживает больший размер, который, оказывается, имеет место на моем соединении.

Для обнаружения возможности базовой строки, было бы необходимо использовать более новую pppd версию с поддержкой RFC 4638. Ubuntu 16.04 имеет более новую pppd версию и таким образом должна быть способна к использованию больших размеров MTU для PPPoE, не будучи должен перекомпилировать любой код.

2
ответ дан 2 December 2019 в 04:53

Вы могли выполнить pppd через strace и фильтр для отображения 'открытых' запросов для наблюдения, который регистрирует его открытие для получения его конфигурации от.

sudo strace -f -e open pppd

, По моему опыту (британской широкополосной связи) все соединения были 1492, если они пробегаются через BT, есть ли определенная причина, Вам нужны еще 8 октетов?

Мое понимание - то, что, если Вы не соответствуете MRU правильно, можно закончить тем, что стали пакетами несколько пакетов, особенно если Вы не позволяете вещи как 8 октетов наверху для инкапсуляции.

-1
ответ дан 2 December 2019 в 04:53

Другие вопросы по тегам:

Похожие вопросы: