리졸버 설정이 사설 주소에서 공용 주소로 바뀌면 결론이 곧바로 따라온다. 터널이 새고 있다는 것이다. 때로는 정말 그렇다. 그러나 자주 폴백 질의는 여전히 터널 안에서 관리자가 고른 리졸버로 갔다. 그것은 결함이 아니라 정책 결정이다. 이 경우를 구분하려면 하나가 아니라 세 가지 사실이 필요하고, 그 첫째는 누가 응답했는가이다. 누가 질의를 받았는지, 어느 경로가 그것을 실어 날랐는지, 어떤 이름이 질의되었는지 확인하라.

폴백은 정책이며 하나의 동작이 아니다

선호 리졸버가 응답을 멈추면 각 클라이언트는 무엇을 할지 결정해야 한다. 해석을 막을 수도, 다시 시도할 수도, 설정된 대안을 쓸 수도, 운영체제에 맡길 수도 있으며 프라이버시 관점에서 이는 네 가지 다른 제품이다. 설정 화면을 읽으면 어떤 동작이 구성되었는지는 알 수 있지만 어떤 동작이 일어났는지는 알 수 없다. 스위치가 하나뿐인 화면은 네 가지 가능성을 설명하지 않는다.

브라우저는 자기 층을 더한다. 보안 DNS를 켠 브라우저 는 운영체제가 다른 곳을 가리켜도 자기가 고른 제공자를 통해 이름을 해석할 수 있다. 즉 정말 중요한 요청에 대해 터널 클라이언트의 정책이 한 번도 조회되지 않을 수 있다. 요청을 만든 애플리케이션을 확인하라. 시스템 설정만 보지 말고 확인하라.

대체 리졸버의 정체가 먼저 확립할 가치가 있는 첫 사실이다. 이미 신뢰하는 제공자에 속한 공용 리졸버는 우연히 접속한 네트워크가 준 주소와 다른 상황이다. 주소 자체는 둘 중 어느 쪽을 보고 있는지 거의 말해 주지 않는다.

전환 후 누가 질의를 받는가

수신자와 경로는 독립적이며, 오직 그 조합만이 노출을 설명한다. 터널을 통해 도달한 공용 리졸버는 당신의 접속망 주소를 결코 보지 못하지만, 같은 리졸버에 직접 도달하면 본다. 두 경우 모두 응답이 나오고, 리졸버 주소만 보고하는 유출 테스트는 둘을 똑같이 묘사할 것이다. 결과를 읽을 때 주소와 함께 인터페이스도 물어라.

내부 이름이 이 구분을 구체화한다. 공용 리졸버는 보통 분할 뷰 이름에 응답할 수 없어 질의가 실패하지만, 그 이름은 이미 볼 이유가 없는 상대에게 노출된 뒤다. 그래서 여기서 가용성과 프라이버시는 서로 맞바꾸지 않고 같은 방향으로 움직인다.

터널은 질의를 VPN 제공자가 운영하지 않는 리졸버로도 보낼 수 있다. 터널은 해석하지 않고 전달하기 때문이다. 전달하는 호스트는 평문 질의를 보고 자기 연결을 앞으로 연다. 이는 다음 홉을 보호하지만 첫 홉은 보호하지 않는다.

경로와 수신자를 함께 확인하라

구성이 아니라 패킷을 관찰하라. 어떤 리졸버가 쓰일지 시스템에 묻고, 그다음 질의가 정말 예상한 인터페이스에서 예상한 주소로 나갔는지 확인하라.

resolvectl status | grep -E "Current DNS Server|DNS Servers|DNSOverTLS"
dig +short example.com
tcpdump -ni any udp port 53 or tcp port 853

터널이 올라간 상태에서 질의가 물리 인터페이스를 떠나는 것이 캡처에 보이면, 리졸버 목록이 무엇을 말하든 폴백은 터널을 우회했다. 터널 인터페이스에 나타나면 질문은 누가 먼 쪽 끝을 운영하고 무엇을 보관하는가로 바뀐다.

내부 이름 하나와 공용 이름 하나로 확인을 반복하라. 내부 질의가 바로 폴백 구성이 스스로를 드러내는 지점이다. 응답할 수 없는 리졸버도 질문은 받기 때문이다.

폴백을 허용할지 결정하라

요구사항이 선호 리졸버를 쓸 수 없을 때 해석이 멈추는 것이라면, 닫힌 상태로 실패하는 시행 정책을 구성하고 결과를 받아들여라. 장애 중에는 이름이 해석되지 않는다. 그것은 오작동이 아니라 의도된 가용성 거래이며, 설계는 장애가 일어나기 전에 그렇게 적어야 한다.

요구사항이 질의가 터널 밖으로 나가지 않는 것뿐이라면, 터널을 통해 도달한 공용 리졸버는 운영자와 그 보관 정책을 이해하는 조건에서 수용할 수 있다. 그러한 수용은 암호학에 대한 주장이 아니라 제삼자에 대한 판단이며, 프라이버시 주장을 가진 사람의 몫이다. 내부 이름이 계속 동작해야 한다면 폴백은 내부 영역을 보유한 리졸버여야 하고, 이는 보통 대체 대상이 다른 주소 체계가 아니라 다른 서버라는 뜻이다.

결과를 동작에 관한 한 문장으로 기록하라. 정상 운영에서 어느 리졸버가 질의를 받는지, 장애 후에는 어느 쪽이 받는지, 두 번째 경우 내부 이름이 해석되는지. 마지막에 페이지가 열린다는 유출 테스트는 그 문장보다 약한 증거다. 페이지는 결코 물어보지 말았어야 할 리졸버를 통해서도 열릴 수 있기 때문이다.

관련 글