Tor와 VPN을 함께 쓰면 DNS는 어디로 갈까
Tor Browser, 운영체제, 터널 클라이언트는 각각 다른 이름을 다른 경로로 확인할 수 있습니다. 누출이라고 부르기 전에 그 교환을 추적하세요.
프라이버시 도구 두 개가 실행 중이고, 한 페이지가 열리지 않으며, 리졸버 테스트는 브라우저 밖의 무언가가 이름을 받았다고 말한다. 그것이 누출 보고서가 되기 전에 어느 교환에서 왔는지 이름을 붙여라. Tor와 VPN 구성에는 최소한 서로 다른 소유자의 서로 다른 세 가지 이름 조회이 있으며, 일어나는 순서대로 살펴보는 것이 어느 것이 잘못 동작하는지 보는 가장 빠른 길이다.
누출이라고 부르기 전에 각 교환에 이름을 붙여라
첫 번째 교환은 VPN 엔드포인트 자체를 확인하며, 어떤 보호도 존재하기 전에 일어난다. 두 번째는 Tor Browser를 위한 목적지를 확인하는데, 브라우저는 이름을 로컬에서 확인하지 않고 프록시에 넘길 수 있다. 세 번째는 업데이트 확인, 메일 클라이언트, 운영체제 자체의 서비스 조회를 포함해 머신의 나머지 전부를 다룬다. 다른 둘이 관여하지 않고 일어날 수 있는 것은 첫 번째뿐이다.
각각 다른 경로를 따를 수 있고, 브라우저에서의 한 번의 테스트는 자기 요청만 본다. 하나의 결과를 셋 모두의 상태로 삼는 것이 혼란의 대부분이 시작되는 지점이다.
무엇이든 바꾸기 전에 어느 이름이 어느 계층에 속하는지 적어 두라. 사설 조직 이름, 공개 목적지, 터널 엔드포인트 자체는 같은 요구 사항을 갖지 않으며, 이들을 한 범주로 취급하는 정책은 무언가를 망가뜨린다.
부트스트랩 조회는 터널 전에 일어난다
호스트 이름으로 구성된 클라이언트는 터널을 열기 위해 그 이름을 확인해야 하고, 그 순간 조회를 실어 나를 터널은 존재하지 않는다. 현재 네트워크에서 운영체제가 제공하는 리졸버가 응답하며, 그것은 캡티브 포털, 호텔 리졸버, 공개 리졸버일 수 있다. 아직 터널이 없기 때문에 이것은 터널 안의 누출이 아니다.
브라우저의 보안 DNS 설정을 바꾸는 것도, 그것이 브라우저 밖에서 실행되고 어떤 페이지를 열기 전에 시작하는 서비스에 속하므로 이 조회에는 닿지 않는다. 엔드포인트 이름이 확인되지 않으면, 실패가 구성이 설명하는 모든 것보다 한 단계 앞서 일어나므로 터널 안의 어떤 정책도 도움이 되지 않는다.
엔드포인트에 리터럴 주소를 쓰는 것이, 제공자가 지원한다면, 의존성을 더하지 않고 없애는 유일한 지점이다. 주소를 돌리는 제공자를 따르는 능력도 없애므로, 이 맞바꿈은 실제이며 발견하기보다 결정해야 한다.
브라우저와 나머지 머신은 다르다
Tor의 SOCKS 인터페이스는 목적지 호스트 이름을 프록시로 넘기는 것을 지원하며, 즉 먼 쪽이 확인을 수행하고 로컬 머신은 묻지 않는다. 프록시를 지원하는 일반 애플리케이션은 이름을 먼저 로컬에서 확인한 뒤 얻은 주소로 연결할 수 있고, 그러면 사용자가 프록시를 거친다고 믿었던 목적지에 로컬 조회가 생긴다. 따라서 두 애플리케이션은 하나의 프록시 설정을 공유하면서 서로 다른 곳에서 누출될 수 있다. 공유 프록시 주소만으로는 두 동작 중 어느 것이 쓰이는지 알 수 없다.
브라우저는 보안 DNS가 켜져 있을 때, 자체 제공자를 고르고 시스템 리졸버를 완전히 우회할 수 있어 한 겹을 더한다. 한편 터널 클라이언트는 머신 전체를 위해 리졸버를 터널을 통해 밀어 넣을 수 있다. 이 두 설정은 모두 올바르면서도 서로 다른 프로그램에 서로 다른 동작을 설명할 수 있다.
테스트 페이지 하나에서 일반화하지 말고 요청을 만든 프로그램을 확인하라. 터널 안에서 실려 가는 조회와 Tor에 전혀 도달하지 않은 조회의 차이가 바로 리졸버 주소 하나가 보여 줄 수 없는 차이다.
각 프로그램을 확인한 뒤 의도와 비교하라
관찰은 시스템이 무엇을 쓸지, 브라우저가 무엇을 쓰도록 구성됐는지, SOCKS 연결이 이름을 실어 나르는지 주소를 실어 나르는지 따로 하라. 마지막이 원격 확인과 로컬 확인의 차이이며, SOCKS 확장 규격은 호스트 이름이 먼저 확인되는 대신 어떻게 전달되는지 설명한다.
resolvectl status | grep -E "Current DNS Server|DNS Servers"
ss -tnp '( dport = :9050 )'
dig +short dev.internal.example
getent hosts vpn-endpoint.example.net
그다음 관찰한 것과 의도한 것을 비교하라. 당신이 고른 리졸버가 터널을 통해 확인한 공개 이름은 폴백 때 공개 리졸버에 넘긴 사설 이름과 같은 발견이 아니며, 보통 두 번째만 조치가 필요하다. 첫 번째는 설계대로 동작하는 구성이며, 보고서에서 낯설게 보이더라도 그렇다.
받아들인 예외를, 보호할 수 없는 부트스트랩 조회도 포함해 기록하라. 기록된 예외는 설계 결정이지만, 같은 예외가 나중에 발견되면 결함처럼 보인다. 발견한 사람은 그렇게 취급할 것이고, 당신은 왜 그렇지 않은지 회의 내내 설명하게 될 것이다.