Windows에서 OpenVPN이 부팅 시가 아니라 로그인 시 시작되는 이유는?
시작 바로 가기는 자동 서비스가 아니라 데스크톱 앱을 실행합니다. 파일을 옮기기 전에 소유자가 어떤 프로필 원본을 읽는지 확인하세요.
누군가 로그인한 뒤에만 나타나는 터널은 보통 자동 서비스가 아니라 그 사람의 세션이 실행합니다. 흔한 원인은 openvpn-gui.exe을 실행하는 시작 바로 가기이며, 설치가 깨진 것은 아닙니다. 바로 가기는 사용자 세션 안에서 데스크톱 앱을 실행하며, 그 사용자의 프로필, 인증서 저장소, 프롬프트에 응답할 수 있는 권한을 그대로 물려받습니다. 그 어느 것도 연결을 로그인한 사람으로부터 독립시키지 못하며, 로그인 전 터널에 필요한 것은 바로 그것입니다.
증상에는 보통 세 가지 원인이 있습니다
세 가지 패턴은 겉으로 보면 비슷하지만 해결책은 다릅니다. 첫째는 실행 소유자가 서비스가 아니라 사용자 세션인 경우이며, 이것이 시작 바로 가기 사례입니다. 둘째는 서비스가 보지 않는 위치에 있는 프로필이며, 그러면 서비스는 시작하지만 아무것도 찾지 못하고 조용히 종료됩니다. 셋째는 서비스가 찾아서 시작하는 프로필이지만 자격 증명에 서비스가 제공할 수 없는 상호 작용이 필요한 경우입니다.
어느 경우인지 판별하려면 두 가지를 읽어야 합니다: 서비스가 무엇을 실행하도록 구성되었는지, 그리고 어떤 파일을 볼 수 있는지입니다. 둘 다 명령 하나씩이며, 어느 것도 실행 중인 연결을 방해하지 않습니다.
자동 서비스가 실제로 읽는 것
Community 자동 서비스는 구성된 자동 시작 디렉터리(보통 설치 폴더 아래의 config-auto)를 검사하고 찾은 일치 프로필마다 OpenVPN 프로세스를 실행하는 래퍼입니다. 사용자의 GUI 메뉴에 보이는 프로필은 대신 그 사용자의 로밍 프로필 아래, 서비스 계정이 읽지 않는 디렉터리에 있습니다. Windows 서비스 안내서가 그 검색 방식을 설명하며, 무엇이든 복사하기 전에 읽어 볼 가치가 있습니다, 대상 디렉터리는 고정 관례가 아니라 설치의 속성이기 때문입니다. 따라서 파일을 GUI 폴더로 복사해도 서비스에는 아무 변화가 없고, config라는 모든 폴더에 복사하면 해결이 아니라 중복만 생깁니다.
Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'
마지막 명령은 래퍼가 실제로 무엇을 보게 되는지 나열하며, 프로필이 잘못된 위치에 있음을 확인하는 가장 빠른 방법입니다. 둘째 줄은 서비스가 어떤 계정으로 실행되는지도 보여 주며, 그 계정이 어떤 파일 경로와 인증서 저장소에 접근할 수 있는지를 결정합니다.
데스크톱 로그인은 되고 부팅 시작은 안 되는 이유
데스크톱에서의 성공은 입력 의존성을 오랫동안 숨길 수 있습니다. 보이는 데스크톱이 있는 대화형 세션에서 실행되므로 GUI는 키 암호, 계정 암호 또는 두 번째 인증 요소를 대화 상자에서 수집할 수 있습니다. 서비스는 데스크톱이 없는 세션에서 실행되므로 입력 요청이 나타날 곳이 없고, 연결은 자격 증명 문제와 전혀 닮지 않은 시간 초과 후에 실패합니다.
파일 접근도 같은 규칙을 따릅니다. 사용자 프로필 아래에 저장된 개인 키나 사용자의 개인 저장소에 있는 인증서는 컴퓨터 계정으로 실행되는 서비스에서 사용할 수 없습니다. 같은 프로필 파일이 같은 환경을 뜻한다고 가정하지 말고 절대 경로, 권한, 그리고 각 측이 선택하는 인증서를 비교하세요.
사용자 로그온 여부와 관계없이 실행되도록 설정한 예약 작업도 비슷한 제약을 물려받습니다. GUI 실행 파일을 성공적으로 시작하고도 자격 증명을 전혀 얻지 못하는 프로세스를 만들 수 있으므로, 작업 관리자에 프로세스가 있다는 것이 작동하는 터널의 증거는 아닙니다.
소유자를 하나 고르고 실제 수명 주기를 시험하세요
로그인한 사람에게 속한 연결이라면 GUI가 지원하는 자동 시작 동작을 사용하고 서비스는 배제하세요. 누구든 로그인하기 전에 존재해야 하는 터널이라면 서비스를 구성하고, 프로필을 래퍼가 읽는 위치에 두며, 대화형 암호가 없는 키나 문서화된 자격 증명 파일 같은 지원되는 무인 자격 증명 방식을 사용하세요.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
중요한 수명 주기를 시험하세요: 아무도 로그인하지 않은 재부팅, 그다음 네트워크 변경 후의 재연결입니다. 연결에는 소유자를 하나만 두세요, 경쟁하는 두 시작 메커니즘은 보통 같은 경로와 같은 서버 세션을 두고 다투는 두 인스턴스를 만들며, 진단하기가 어느 한 메커니즘보다 어렵습니다.