PPPoE MTU를 어떻게 늘리나요?

PPPoE MTU를 어떻게 늘리나요?

PPPoE를 사용하여 인터넷에 연결된 Ubuntu Server 14.04가 설치되어 있습니다. 현재 내 ppp0인터페이스의 MTU는 1492이며 대부분 작동합니다.

내 ISP에서 지원하는 MTU를 1500으로 늘리고 싶습니다.

지금까지 기본 이더넷 인터페이스의 MTU를 1508로 늘렸고 다음 줄을 추가해 보았습니다./etc/ppp/peers/dsl-provider

mtu 1500
mru 1500

하지만 내 ppp0인터페이스의 MTU는 여전히 1492입니다. 1492보다 낮은 값을 사용하면 예상대로 작동하므로 추가한 줄의 구문이 정확하다고 생각합니다.

ppp0인터페이스가 활성화된 후 인터페이스 의 MTU를 1500으로 수동으로 변경하면 작동하지만 한 방향의 패킷에만 영향을 미칩니다. 그렇게 하면 인터넷을 통해 1500바이트 패킷을 보낼 수 있고 조각화 없이 목적지에 도착할 수 있습니다. 하지만 나에게 들어오는 트래픽은 여전히 ​​1492바이트 조각으로 전송됩니다.

PPPoE 연결이 시작될 때 이더넷 인터페이스에서 트래픽을 캡처하면 내 Ubuntu Server 14.04 시스템이 공급자에게 보내는 구성 요청에서 MRU가 1492로 지정되어 있음을 알 수 있습니다. 따라서 문제가 나에게 있다는 것을 알고 있습니다. 연결의.

구성 파일에 1500이 표시되어 있는데 Ubuntu Server 14.04가 구성 요청에서 MRU로 1492를 사용하는 이유는 무엇입니까? 그리고 어떻게 1500으로 바꿀 수 있나요?

답변1

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플러그인의 하드 코딩 제한이 1492바이트라는 것입니다. 그리고 이를 늘리는 유일한 방법은 소스를 수정하고 더 높은 제한으로 플러그인을 다시 빌드하는 것입니다.

위의 네 줄을 제거 plugin.c하고 모듈을 다시 구축함으로써 MTU를 1492에서 1500으로 늘릴 수 있었습니다. 이는 기본 줄이 더 큰 크기를 지원하는 것으로 알려진 경우에만 작동하며 이는 내 연결의 경우입니다. .

기본 줄의 기능을 감지하려면 RFC 4638을 지원하는 최신 pppd 버전을 사용해야 합니다. Ubuntu 16.04에는 최신 pppd 버전이 있으므로 코드를 다시 컴파일할 필요 없이 PPPoE에 더 큰 MTU 크기를 사용할 수 있어야 합니다.

답변2

strace 및 filter를 통해 pppd를 실행하면 '열기' 요청을 표시하여 해당 구성을 가져올 파일을 열 수 있는지 확인할 수 있습니다.

sudo strace -f -e open pppd

영국 광대역의 내 경험에 따르면 BT를 통해 연결되는 경우 모든 연결은 1492였습니다. 추가로 8옥텟이 필요한 특별한 이유가 있습니까?

내가 이해하는 바는 MRU를 제대로 일치시키지 않으면 패킷이 여러 패킷이 될 수 있다는 것입니다. 특히 캡슐화를 위해 8옥텟 오버헤드와 같은 것을 허용하지 않는 경우 더욱 그렇습니다.

관련 정보