마지막 로그 줄 뒤에 터미널이 조용해져도 아무것도 멈춘 것이 아니다. 전면에서 실행되는 클라이언트의 예상된 모습은 이것이다 — 시작을 마쳤고 이제 그 자리에 앉아 트래픽을 나르고 있다. 셸 프롬프트는 보이는 것처럼 성공의 표시가 아니다.

메시지를 시작과 안정 상태 사이의 경계로 보라, 그것이 바로 이 메시지가 표시하는 것이기 때문이다.

메시지는 프로세스의 끝이 아니라 시작의 끝을 표시한다

OpenVPN이 그 줄을 출력하는 것은 장치를 열고, 인터페이스를 설정하고, 경로를 설치하고, 상대와 TLS 교환을 마친 뒤다. 그다음 프로세스는 터널을 열어 두고 패킷을 중계하는 것이 일이므로 계속 실행된다. 전면 프로그램은 그 일을 하는 동안 프롬프트로 돌아오지 않는다. 이후의 조용한 출력은 정상인데, 클라이언트는 무언가 바뀔 때만 말하기 때문이다.

줄이 나타난 뒤 연결이 나중에 끊긴다면 그것은 다른 사건이며, 로그가 나중에 그렇게 말할 것이다.

Ctrl+C는 결정이지 수리가 아니다

Ctrl+C를 누르면 인터럽트가 전달되고, 클라이언트는 그것을 종료 요청으로 처리한다. 프롬프트가 돌아오고 터널이 사라지며 그것을 쓰던 세션은 끝난다. 이것은 진전처럼 보이지만 실제로는 반대다. 목표가 지속 연결이라면 답은 프로세스를 터미널 없이 계속 돌릴 수 있는 곳으로 옮기는 것이지 중단하는 것이 아니다.

디버깅하는 동안에는 나중 오류가 같은 창에 계속 보이므로 전면에 두는 것이 옳다. 조용한 일 분은 어느 쪽도 증명하지 않으니, 출력을 지켜보는 대신 터널로 자원을 시험하라.

메시지가 증명하지 않는 것

완료는 클라이언트 자체 설정에 대한 국소적 진술이다. 상대가 응답한다거나, 설치한 경로가 필요한 것과 맞는다거나, 터널을 통한 이름 해석이 된다고 말하지 않는다. 분할 터널 프로필은 완전히 초기화되어 있어도 경로나 DNS 정책이 그것을 다룬 적이 없어 회사 공유가 닿지 않을 수 있다. 서버 측 인스턴스도 클라이언트를 받을 준비가 되면 비슷한 줄을 출력하는데, 그것은 어떤 클라이언트가 연결되어 있다는 것과 같지 않다.

‘서버가 시작됐다’와 ‘노트북이 공유를 열 수 있다’는 서로 다른 두 곳의 관찰이며, 이것을 섞으면 엉뚱한 호스트를 디버깅하게 된다.

터미널 없이 실행하기

상시 배포라면 플랫폼이 지원하는 서비스 구성을 쓰라. systemd 호스트에서는 프로필을 /etc/openvpn/client에 둔 openvpn-client@office 인스턴스이며, 재부팅을 견디도록 시작하고 활성화한다. Community OpenVPN은 --log 또는 --log-append와 함께 --daemon도 제공하는데, 이것은 프로세스를 분리하고 출력을 파일로 보낸다. 두 방식 모두 프로세스가 도는 방식을 바꿀 뿐, 어느 쪽도 경로를 고치지 않고 원격 애플리케이션을 건강하게 만들지 않는다.

이미 서비스가 관리하는 인스턴스 옆에 두 번째를 시작하지 않는지 확인하라. 같은 프로필을 요구하는 두 클라이언트는 혼란스러운 로그와 의도하지 않은 터널 하나를 만든다.

일감에 맞는 구성을 고르기

진단에는 전면, 세션보다 오래 살아야 하는 모든 것에는 서비스, 기댈 서비스 관리자가 없을 때는 데몬 모드. 이 셋이 일반적인 경우를 덮으며 각각 존재할 분명한 이유가 있다. 이 중 하나를 실수로 고르는 것이 ‘창을 닫을 때까지 작동한다’는 보고를 만든다.

터널이 남아야 한다면 나중에 재부팅 후 돌아오는지, 로그가 당신이 볼 곳에 남는지 확인하라. 초기화 줄도 그 로그에 나타나므로 그때는 아무도 터미널을 지켜볼 필요가 없다.

관련 글