VPN 연결 시 작업 실행: 이벤트, 폴링, 자격 증명 중 무엇을 쓸까
로그온 스크립트는 터널이 생기기 전에 실행된다. 네트워크 이벤트 트리거, 리소스 폴링, 저장된 자격 증명을 각각 무엇을 보장하는지로 비교한다.
드라이브를 매핑하거나 동기화 작업을 시작하는 로그온 스크립트는 터널이 주소를 받기 전에 실행되므로 조용히 실패하고 사용자는 매일 아침 직접 고친다. Windows는 대부분의 클라이언트에 VPN별 연결 콜백을 제공하지 않지만 네트워크 변경을 기록하며, 그 기록으로 적절한 순간에 작업을 시작할 수 있다. 선택은 그 기록에 반응하는 것, 리소스를 폴링하는 것, 실패를 드러나게 한 프롬프트를 없애는 것 사이에 있다.
세 가지 메커니즘을 보장 내용으로 비교하는 것이 세련됨으로 순위를 매기는 것보다 낫다. 각각 다르게 실패하며, 그 실패 방식이 이후에 함께 살아가야 할 것이다.
로그온이 너무 일찍 실행되는 이유
로그온과 시작은 VPN 어댑터가 주소를 받기 전에 실행되므로 그 순간 시도한 드라이브 매핑, 내부 URL, 데이터베이스 연결에는 경로도 확인자도 없다. 요청은 실패하고 세션은 사용자가 직접 고쳐야 하는 상태로 남는다. 같은 스크립트를 시작 폴더로 옮겨도 순서 문제가 함께 이동하므로 아무것도 달라지지 않는다. 트리거는 세션 이벤트가 아니라 네트워크 변경이어야 한다.
로그온 시 임의 지연을 둔 예약 작업은 해결책처럼 보이지만 실제로는 추측이다. 빠른 링크에서는 작동하고 느린 링크에서는 실패하며, 이는 가장 쓸모없는 종류의 신뢰성이다.
세 가지 훅 비교
메커니즘은 무엇을 관찰하는지, 얼마나 빨리 반응하는지, 하루 중 나중의 재연결에 무엇을 하는지에서 다르다. 표는 이 세 가지 점으로 비교하며 각각이 얼마나 영리하게 들리는지로 비교하지 않는다.
| Mechanism | Reacts to | Covers a mid-session reconnect | Typical failure |
|---|---|---|---|
| Network profile event | A network connect record | Yes, when the event repeats | Runs on the wrong network |
| Resource poll with backoff | The resource becoming reachable | Yes | Log noise and a wasted window |
| Stored credentials alone | Nothing; it removes a prompt | No | Still fires before the tunnel |
표를 행별로 읽어 보자. 이벤트 훅은 가장 빠르고 가장 시끄러우므로 Windows가 카페의 Wi-Fi를 포함한 모든 네트워크를 기록하기 때문에 작업은 무엇이든 하기 전에 리소스를 검증해야 한다. 폴링은 더 느리지만 더 정확한데, 공유 또는 호스트 이름이 응답할 때 정확히 성공하며 어느 클라이언트가 설치되었는지 알 필요가 없다. 저장된 자격 증명은 경쟁 옵션이 아니라 비밀번호 프롬프트를 제거하는 것이며, 이는 로그온 시 매핑이 실패하는 두 번째이자 독립적인 이유다.
처음 두 가지 중 선택은 클라이언트에 쓸 만한 이벤트가 있는지에 달려 있다. 있는 경우 이벤트와 리소스 확인의 조합이 더 나은 기본값이다.
이벤트 트리거를 올바르게 구성하기
기록은 Microsoft-Windows-NetworkProfile/Operational 로그에 있으며 ID 10001은 방금 연결된 네트워크를 표시한다. 해당 로그, 해당 공급자 이름, 해당 식별자를 대상으로 하는 이벤트 시 트리거로 작업을 만든다. 컴퓨터가 가입하는 모든 네트워크가 이를 발생시키므로 작업에는 가정이 아니라 보호 조건이 필요하며, 작업이 매핑된 드라이브를 건드린다면 사용자가 로그온한 동안에만 실행해야 한다.
보호 조건은 공유 경로나 서비스 포트처럼 작업이 실제로 필요로 하는 것을 테스트하고, 접근할 수 없을 때 조용히 종료해야 한다. 어댑터 이름을 테스트하는 것으로는 충분하지 않다. 클라이언트가 여러 프로필에서 하나의 어댑터를 재사용할 수 있기 때문이다. 조용한 종료는 로그를 읽기 쉽게 유지하고 리소스를 결코 제공하지 않을 네트워크에 대한 재시도 폭풍을 막는다.
작업이 적절한 순간에 실행되는지 테스트하기
구성이 아니라 타이밍을 증명하라. 아래 명령은 작업 정의, 최근 네트워크 프로필 이벤트, 작업이 실행되는 계정에서 리소스에 접근할 수 있는지를 보여 준다. 수동 시작 후가 아니라 실제 재연결 후에 실행하라.
schtasks /query /tn "VpnPostConnect" /v /fo LIST
Get-WinEvent -LogName Microsoft-Windows-NetworkProfile/Operational -MaxEvents 10
Test-Path \\fileserver\share
whoami
네트워크 이벤트가 일치하지 않는데 작업 기록 항목이 존재한다면 작업이 아니라 트리거가 잘못된 것이다. 이벤트는 나타나지만 작업이 실행되지 않는다면 그 작업은 리소스를 볼 수 없는 계정으로 실행 중일 수 있으며 계정 출력이 단서다. 매핑이 아직 없는데 리소스 검사가 통과한다면 연결성이 아니라 세션 컨텍스트를 가리킨다. 이 세 가지 관찰은 각각 다른 수정으로 이어진다.
실행마다 주소, 리소스 결과, 최종 결과를 담은 로그 줄을 하나씩 작성하라. 그러면 다음 실패에서 작업이 일찍 실행되었는지, 잘못된 네트워크에서 실행되었는지, 전혀 실행되지 않았는지 알 수 있다.