클라이언트는 연결됐다고 하고, 브라우저는 돌고, 모든 사이트가 시간 초과로 끝난다. 이 조합은 흔하며 모순이 아니다. 연결됨은 터널이 협상했다는 뜻일 뿐 그 이상이 아니다. 이름 해석, 라우팅, 서버 자체의 출구는 각자 다른 방식으로 실패하고 각자 담당이 다르다. 계층을 순서대로 확인하고 처음 실패한 곳에서 멈춘다.

출발한 네트워크부터 시작하세요

클라이언트 자체의 연결 해제 제어로 터널을 내리고, 정책이 허용하면 무관한 HTTPS 사이트 두 곳을 시험한다. 그 시험 동안 민감한 작업은 닫아 둔다. 일반 접속도 실패하면 VPN이 첫 용의자는 아니다.

터널을 건드리기 전에 Wi-Fi 링크, 공유기, 로그인을 요구하는 포털 페이지를 본다. 킬 스위치는 설계상 연결이 끊긴 동안 트래픽을 막을 수 있으므로 네트워크가 죽었다고 단정하지 말고 문서화된 시험 절차를 따른다. 다른 신뢰할 수 있는 네트워크는 유용한 비교이고, 새 VPN 출구는 만료된 호텔 로그인을 끝내 주지 않는다. 열린 네트워크가 되고 터널이 안 되면 네트워크는 무혐의이며 다음 계층이 내 몫이다.

실패가 이름 해석인지 판단하세요

오류 문구를 적어 둔다. 해석 실패, 시간 초과, 인증서 경고는 각각 다른 곳을 가리킨다. 일찍 잡아야 할 패턴은 한 번도 가 본 적 없는 호스트 이름이 실패하는데 열린 세션의 앱은 계속되는 경우다. 이 패턴은 새 조회에 관한 것이지 터널이 패킷을 나르는지와는 다르다. 조회 한 번이면 리졸버가 무엇을 돌려주는지 보이고 일 초면 된다. 두 번째 이름도 시험해, 캐시된 응답 하나나 깨진 레코드 하나가 진단을 결정하지 않게 한다.

nslookup example.com

HTTPS 주소창의 임의 IP는 DNS 시험이 아니다. 인증서와 가상 호스트가 보통 이름에 달려 있기 때문이다. 내부 이름은 공용 대체 리졸버 대신 조직의 리졸버가 필요할 수 있고, 자체 보안 리졸버를 가진 브라우저는 운영체제 조회와 다르게 답할 수 있다. 둘이 어긋날 때 사용자가 겪는 것은 브라우저의 리졸버이며, 그 구분은 티켓에 들어가야 한다.

전체 터널인가, 회사 서브넷만인가

어떤 프로필은 회사 서브넷 몇 개에 닿기 위해서만 존재하고, 다른 프로필은 모든 것을 나르도록 만들어져 뒤에 동작하는 출구가 필요하다. 표시가 모든 앱과 모든 주소 체계를 덮는다고 가정하기 전에 문서화된 목적을 읽는다. 사설 네트워크 프로필은 설계대로 정확히 동작해도, 그것을 쓸 일이 없던 브라우저는 여전히 실패할 수 있다. 라우팅 표를 바꾸지 않고 읽고, IPv6도 포함한다. 동작하는 IPv4 경로는 다른 체계에 대해 아무것도 말해 주지 않는다.

기본 경로가 남아 있어도 더 구체적인 경로가 이길 수 있으므로 표는 가정하지 말고 읽어야 한다. 경쟁하는 가상 어댑터가 다른 곳에서 기대한 트래픽을 차지할 수도 있고, 특히 두 번째 VPN 클라이언트를 설치하고 잊은 뒤에 그렇다. 실험 삼아 기본 경로를 지우지 않는다. 진단이 두 번째 장애가 된다.

동작하는 사이트 사이에서 하나만 실패하면 그 사이트의 문제이며, 터널이 트래픽을 나르고 있다는 증거이기도 하다. 큰 전송에서만 나타나는 멈춤은 도달성이 아니라 패킷 크기를 가리킨다.

서버가 아무것도 전달하지 않을 때

두 기기와 두 접속 네트워크에서 모든 목적지가 실패하면 터널은 올라왔고 출구가 전달하지 않는 것이다. 이 짝이 서버 측 실패와 한 곳에서 잘못 설정된 한 기기를 구분한다. 운영자에게 표시의 스크린숏이 아니라 전달, NAT, 반환 경로 질문을 보낸다.

이 셋이 서버 측 원인의 대부분을 덮고, 답하는 것은 운영자의 몫이다. OpenVPN 연결 문제 해결 페이지도 서버 쪽에서 같은 질문을 다루므로 티켓과 함께 넘긴다. 초록 표시의 스크린숏은 그중 어느 것에도 답하지 않는다.

로그인 뒤 클라이언트 로그에서 경로, DNS 설정, 가상 어댑터 적용 실패를 살핀다. 그 단계의 오류는 서버가 아니라 기기를 가리킨다. 로그에 한 번도 나타나지 않는 오류도 똑같이 유용하다. 의심을 반대편으로 옮기기 때문이다.

한 번에 한 계층만 확인하세요

무언가를 바꾼 뒤 다시 연결하고 실패했던 바로 그 앱을 반복한다. 페이지 하나가 열리는 것은 프로필이 목표한 자원으로 가는 반복 가능한 경로보다 약한 증거다. 두 명령이 해석과 도달성을 나누며 두 번째는 호스트에 따라 다르다. curl 줄은 어디서든 실행하고, 그다음 눈앞의 호스트에 맞는 라우팅 명령을 실행한다.

curl -sS -o /dev/null -w "%{http_code}" --max-time 5 https://example.com
route print -4          # Windows
ip -4 route show        # Linux
netstat -rn | head      # macOS

숫자 요청이 되고 이름이 안 되면 DNS에 머문다. 둘 다 안 되면 라우팅 표를 터널의 기대 기본값과 비교하고 실제로 시험하는 주소 체계를 확인한다. 경로가 맞는데 요청이 여전히 출구에서 죽으면 남은 질문은 운영자의 것이고, 남겨 둔 증거가 티켓이다.

관련 글