연결은 목요일에 작동했고, 업그레이드는 금요일에 실행되었으며, 월요일에는 클라이언트가 “connecting”에서 빙글빙글 돌다가 포기합니다. 같은 노트북, 같은 서버, 같은 계정, 같은 사전 공유 키입니다. 프로필은 아무것도 편집되지 않았습니다, 그래서 뻔한 용의자인 비밀번호와 방화벽이 시간을 낭비하게 만듭니다.

바뀐 것은 여러분의 머신이 제공할 의향이 있는 변환 목록입니다. Ubuntu에서 쓰이는 두 IPsec 스택인 strongSwan과 Libreswan은 더 이상 안전하다고 보지 않는 알고리즘을 잘라내고, 그 앞에 있는 NetworkManager 플러그인은 다른 일정으로 움직이는 자체 목록을 가지고 있습니다. 3DES, SHA1, 1024비트 Diffie-Hellman 그룹에 고정된 서버는 결국 자신이 받아들이는 무엇도 듣지 못하게 될 수 있습니다.

업그레이드가 실제로 바꾼 것

IKEv1 제안은 두 계층에서 공급됩니다. 데몬은 컴파일된 기본 제안 집합을 제공하고, L2TP 플러그인은 그것을 따르거나 자체 목록을 내놓습니다. NetworkManager-l2tp 1.2.16 이전에는 플러그인이 그것을 따랐으므로, 제안은 설치된 데몬이 합리적이라고 보는 것이었습니다. 1.2.16부터 플러그인은 Windows와 Apple 클라이언트를 모델로 한 문서화된 목록을 보내며, 그 목록은 예전 기본값보다 넓지만 더 이상 대기열 맨 앞의 모든 레거시 조합을 담지는 않습니다.

이 분리가 사람들이 헷갈려 하는 실패 방식을 설명합니다, 같은 Ubuntu 릴리스의 두 머신이 다르게 동작할 수 있습니다, 하나에는 배포판 패키지가 있고 다른 하나에는 백포트가 있기 때문이며, 버그 보고서에서는 둘 다 데몬 버전이 같아 보입니다. 업그레이드가 관련된 무엇도 바꾸지 않았다고 결론 내리기 전에 데몬 버전만이 아니라 플러그인 버전을 확인하세요.

같은 영역에 더 작은 함정이 있습니다. 두 데몬은 타원 곡선 Diffie-Hellman 그룹을 다르게 표기합니다, 하나는 ecp384라고 쓰고 다른 하나는 ecp_384라고 씁니다. 잘못된 철자를 Advanced 대화 상자에 붙여 넣으면 데몬이 그 설정을 구문 분석할 수 없다고 거부하며, 이는 로그에 구성의 오타가 아니라 협상 문제로 나타납니다.

무엇이든 바꾸기 전에 실패를 읽으세요

어떤 백엔드를 실행 중인지부터 시작하세요, 답이 구문과 로그 위치를 모두 결정하기 때문입니다.

ipsec --version
nmcli connection show "Your VPN name" | grep -i ipsec

그다음 교환 자체를 읽으세요. strongSwan에서는 데몬이 최신 릴리스에서는 journal에, 더 오래된 릴리스에서는 /var/log/syslog에 기록하며, 흥미로운 부분은 마지막 줄이 아니라 보낸 제안입니다. 찾아야 하는 것은 일치하는 제안이 없다는 문구(알고리즘 문제), 인증 실패(키나 계정을 가리킴), 또는 단순한 타임아웃(도달 가능성을 가리킴)입니다.

이 세 가지 결과는 너무 자주 하나의 증상으로 취급됩니다. 데몬 로그가 비어 있는 타임아웃은 패킷이 도착하지 않는다는 뜻입니다. 제안 거부는 패킷이 도착했지만 거절되었다는 뜻입니다. 로그가 조용하다면 한 번의 시도 동안 플러그인의 디버그 수준을 올렸다가 그 뒤에 내리세요, 자세한 출력은 journal을 빠르게 채웁니다.

1단계와 2단계는 별개의 내기입니다

IKEv1은 두 번 협상합니다. 주 모드는 암호화 알고리즘, 무결성 알고리즘, Diffie-Hellman 그룹, 인증 방법으로 IKE 보안 연결을 만듭니다. 그다음 빠른 모드가 L2TP를 실어 나를 ESP 연결을 만듭니다. 서버는 첫 번째를 받아들이고 두 번째를 거부할 자유가 있으므로, 절반만 맞는 프로필은 예상보다 늦게 실패하고 다른 버그처럼 보입니다.

Phase 1: 3des-sha1-modp1024!
Phase 2: 3des-sha1!

느낌표는 strongSwan 구문에서 엄격한 항목을 뜻합니다, 이 하나의 조합만 제시하고 다른 것은 제시하지 말라는 뜻입니다. 그것이 없으면 항목은 대체 목록에 합류하는데, 상대가 현대적일 때는 좋고 단일 하드코딩 정책을 가진 장비일 때는 역효과입니다. 위의 쌍은 형식의 예시로 보세요, 오늘 만드는 무엇에 대한 권장 사항이 아닙니다.

한 필드를 바꾼 다음 테스트를 반복하세요

최신 플러그인에서는 가장 빠른 첫 테스트가 두 제안 필드를 완전히 비우고 다시 연결하는 것입니다, 함께 제공되는 기본 목록에 이미 일반적인 Windows와 Apple 조합이 들어 있기 때문입니다. 더 오래된 플러그인에서는 그것을 비우면 서버가 고집하는 알고리즘을 버렸을 수도 있는 데몬에게 제어가 돌아가고, 실패는 더 나빠집니다.

비우는 것이 도움이 되지 않으면 서버가 문서화한 엄격한 쌍을 한 번에 한 단계씩 설정하세요. 1단계를 바꾸고 다시 연결한 뒤 2단계를 건드리기 전에 로그를 읽으세요. 조합이 마침내 작동하면 서버 모델과 플러그인 버전 옆에 적어 두세요, 기본값은 다시 움직일 것이고, 그 메모가 다음 업그레이드를 오 분 점검으로 바꿔 줍니다.

관련 글