wg-quick 연결 시 DNS가 깨진다: 설정 오류를 읽어라
DNS 줄은 피어 프로토콜이 아니라 설정 도우미에 속한다. 첫 오류를 읽고, 리졸버 경로를 확인하고, 정리가 이전 상태를 복원하는지 확인하라.
터널이 올라오고 핸드셰이크가 끝나면 이름 확인이 멈춘다. 피어 구성에서는 아무것도 바뀌지 않았는데, DNS 줄은 애초에 피어 구성의 일부가 아니었기 때문이다. 이 줄은 설정 도우미에 속하므로, 실패는 WireGuard 키가 아니라 호스트의 리졸버 도구에 있다.
마지막 것이 아니라 도우미가 출력한 첫 번째 메시지를 읽으면 도구가 없는 것과 서버에 닿지 않는 것의 차이가 분명해진다.
DNS 줄은 도우미의 기능이다
핵심 구성 필드는 피어, 키, 허용 주소를 설명한다. 이름 확인은 인터페이스를 올리는 스크립트가 위에서 덧붙이며, 구현마다 방식이 다르다. 데스크톱 클라이언트는 자체 서비스로 DNS를 관리할 수 있고, 배포판 스크립트는 여러 리졸버 도구 중 하나를 부를 수 있으며, 컨테이너는 둘 다 하지 않을 수 있다. 구성 파일만으로는 어느 경로가 동작 중인지 알 수 없다.
그래서 구성 파일이 프로토콜상 유효해도 설정 도중 실패할 수 있는데, 실패는 프로토콜이 결코 보지 못하는 훅에 속하기 때문이다.
확장 필드를 핵심 구성에 쓰고 프로토콜 도구가 받아들이리라 기대하면 반대 방향에서 같은 혼란이 생긴다. 두 파서는 서로 다른 파일을 읽는다.
어느 쪽이 실행 중인지 아는 것이 첫 진단 단계이며, 보통 구성 파일이 아니라 입력한 명령에서 드러난다.
도우미가 출력하는 첫 오류를 읽어라
인터페이스를 포그라운드에서 올리고 출력을 순서대로 읽어라. 리졸버 도구 부재, 훅 실패, 서버 도달 불가는 같은 명령을 각기 다른 지점에서 멈추며, 고치는 방법도 각각 다르다.
wg-quick up wg0
resolvectl status wg0
ip route get 10.66.0.1
첫 명령은 설정 진행을 보고하고, 둘째는 인터페이스가 지금 어떤 서버를 주장하는지 보여 주며, 셋째는 리졸버 주소가 실제로 터널을 통해 도달 가능한지 보여 준다. 설정되었지만 라우팅되지 않는 리졸버는 구성 오류 대신 시간 초과를 낳는다. 그래서 두 확인은 함께 하며, 상태 출력만 읽으면 자신만만하고 틀린 결론에 이른다.
설정이 끝났는데도 이름 확인이 실패하면, 도우미가 설치한 리졸버를 네트워크가 이전에 쓰던 리졸버와 비교하라. 사설 리졸버는 터널을 통한 경로가 필요하며, 그 접두사를 덮지 않고 나열하는 구성은 모든 질의를 기다리게 둔다.
호스트가 실제로 가진 리졸버
현대의 Linux 호스트는 흔히 로컬 스텁 리졸버를 실행하므로, 도우미가 설치한 주소는 애플리케이션이 아니라 그 스텁이 소비한다. 생성된 파일을 손으로 고치는 것은 다음 재연결 때 도우미가 다시 쓰기 전까지는 동작하는 것처럼 보일 수 있다.
배포판이 지원하는 통합을 쓰고 리졸버 상태는 한 구성 요소만 소유하게 하라. 소유자가 둘이면 인터페이스 주소의 소유자가 둘일 때와 같은 경쟁이 생기고, 증상은 변경 때마다 몇 분 동안만 올바르게 확인하는 호스트다.
내부 이름은 따로 확인할 가치가 있다. 공용 리졸버는 일반 탐색을 되살리면서 모든 사내 이름을 실패하게 만들 수 있는데, 이는 터널의 목적과 정반대다. DNS가 고쳐졌다고 결론 내리기 전에 의도한 서버에 내부 이름을 질의하라.
정리는 설정만큼 중요하다
인터페이스를 내리고 리졸버 상태를 다시 살펴라. 이전 구성을 복원하는 도우미는 호스트를 쓸 수 있게 남기고, 자기 서버를 남기는 도우미는 흔히 터널이 오래전에 사라진 뒤 몇 시간 후에 다음 실패를 만든다.
오래된 상태는 찾기 시작하면 쉽게 보인다. 리졸버 목록이 더 이상 없는 인터페이스의 주소를 가리킬 수 있고, 검색 도메인이 오늘 아침 떠난 네트워크에서 살아남을 수 있다. 둘 중 하나만으로도 다음 연결이 예측 불가능해지며, 둘 다 터널 자체의 상태 출력에는 나타나지 않는다. 확인은 십 초면 되고 다음 사람의 한 시간을 아낀다.
진단을 수리와 분리하라. 만약 이름 조회뿐 아니라 모든 목적지가 실패한다면, 경로와 포워딩이 용의자이며 DNS 줄은 주의를 흩뜨리는 것이다. wg-quick 설명서 는 어떤 필드를 다루고 어떤 것이 프로토콜에 속하는지 기록하며, 그 경계가 이런 보고 대부분에 대한 완전한 답이다.