링크가 인증을 통과하고 클라이언트가 연결되었다고 보고하며, 한 초 뒤 로그는 LCP가 피어에 의해 종료되었다는 기록으로 닫힙니다. 이 줄은 GRE 터널 내부의 PPP 협상에서 나온 것이므로 전송은 이미 동작했고 두 끝단이 링크 옵션에 합의하지 못한 것입니다. 암호와 서버 주소는 여기서 보통 무죄입니다. 가장 먼저 비교할 것은 암호화 정책이며, Linux에서는 pppd의 피어 파일이 가장 먼저 볼 곳입니다.

LCP 실패가 PPP 단계에 대해 말하는 것

PPTP는 PPP를 GRE 안에 감싸며, TCP 1723 제어 연결이 호출을 설정하고, GRE가 페이로드를 전달하며, 그다음 LCP가 인증 프로토콜, 압축, MPPE 같은 옵션을 협상합니다. 필수 옵션이 상대편에서 받아들여지지 않으면 피어는 LCP를 종료합니다. CHAP 또는 MSCHAPv2 교환이 끝나고 곧바로 LCP가 끝나는 로그는 정책 거부이며 연결 도달 실패가 아닙니다. 터널이 협상에 전혀 도달하지 않는다면 LCP 줄을 읽기 전에 pppd와 그 플러그인을 점검하세요.

놓치기 쉬운 두 가지 전제가 있습니다. pppd 바이너리가 있어야 하고, 피어 파일에 지정된 PPTP 플러그인이 설치되어 있어야 하며, 패키지가 없으면 어떤 옵션도 논의되기 전에 다이얼이 끝납니다.

MPPE를 요구하는 쪽에서 활성화하세요

실제 결정은 암호화 정책을 어느 끝단이 소유하느냐입니다. 클라이언트는 MPPE를 제안하거나 요구하거나 거부할 수 있고, 서버도 같은 선택을 합니다. 둘 다 요구하면 링크가 올라오고, 한쪽이 요구하고 다른 쪽이 거부하면 LCP가 끝납니다.

pty "pptp vpn.example.net --nolaunchpppd"
name alice
remotename PPTP
require-mppe-128

다이얼 전에 require-mppe-128가 이것 없이는 실패하므로 modprobe ppp_mppe로 모듈을 로드하세요. Windows에서는 해당 제어가 VPN 항목의 보안 탭이며, 서버가 제공하는 것을 그대로 받아들이지 말고 암호화를 요구하도록 클라이언트에 지시해야 합니다. 그래도 서버가 LCP를 종료하면, 서버가 거부하는 보호를 클라이언트가 협상할 수 없으므로 MPPE가 필수인지 선택인지 비활성인지 운영자에게 물어보세요. 메시지를 없애려고 암호화를 끄는 것은 이 프로토콜의 유일한 보호를 제거하는 잘못된 방향입니다.

편집하기 전에 동작하는 피어 파일을 저장하세요. require-mppe 줄을 잘못 입력하면 같은 일반적인 LCP 실패가 재현되어 처음으로 돌아갑니다.

애플릿 대신 pppd 자체의 로그를 읽으세요

데스크톱 애플릿은 연결 끊김만 보여 주고 이유는 숨기므로, 한 번의 시도에 대한 데몬의 기록을 읽으세요. systemd 시스템에서는 메시지가 journal로 들어가고, 오래된 설정은 전통적인 로그 파일에 기록합니다.

journalctl --since "10 min ago" | grep -i -E "pppd|lcp|mppe"
tail -n 50 /var/log/syslog

하루치 재연결이 아니라 한 번의 다이얼 주변 시간대를 검색하면 거부된 옵션이 쉽게 보입니다. pppd는 보통 옵션 이름과 피어의 응답을 알려 주므로, 자기 제안을 바꿔야 할지 서버 쪽에 요구를 완화해 달라고 해야 할지 판단할 수 있습니다. 어느 줄이 어느 호출에 속하는지 모르면 두 로그 비교가 소용없으므로 시도에는 타임스탬프를 붙이세요. LCP 교환이 전혀 나타나지 않으면 고장은 체인의 더 앞쪽에 있고 MPPE는 용의자가 아닙니다.

재연결 후에도 수정을 유지하세요: 훅 이름과 MTU

링크가 유지되면 두 가지 세부 사항이 재연결을 견딜지 결정합니다. 훅은 /etc/ppp/ip-up.d와 /etc/network/if-up.d에 있으며, 두 디렉터리 모두 run-parts가 처리하는데 그 파일명 필터는 점이 들어간 이름을 모두 거부합니다. 따라서 set-pptp.sh이라는 스크립트는 건너뛰고 set-pptp은 실행됩니다. 스크립트 내용을 디버그하기 전에 이름을 확인하고, 그다음 해당 훅 안에서 더 작은 MTU를 설정해 새 ppp 인터페이스가 수동 명령 없이 이를 물려받게 하세요.

run-parts --test /etc/ppp/ip-up.d
ip link set dev ppp0 mtu 1200

세션을 의도적으로 끝내려면 ppp가 들어간 모든 것을 죽이면 관련 없는 링크도 끊어지므로, 프로세스 이름을 패턴 일치시키는 대신 pppd가 기록한 pid를 대상으로 하세요. PPTP는 폐기되었고 MS-CHAPv2는 약하므로, 이 점검들을 계속 동작해야 하는 링크의 유지 관리로 취급하고 어딘가 새로 PPTP를 배포할 이유로 삼지 마세요.

관련 글