VPN은 연결됐다는데 아무것도 라우팅되지 않는다: 살펴볼 두 곳
경로 선택과 리졸버 등록은 서로 다른 방식으로 낡는다. 먼저 커널에 묻고, 다음으로 링크별 리졸버, 마지막으로 상위 연결을 확인한다.
터널은 연결됐다고 보고할 수 있지만 그곳에는 아무것도 도달하지 않는다. 하나는 경로 테이블로, 아무도 소유하지 않은 장치로 패킷을 계속 보내고 있을 수 있다. 다른 하나는 리졸버로, 사라진 링크의 서버를 여전히 나열하고 있을 수 있다. 네트워크 변경은 프로필을 망가뜨린 것이 아니라 이전 연결에 속해 있던 상태를 고아로 만들었고, 고치는 방법은 이 둘 중 무엇을 보고 있느냐에 달려 있다.
먼저 커널에 어떤 장치를 쓸지 묻는다
경로 목록은 무엇이 있는지를 보여 주고, 경로 조회는 무엇이 일어날지를 보여 준다. 공인 주소를 조회해 답에 나오는 장치 이름을 읽으면, 그 한 필드가 패킷이 쓸모 있는 곳으로 나가는지를 결정한다. 답이 터널 장치를 가리키면, 그 인터페이스 뒤에서 클라이언트 프로세스가 더 이상 돌지 않더라도 커널은 패킷을 그리로 넘긴다. 답이 물리 어댑터를 가리키는데 클라이언트가 연결됐다고 말한다면, 터널은 올라와 있지만 선택된 경로는 아니다.
두 번째 경우는 케이블이 무선을 대신한 뒤에 흔하며, 고장 난 VPN처럼 보인다.
ip route show default
ip route get 203.0.113.9다음으로 기본 경로 항목을 읽어라. 이전 기반 연결이 추가한 경로는 링크 변경보다 오래 살아남아 새 경로 앞에 설 수 있다. 꺼진 장치를 지나는 기본 경로는 커널이 여전히 그쪽을 선호하기 때문에 기본 경로가 없는 것보다 나쁘고, 각 항목 옆의 메트릭을 보면 그 순서가 인터페이스 이름보다 빠르게 우선순위를 설명한다.
다음으로 리졸버를 링크별로 읽어라
이름 해석은 자기 상태와 자기 낡음을 따로 지닌다. 링크마다 DNS 서버를 나열하는 리졸버는 내려갔지만 아직 등록된 터널 링크의 서버를 유지하고, 조회할 때마다 응답하지 않을 서버를 기다린다. 증상은 경로 테이블이 완벽해 보이는데 네트워크가 죽은 것처럼 느껴지는 것이다.
파일이 아니라 링크별 상태를 보아야 하는데, 많은 배포판에서 그 파일은 리졸버로 가는 심볼릭 링크이고 고쳐도 아무 일이 없거나 곧 덮어써지기 때문이다. 어느 링크가 어떤 서버와 어떤 검색 도메인을 가지는지 보고, 그 터널 링크가 아직 등록돼 있어야 하는지 물어라. 그래서는 안 된다면 생성된 상태를 손으로 고치는 대신 그것을 가진 연결을 비활성화하라. 경로 조회가 패킷을 다른 곳으로 보내는데 이름이 해석된다면 그것은 세 번째이자 별개의 결함이다.
resolvectl status
resolvectl query app.internal.example주소가 해석되고 연결이 실패한다면 리졸버는 정상이고 경로가 문제다. 주소가 아예 해석되지 않는다면 여기가 살펴보기 시작할 곳이다.
낡은 경로가 변경을 견디는 방법
클라이언트가 네트워크를 혼자 소유하지는 않는다. NetworkManager 호스트에서 VPN 프로필은 기반 연결 위에서 활성화되고, 연결 설정은 그 기반이 자신을 따라야 할 VPN을 지정하게 한다. 기반이 다른 프로필을 더 선호하게 되어 바뀌면 터널은 새 기반으로 옮겨 가거나 기반 없이 남는다.
VPN 프로필은 스스로 올라오지 않으므로 이 짝은 프로필 자체의 자동 연결 설정보다 훨씬 중요하다.
활성 목록을 읽고 터널을 건드리기 전에 어느 기반이 올라와 있는지 적어 두라. 기반은 목록에 있고 터널이 없다면 경로가 낡은 것이 아니라 없는 것이며, 고치는 일은 활성화다. 터널을 활성화할 때 원본 연결이 없다고 하면 짝이었던 기반이 사라진 것이므로, 터널을 다시 시도하는 대신 먼저 그 기반을 올리거나 짝을 고쳐라. 상위가 없는 프로필을 다시 시도하면 매번 같은 오류가 나는데, 이것은 성가심이 아니라 유용한 신호다.
nmcli device status
nmcli connection show --active
nmcli connection up office-vpn낡은 상태와 없는 상위를 구별하라
세 가지 상태가 거의 모든 보고를 설명하며 각각 고치는 방법이 다르다. 아직 존재하지만 터널을 더는 나르지 않는 장치를 지나는 기본 경로는 낡은 상태이며, 항목을 지우거나 책임 있는 프로필을 다시 시작해 없앤다. 클라이언트 프로세스가 사라진 터널 장치는 정리 실패이므로 관심은 경로 테이블이 아니라 연결 해제 경로에 가야 한다. 터널 장치가 전혀 없다면 상위나 짝이 없다는 뜻이고 경로 테이블은 처음부터 관련이 없었다.
재시작은 셋 중 무엇이었는지를 감추며, 바로 그래서 고쳐진 것처럼 느껴진다.
고친 뒤 커널에 공인 주소와 내부 주소를 하나씩 물어보고, 다음으로 내부 이름을 조회하라. 주소는 되고 이름이 안 된다면 찾은 것은 경로 문제가 아니라 리졸버의 도메인 범위 문제다. 어떤 상태를 찾았는지 적어 두어라, 다음 네트워크 변경이 손대지 않은 쪽을 다시 재현할 것이기 때문이다.