NetworkManager는 하나의 속성, vpn.persistent를 노출하며, 사람들은 이 속성이 한 번에 네 가지 다른 질문에 답하기를 바랍니다. 상류 문서는 신중하며, 지속성은 VPN 서비스가 지원하고 프로필이 활성화할 때 적용되고, 그다음 연결은 명시적 연결 해제까지 링크 변경과 중단을 견디도록 요청받습니다. 같은 문서는 이 속성의 기본값이 false라고도 밝히는데, 이는 대부분의 복구 계획이 가정하는 바가 아닙니다. 결과에 대한 약속이 아니라 시도에 대한 요청으로 읽으십시오.

이 설정이 실제로 약속하는 것

프로필에 저장된 값은 관리자에 대한 지시이며, 관리자는 그 지시를 어떻게 다룰지 아는 VPN 플러그인에 넘겨야 합니다. 설치된 플러그인이 이 속성을 무시하면 프로필은 그래도 활성화되고 로그는 조용히 남는데, 나중에 디버깅할 사람에게는 두 세계의 최악입니다. 프로필 안의 어떤 것도 플러그인이 갖지 않은 동작을 구현하도록 강제할 수 없으므로, 유일하게 보이는 결과는 부재입니다.

그래서 문서에 있는 조건이 스위치보다 더 중요합니다. 실제로 어떤 플러그인과 어떤 릴리스가 있는지 확인하고, 다음 사람이 그것을 다시 발견하지 않도록 연결 설명 옆에 버전을 적어 두십시오. 구현되지 않은 플래그 위에 세운 복구 정책은 운영 환경에서 정확히 한 번 실패하며, 언제나 가장 불편한 순간에 실패합니다.

속성을 시도로 취급하면 테스트에 대한 기대도 올바르게 설정됩니다. 플래그가 설정되었는지 확인하는 것이 아니라, 링크가 끊겼을 때 무슨 일이 일어났는지 확인합니다. 이는 서로 다른 실험이며, 둘 중 하나만 오후 시간을 들일 가치가 있습니다.

하나로 합쳐지는 네 가지 질문

활성화는 VPN을 애초에 무엇이 올리는지를 묻습니다. NetworkManager 프로필은 기본 연결에 묶일 수 있고, 별도로 관리되는 OpenVPN 서비스는 자체 시작 절차를 가지며, 그 구성에 세 번째 실행기를 더하면 누가 주도하는지에 대한 생각이 다른 두 소유자가 생깁니다. 또 다른 트리거를 추가하기 전에 어느 구성 요소가 시작을 소유하는지 정하십시오.

복구는 링크가 바뀌거나 사라질 때 무슨 일이 일어나는지를 묻고, 그것이 vpn.persistent가 다루는 좁은 질문입니다. 활성도는 클라이언트가 상대편의 응답 중단을 알아챌 수 있는지 묻고, 그 대신 OpenVPN의 keepalive나 재시작 동작이 그 답을 합니다. 두 메커니즘은 종종 같은 단어로 설명되고 서로 다른 곳에서 구현되므로, 서로 다른 도구로 따로 테스트하지 않으면 한 동작을 다른 동작에 귀속시키게 됩니다.

의도는 재연결이 애초에 원하는 것인지를 묻고, 이것은 상태 폴링으로 답할 수 없는 질문입니다. 의도적 중지와 장애는 같은 비활성 상태를 만들므로, 부재를 근거로 재연결하는 것은 인간의 결정을 추측하는 셈입니다. 추측은 누군가를 덮어쓰는 순간까지는 괜찮습니다.

이들을 분리해 두는 점검 목록

구성을 읽고 그에 대해 추론하는 대신 이벤트를 순서대로 실행하고, 각각이 무엇을 보여 주는지 타임스탬프와 함께 기록하십시오.

첫째, 의도한 기본 연결을 활성화하고 VPN이 기대한 트리거를 통해 올라왔는지, 설치한 줄 잊었던 메커니즘을 통한 것이 아닌지 확인하십시오. 둘째, 승인된 중단 중에 관리자의 VPN 이벤트, 소유 클라이언트의 복구 상태, 그리고 프라이빗 리소스에 대한 새 요청을 비교하십시오. 셋째, 의도적으로 연결을 끊고 기다린 뒤 뒤에서 아무것도 프로필을 다시 시작하지 않는지 확인하십시오.

세 번째 단계가 사람들이 건너뛰는 단계이고, 실제 결함을 가장 자주 찾아내는 단계입니다. 활성 프로필을 폴링하고 없으면 재연결하는 감시자는 사용자의 의도적 연결 해제를 유쾌하게 되돌립니다. 사용자 입장에서 그것은 복원력이 아니라 명령을 따르지 않는 기계입니다. 하나를 추가하기 전에 그들에게 물어보십시오.

결과를 연결 설명과 같은 문서에 적으십시오. 복구 정책은 누군가 일부러 실패하는 모습을 마지막으로 본 때만큼만 좋습니다. 타임스탬프는 다음에 메모를 읽는 사람에게 그 차이를 보이게 합니다.

인증은 복구의 일부입니다

재연결은 순전히 네트워크 작업이 아닙니다. 승인된 흐름이 새로운 과제, 일회용 코드, 또는 활성화 컨텍스트가 닿을 수 없는 비밀을 필요로 한다면, 어떤 지속성 설정도 그것을 무에서 만들어 낼 수 없습니다.

이것은 익숙한 패턴, 즉 키링이 잠금 해제된 기기에서는 연결이 복구되지만 같은 기기에서도 재부팅 후에는 실패한다는 점을 설명합니다. 네트워크 계층은 요청받은 대로 정확히 했고, 자격 증명 계층에는 내놓을 것이 없었습니다.

재시도 간격을 줄이는 대신 자격 증명 워크플로를 고치십시오. 아무도 답할 수 없는 프롬프트에 대한 더 빠른 재시도는 로그 소음과 무언가 시도되고 있다는 잘못된 인상을 만듭니다.

지속성은 kill switch가 아닙니다

이 속성은 VPN 관계를 유지하거나 복원하려고 합니다. VPN이 내려가 있는 동안 애플리케이션이 무엇을 할 수 있는지는 결정하지 않으며, 그 자체로 아무것도 차단하지 않습니다.

터널 밖으로 어떤 트래픽도 나가지 않아야 한다는 것이 요구 사항이라면, 그것은 자체 메커니즘과 자체 테스트, 자체 실패 모드를 가진 별도의 정책입니다. 지속성이 그것을 포괄한다고 가정하면 보안 결정이 사고로 바뀝니다.

복구 메모에 VPN이 무엇을 시도했는지, 그리고 시도가 진행되는 동안 어떤 애플리케이션 트래픽이 허용되었는지를 모두 기록하십시오.

관련 글