Mac VPN 상태: 프로필, 리소스, 흐름 중 무엇을 확인할까
불리언 값 하나로는 세 가지 다른 질문에 답할 수 없습니다. 먼저 대상을 정하고, 실제로 그것을 보고하는 인터페이스를 사용하며, 실패 이유를 함께 남기십시오.
누군가 VPN이 올라와 있는지 묻는데, 세 사람은 서로 다른 세 가지를 의미합니다. 운영자는 Office 프로필이 인증을 마쳤다는 뜻입니다. 스케줄러는 프라이빗 API가 응답할 것이라는 뜻입니다. 보안 검토는 이 특정 요청이 보호된 경로로 나갔다는 뜻입니다. 인터페이스 이름을 찾으려고 라우팅 테이블을 grep하는 스크립트는 그중 어느 것에도 안정적으로 답하지 못합니다.
그래서 점검 목록은 어떤 명령이 실행되기 전에 시작됩니다. 점검의 대상에 이름을 붙이는 것이 첫걸음이며, 그 뒤의 모든 일은 그것을 실제로 보고할 수 있는 인터페이스를 고르는 일입니다.
명령보다 먼저 대상을 정하십시오
질문을 주어가 있는 술어로 적으십시오. «Office 프로필이 연결되었는가»는 검증 가능하고 답할 수 있는 소유자가 있습니다. «이 작업이 내부 API에 도달할 수 있는가»는 다른 실패 모드를 가진 두 번째 술어입니다. «이 요청이 보호된 경로를 사용하는가»는 세 번째이며, 전체 머신이 아니라 단일 흐름을 말하는 유일한 질문입니다.
이들을 섞으면 자신 있게 거짓말하는 자동화가 만들어집니다. 프로필 상태를 확인한 뒤 API도 준비됐다고 가정하는 작업은 잘못된 계층의 사람을 호출하고, API에 ping을 보내고 그것을 터널의 증거라고 부르는 작업은 작동하는 VPN과 사무실 네트워크에 우연히 있는 노트북을 구분하지 못합니다.
하나의 프로필: 그것을 소유한 대상에게 물으십시오
네이티브 Mac 서비스의 경우 scutil의 네트워크 연결 제어가 바로 이것을 보고합니다. 인터페이스에서 무언가를 추론하는 대신 이름이 지정된 구성의 상태를 읽습니다.
scutil --nc list
scutil --nc status "Office VPN"
그 명령의 프로필 이름은 목록 출력에서 나온 실제 이름이어야 하며 추측이어서는 안 됩니다. 이것은 네이티브 서비스를 위한 읽기 전용 경로이며, 서드파티 클라이언트가 거기에 아예 나타난다는 보장은 없습니다. 자체 터널을 관리하는 공급자는 자체적으로 지원되는 상태 인터페이스가 필요하므로, 상태 호출을 작성하기 전에 목록을 확인하여 없는 이름이 조용히 아무것도 일치하지 않는 대신 눈에 띄게 실패하게 하십시오.
Network Extension 앱 안에서는 시스템이 아니라 매니저와 연결 객체에서 상태를 읽으십시오. 다만 저장된 구성을 로드하면 호출한 앱이 만든 것만 반환되므로 범위를 주의해야 합니다. 빈 결과는 «내 것은 하나도 없음»을 뜻하며 «이 Mac에 VPN이 없음»이 아니므로, 실패한 조회와 확인된 연결 해제 상태를 구분하고 이미 올라오고 있는 연결을 다시 시도하는 대신 전환 상태를 그 자체의 결과로 다루십시오.
하나의 작업: 준비 상태는 별개의 술어입니다
질문이 작업이 진행될 수 있는지라면, 연결 소유자가 의도한 상태를 보고한 뒤 작업의 실제 의존성을 시험하십시오. 프라이빗 리소스에 대한 범위가 제한된 준비 점검이 올바른 형태이며, 작업에 필요한 것을 증명하고 그 이상은 증명하지 않습니다.
그래도 머신의 모든 요청이 터널을 쓴다는 것을 증명할 수 없으며, 증명할 수 있는 것처럼 보고해서는 안 됩니다. 마찬가지로 일반 네트워크로 응답하는 리소스는 VPN의 증거가 아니며, 그래서 두 점검은 둘 다 성공해도 분리된 채로 남습니다.
작업이 정말로 보호된 경로를 요구할 때, 그 요구사항에는 배포의 자체 적용 설계가 필요합니다. 라우팅, 분할 터널 제외, 방화벽 규칙 또는 애플리케이션 수준 요구사항입니다. 엔드포인트의 가용성은 서버에 관한 사실이지만, 적용은 클라이언트 구성에 관한 사실이며 하나가 다른 하나를 입증하지 않습니다.
하나의 흐름: 선택된 경로를 검사하십시오
단일 흐름의 경우 목적지, 주소 패밀리, 소스 컨텍스트를 그 특정 목적지에 대해 선택된 경로를 보고하는 라우팅 진단으로 확인하십시오. 그 출력은 실제로 사용된 인터페이스와 소스 주소를 지목하며, 이는 기본 경로 항목보다 훨씬 강한 주장입니다.
브라우저의 광범위한 점검은 전혀 다른 질문에 답합니다. 공인 IP 결과는 한 서버의 관점에서 한 요청이 어떻게 보였는지를 설명하며, 프라이빗 DNS, 제외된 애플리케이션 또는 다른 프로세스가 사용하는 두 번째 네트워크 컨텍스트에 대해서는 아무것도 말하지 않습니다.
호출자가 쓸 수 있는 결과를 반환하십시오
술어에 맞는 반환 형태를 고르십시오. 이름이 지정된 프로필 상태, 리소스 준비 판정, 또는 그것을 만들어 낸 근거와 함께 명시적인 알 수 없음이며, 판정 옆에 구성의 정체성과 실패 이유를 유지하십시오.
마지막 습관이 도움이 되는 자동화와 문제를 숨기는 자동화를 가릅니다. «Office VPN: 연결 끊김, 마지막 시도는 인증에서 실패»는 운영자에게 어디를 봐야 하는지 알려 줍니다. «VPN이 내려갔음»은 재설치를 부르고, «인터페이스를 찾음»은 거짓 안심을 부릅니다.
Network Extension 참조 문서(저장된 터널 구성 로드)는 그 위에 무엇인가를 만들기 전에 호출 앱의 범위를 확인하는 곳입니다.