추가 Mac VPN 경로에는 소유자가 필요하고, 로그인 스크립트가 아닙니다
로그인 시 한 번 추가한 경로는 재연결 정책이 아닙니다. 원격 프리픽스에 소유자를 부여하고, 그 연결과 함께 나타나고 바뀌고 사라지는 방식을 정하세요.
VPN을 통해 사설 프리픽스에 도달하는 것은 기간이 있는 요구 사항입니다. 그 연결이 사용 가능한 동안 성립하고, 연결이 끝나면 끝납니다. 로그인 스크립트로는 이를 표현할 수 없습니다. 로그인과 터널이 올라오는 시점은 다르고, 로그인 시점에 존재하는 터널이 일 분 뒤 트래픽을 나르는 터널이 아닐 수 있기 때문입니다. 첫 번째 결정은 어떤 명령을 실행할지가 아닙니다. 어느 구성 요소가 프리픽스를 소유하는지입니다.
프리픽스에는 소유자가 필요하고, 순간이 아닙니다
요구 사항을 주어가 있는 문장으로 적는 것부터 시작하세요: 도달하세요 10.77.0.0/24 사무실 VPN을 통해, 그 연결이 올라와 있는 동안. 그 문장은 프리픽스, 연결, 조건을 지목하고, 인기 있는 두 대체물을 즉시 배제합니다: 로그인 훅과, 예를 들어 다음과 같은 인터페이스 이름입니다 ppp0 또는 utun2.
인터페이스 이름은 런타임에 할당되며 재연결 사이에 안정적이지 않습니다. 지난주에 본 이름과 일치하는 훅은 발동하지 않거나 다른 사람의 인터페이스에 발동합니다. 두 결과 모두 오래된 가정이 아니라 라우팅 버그처럼 보입니다. 같은 반론이 특정 터널이 올라와 있는 동안에만 존재하는 이름에 묶인 모든 스크립트에 적용됩니다.
지원되는 경로 의도의 출처를 사용하세요
게이트웨이, 관리형 프로파일 또는 소유 클라이언트의 문서화된 경로 메커니즘이 그 메커니즘으로 요구 사항을 표현할 수 있을 때 적절한 위치입니다. 어느 것이 적용되는지는 프로토콜과 공급자에 따라 다르고, 키는 서로 오가지 않으므로 값이 OpenVPN 프로파일을 구성해도 네이티브 L2TP나 IKEv2 클라이언트에 대해 알려 주는 것은 없습니다.
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
패킷 터널 개발자에게 Apple의 IPv4 터널 설정은 포함 및 제외 경로를 명시적으로 노출하며, IPv6에도 그에 상응하는 것이 있습니다. 이는 공급자가 사용하는 API이며, 모든 네이티브 VPN 패널이 관리자에게 임의의 경로 목록을 제공한다는 증거가 아닙니다. 현재 조합으로 필요한 프리픽스를 표현할 수 없다면 다음 단계는 운영자가 제공하는 지원되는 구성 경로이지, 더 잘 동작하기를 바라며 설치하는 다른 앱이 아닙니다.
수명에는 정리가 포함됩니다
때로 외부 도우미가 정말 필요하고, 그럴 때 «경로 추가»는 그 작업의 가장 작은 부분입니다. 어느 연결을 위해 일하며 그 연결이 어느 인터페이스를 쓰는지 알아야 하고, 관련 네트워크 상태가 안정될 때까지 기다려야 하며, 연달아 두 번 실행해도 멱등성을 유지해야 하고, 자신이 설치하지 않은 것은 정리하지 않아야 합니다.
마지막 조항이 아픈 부분입니다. 사무실 프리픽스와 일치하는 모든 경로를 지우는 도우미는 머지않아 자기가 추가하지 않은 경로도 지웁니다. 그 결과 생긴 장애는 VPN 클라이언트 탓으로 돌아갑니다. 사용자가 보는 부분이 클라이언트이기 때문입니다. 도우미가 무엇을 소유하는지 쓰기 전에 정하는 편이, 나중에 로컬 서브넷이 왜 응답을 멈췄는지 설명하는 것보다 쌉니다.
재연결 경쟁
빠른 재연결을 생각해 보세요. 세션 A가 끊기고, 세션 B가 올라와 자기 경로를 설치하고, 그다음 A의 지연된 정리가 마침내 실행됩니다. 그 정리가 경로를 프리픽스로 제거하면 B의 유효한 상태도 함께 가져가고, 일 초 전까지 작동하던 연결은 이제 아무 데도 라우팅되지 않습니다.
이것은 소유권 경쟁이며, 스크립트에 잠을 추가해도 어느 쪽이 이기는지만 바뀝니다. 해결책은 정리를 동일성에 조건부로 만드는 것입니다. 도우미가 설치한 인터페이스와 세션을 아직 유효한 것과 비교하고, 일치할 때만 제거하세요.
무엇을 테스트할지, 경로가 할 수 없는 일
승인은 네 가지 전환을 다뤄야 합니다. 첫 연결, 다른 인터페이스로의 재연결, 실패하는 연결 시도, 마지막 연결 해제입니다. 각각 뒤에 시스템이 원격 주소에 대해 실제로 고른 경로를 읽으세요. 기대한 경로가 아닙니다.
route -n get 10.77.0.5
netstat -rn -f inet
까다로운 경우도 같은 회차에 넣으세요. 필요한 곳의 IPv6, 원격 프리픽스와 겹치는 로컬 프리픽스, 그리고 터널이 올라와 있는 동안 계속 동작해야 하는 공용 VPN 엔드포인트 자체로 가는 경로입니다. 그다음 경로가 아닌 것을 적으세요. 경로는 패킷을 고를 뿐, 원격 측에서 권한을 주지 않고 반환 경로를 만들지 않으며, 그것들은 별도 소유자를 가진 별도 요구 사항으로 남습니다.
원하는 결과는 모든 전환에서 지원되는 연결 소유자를 따르는 프리픽스이지, 작성된 기기에서 한 번 우연히 성공한 명령이 아닙니다.