hosts 파일의 항목과 라우터 필터는 전혀 다른 이유로 같은 사이트를 차단하므로, 하나는 VPN 아래에서도 계속 작동하고 다른 하나는 조용히 멈춥니다. hosts 파일은 어떤 패킷이 기기를 떠나기 전에 이름에 답합니다. 라우터 필터는 자신을 지나가는 트래픽을 검사합니다. 그 두 지점 사이에 터널을 두면 후자는 시야를 잃고 전자는 아무것도 알아차리지 못합니다.

이름이 어디서 해석되는지가 모든 것을 결정한다

모든 차단은 한 가지 질문으로 시작합니다: 누가 이름을 주소로 바꾸는가? 일반 데스크톱에서는 설정된 순서를 따르며 보통 DNS에 묻기 전에 hosts 파일을 읽는 시스템 리졸버가 답합니다. 필터링된 네트워크에서는 라우터가 답할 수 있는데, 클라이언트가 보호 없이 라우터를 통해 질의를 보낼 때만 그 질의를 봅니다. 경로를 바꾸면 누가 답할 권한이 있는지도 바뀝니다.

VPN은 여기서 두 가지를 동시에 합니다: 기본 경로를 옮기고, 자체 DNS 서버를 밀어 넣을 수 있습니다. 두 변화 중 어느 하나만으로도 이름 해석을 차단을 적용하던 기기에서 떼어낼 수 있습니다.

VPN을 연결하기 전까지는 필터가 작동한다는 익숙한 불만의 배경에 있는 원리입니다.

hosts 항목은 터널이 생기기 전에 답한다

127.0.0.1 www.example.com 같은 줄은 로컬 리졸버가 읽으므로 네트워크 없이 기기에서 답이 만들어집니다. 터널을 연결하고, DNS 서버를 바꾸고, 네트워크를 전환해도 항목은 여전히 loopback을 돌려줍니다. 그래서 hosts 차단만은 VPN이 어디서 끝나는지에 영향을 받지 않습니다.

그 사각지대도 똑같이 로컬합니다. 자체 리졸버를 품은 앱, DNS over HTTPS로 통신하는 앱, 리터럴 주소로 접속하는 앱은 시스템에 묻지 않으므로 항목이 조회되지 않습니다. 실행 중인 프로세스 안에 캐시된 주소도 그 프로세스가 다시 시작될 때까지 같은 효과를 냅니다.

브라우저 탭을 믿는 대신 Linux에서는 getent ahosts, Windows에서는 Resolve-DnsName으로 답을 확인하세요.

라우터 필터는 자신을 지나가는 것만 본다

가정용 라우터의 콘텐츠 또는 URL 필터는 읽을 수 있는 형태로 자신을 지나가는 이름과 요청을 대조합니다. 클라이언트가 다른 곳의 서버로 암호화된 터널을 만들면, 라우터는 그 서버로 가는 하나의 흐름만 보고 그 안은 보지 못합니다. 필터에는 대조할 이름이 없으므로 트래픽을 통과시키고, 이는 우회된 것이 아니라 필터가 실패한 것처럼 보입니다.

작동하는 구성은 다른 쪽입니다: 라우터가 터널을 직접 들고, 종단에서 복호화하며, 거기서 필터를 적용합니다. 그 설계에서 필터는 평문이 나타나는 곳에 자리합니다.

터널이 노트북에서 끝나면 규칙이 어떻게 쓰였든 라우터는 정의상 보호 경로 밖에 있습니다.

네 가지 적용 지점과 각각이 놓치는 것

차단을 적용할 수 있는 곳은 네 군데이고 각각 다르게 실패합니다. 이 목록은 순위가 아니라 커버리지 지도로 읽으세요.

  • hosts 파일 또는 로컬 리졸버: 오프라인과 어떤 터널 아래에서도 작동하지만, 내장 리졸버나 하드코딩된 주소에는 우회됩니다.
  • VPN 게이트웨이의 DNS 필터링: 밀어 넣은 리졸버를 쓰는 클라이언트는 덮지만, DNS를 덮어쓰는 클라이언트는 놓칩니다.
  • 주소 또는 SNI 기준 게이트웨이 송출 규칙: 클라이언트 DNS와 무관하지만, 읽을 수 없는 이름과 배우지 못한 주소에는 눈이 멉니다.
  • 관리되는 브라우저 또는 기기 정책: 관리되는 하드웨어에서는 강하지만 개인 기기에서는 없습니다.

이 중 어느 것도 관리되지 않는 기기에서 단호한 사용자에 맞선 보안 경계가 아닙니다. 이것들은 정책 통제이며, 정직한 설명은 각각이 실제로 어떤 트래픽을 덮는지 말합니다.

의도에 맞는 계층을 고르세요: 가정의 편의는 기기에 속하고, 조직의 규칙은 게이트웨이에 속합니다.

끝났다고 하기 전에 두 상태를 모두 시험하라

VPN을 연결한 상태와 끊은 상태에서 같은 세 명령을 실행하세요: 리졸버의 답을 보는 getent ahosts, 질의가 무엇을 돌려주는지 보는 nslookup, 연결이 아직 완료되는지 보는 사이트 대상 curl -I입니다. 첫 번째가 loopback을 돌려주는데 세 번째가 실제 주소로 연결된다면, 무언가가 리졸버를 우회한 것이고 hosts 항목은 당신이 생각하는 그 통제가 아닙니다.

라우터에서는 요청 전후에 필터 카운터를 읽으세요. 전혀 움직이지 않는 카운터는 트래픽이 필터에 닿지 않았다는 뜻이며, 그것은 규칙의 답이 아니라 라우팅의 답입니다.

다음 VPN 변경이 경로를 다시 옮기기 때문에 결과를 구성과 함께 적어 두세요.

관련 글