V2Ray FakeDNS 원리와 가상 IP 매핑·사용 사례

FakeDNS가 특수 목적 주소 대역의 가상 IP로 실제 DNS 응답을 대체하고, 코어가 도메인을 복원하는 원리를 알아봅니다. 적합한 환경과 부작용도 함께 살펴보세요.

이 글 미리보기

FakeDNS는 투명 프록시가 연결을 가로챌 때 발생하는 ‘IP만 보이고 원래 도메인은 보이지 않는’ 문제를 해결합니다. 먼저 앱에 가상 주소를 전달하고, 연결이 코어에 들어오면 매핑을 조회해 도메인을 복원합니다. DNS 조회부터 매핑, 연결 가로채기, 도메인 복원, 아웃바운드까지 작동 조건을 순서대로 설명합니다. TUN이나 도메인 기반 분기를 설정하거나 198.18 대역 연결 실패를 해결하려는 사용자를 위한 글로, FakeDNS가 필요한지와 문제가 생겼을 때 점검할 단계를 확인할 수 있습니다.

일반 DNS와 FakeDNS의 차이

일반 DNS의 A·AAAA 조회는 각각 IPv4·IPv6 주소를 가져옵니다. 앱은 응답을 받은 뒤 보통 해당 주소로 직접 연결합니다. 투명 프록시 진입점에 도달한 연결에는 ‘대상 IP와 포트’만 남을 수 있지만, 도메인 규칙에는 앱이 처음 조회한 이름이 필요합니다. FakeDNS는 앞단의 응답 방식을 바꿉니다. 실제 서버 주소를 바로 반환하는 대신, 제어된 경로 안에서만 의미가 있는 가상 IP를 할당합니다.

예를 들어 앱이 www.example.com을 조회하면 FakeDNS는 198.18.0.2를 할당하고 둘 사이의 매핑을 저장합니다. 이후 앱이 198.18.0.2:443에 연결하면 연결을 가로챈 코어가 매핑을 조회해 대상을 www.example.com:443으로 복원할 수 있습니다. 이 주소는 작동 원리를 설명하기 위한 예시이며, 직접 접속할 수 있는 테스트 서버도 아니고 모든 클라이언트에서 고정으로 첫 할당되는 주소도 아닙니다.

비교 항목일반 DNSFakeDNS
응답 결과도메인에 연결된 실제 주소로컬 주소 풀에서 할당한 가상 주소
연결 조건선택한 네트워크를 통해 실제 주소에 연결 가능가상 주소 트래픽을 올바르게 가로채야 함
도메인 정보 보존투명 프록시 진입점에서 원래 도메인을 얻지 못할 수 있음매핑 테이블에서 조회 당시의 도메인을 복원
최종 DNS 조회보통 연결 전에 완료로컬 직접 연결이나 원격 프록시 처리 단계까지 미뤄질 수 있음

가상 IP 매핑의 전체 흐름

도메인 조회 가상 주소 할당 앱에서 연결 시작 투명 프록시에서 연결 가로채기 매핑 조회 후 도메인 복원 라우팅에 따라 아웃바운드 선택

이 흐름의 핵심은 ‘DNS가 무엇을 응답했는가’가 아니라, 응답과 후속 연결이 다시 이어질 수 있는가입니다. DNS 응답을 처리하는 매핑 테이블과 대상 연결을 처리하는 코어는 매핑 상태를 공유하거나, 이 기능을 지원하는 통합 구성 요소로 연결되어야 합니다. 한 인스턴스가 가상 주소를 할당했는데 매핑 정보가 없는 다른 인스턴스가 연결을 받으면, 그 인스턴스에는 직접 접속할 수 없는 특수 목적 주소만 보입니다.

  1. 제어된 DNS 경로로 조회 전달: 앱의 A 또는 AAAA 요청이 설정된 DNS 경로를 거쳐야 합니다. 기존 DNS의 UDP 53 포트만 가로챈다고 해서 앱 자체의 암호화 DNS까지 처리되는 것은 아닙니다.
  2. 매핑 테이블에 기록: FakeDNS가 도메인에 가상 주소를 할당합니다. 주소 풀에 여유가 부족해지면 구현에 따라 오래된 매핑을 회수할 수 있습니다. 주소가 할당되는 순서는 고정된 인터페이스로 간주하면 안 됩니다.
  3. 가상 주소 연결 가로채기: TUN 또는 투명 프록시 규칙이 연결을 도메인 복원을 지원하는 진입점으로 전달해야 합니다. FakeDNS 자체는 TUN 네트워크 인터페이스를 만들거나 시스템 라우팅 전체를 자동으로 설정하지 않습니다.
  4. 매핑을 조회해 대상 복원: 코어가 가상 IP에 대응하는 도메인을 찾아 도메인 규칙과 후속 아웃바운드에서 사용합니다. 실제 연결 대상을 다시 쓰는지는 진입점의 스니핑 설정 등에도 영향을 받습니다.
  5. 실제 사이트에 연결: 프록시 아웃바운드를 선택하면 도메인 대상 전송을 지원하는 프로토콜이 도메인을 원격 측에 전달할 수 있습니다. 직접 연결을 선택하면 보통 실제 연결 가능한 주소를 얻기 위해 실제 DNS 조회가 필요합니다.

따라서 FakeDNS를 사용해도 DNS가 불필요해지는 것은 아닙니다. 실제 DNS 조회를 미루고 도메인 연관 정보를 보존하는 방식입니다. VMess, VLESS 같은 프록시 프로토콜을 대체하거나 노드 인증 정보를 수정하지 않으며, 서버 연결 불가, 전송 경로 오류, TLS 설정 불일치도 해결하지 못합니다.

설정 항목: 주소 풀, DNS, 진입점의 도메인 복원

‘V2Ray FakeDNS’는 이런 방식을 통칭하는 말로 자주 쓰이지만, V2Ray와 Xray의 실제 설정 기능과 항목, 클라이언트 연동 방식은 각각 확인해야 합니다. 아래는 해당 항목을 지원하는 Xray-core JSON 설정을 기준으로 명시적인 예시 값을 보여줍니다. 모든 버전의 기본값이라고 단정하는 내용은 아닙니다. v2rayN, v2rayNG, v2flyNG는 인터페이스와 설정 생성 방식이 다르므로 다른 코어의 설정을 그대로 복사하지 마세요.

DNS 및 주소 풀

주소 풀 항목
fakedns
예시 네트워크 대역
198.18.0.0/15
예시 용량
poolSize: 65535
DNS 서버 항목
"fakedns"

명시적으로 지정한 값의 예시입니다. 주소 풀 항목의 용량은 네트워크 대역의 전체 주소 수와 다릅니다.

연결을 받는 진입점

스니핑 사용
enabled: true
복원 유형
destOverride: ["fakedns"]
라우팅에만 사용
routeOnly: false
필수 조건
가상 주소 연결이 실제로 이 진입점에 전달되어야 함

연결 대상을 복원하는 조합의 예시입니다. 옵션 이름만 보고 연결이 성공적으로 가로채졌다고 판단하지 마세요.

아래는 최상위 객체에 포함되는 DNS 및 주소 풀 설정 일부이며, 단독으로 실행할 수 있는 전체 설정은 아닙니다. 리스너, 아웃바운드, 시스템 라우팅이 정의되어 있지 않고 IPv4 풀만 보여 줍니다. 따라서 AAAA 조회도 같은 방식으로 처리된다고 단정할 수 없습니다. 실제 배포에서는 사용 중인 코어의 문서를 참고해 IPv6 처리 방식과 실제 DNS 폴백 경로를 설정해야 합니다.

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": [
      "fakedns"
    ]
  }
}

가상 주소 연결을 받는 인바운드에도 도메인 복원 설정이 필요합니다. 아래는 해당 인바운드 내부의 sniffing 항목만 보여 주며, 나머지 인바운드 설정을 자동으로 채우지는 않습니다. 일반적으로 routeOnly는 스니핑 결과를 라우팅에만 사용하고 대상을 다시 쓰지 않는다는 뜻입니다. 이 예시에서는 아직 복원되지 않은 가상 대상을 아웃바운드로 넘기지 않도록 false로 명시했습니다.

{
  "sniffing": {
    "enabled": true,
    "destOverride": [
      "fakedns"
    ],
    "routeOnly": false
  }
}

적합한 환경과 적합하지 않은 환경

FakeDNS가 특히 유용한 환경은 TUN이나 투명 프록시를 이미 사용하면서 도메인별 분기도 필요한 경우입니다. 투명 프록시는 네트워크 계층에서 연결을 받아 처리하므로 연결 정보만으로 도메인을 알 수 없는 경우가 있습니다. 매핑 테이블을 사용하면 도메인 규칙이 HTTP Host나 TLS 핸드셰이크 정보에만 의존하지 않아도 됩니다. 실제 DNS 조회를 프록시 출구 측에서 처리하려는 설정에도 사용할 수 있지만, 그 목적을 달성할 수 있는지는 아웃바운드와 라우팅, 실제 DNS 설정의 조합에 달려 있습니다.

사용 환경선택 안내확인할 사항
TUN으로 연결을 가로채 도메인별 분기사용 고려 가능DNS 조회와 연결이 같은 매핑 경로를 거치는지 확인
명시적 프록시가 이미 도메인을 전달대개 별도로 켤 필요 없음앱이 도메인을 HTTP 또는 SOCKS 프록시에 이미 전달하는지 확인
사내 네트워크와 로컬 도메인예외 DNS 설정을 우선 적용내부 DNS, 직접 연결 경로, 주소 대역의 충돌 여부
실제 DNS 응답 주소를 확인하는 앱먼저 호환성 테스트앱이 특수 목적 주소를 거부하거나 IP로 위치를 판단하는지 확인
앱이 고정 IP에 직접 연결FakeDNS로 도메인을 복원할 수 없음DNS 조회가 없으면 해당 도메인 매핑도 없음

명시적 프록시와 투명 프록시는 따로 판단해야 합니다. 도메인 대상 요청을 지원하는 SOCKS 요청이나 HTTP CONNECT 요청은 도메인을 직접 전달할 수 있어 FakeDNS가 필요하지 않을 수 있습니다. 반면 앱이 로컬에서 먼저 DNS를 조회한 뒤 IP를 프록시에 전달하면 도메인이 사라질 수 있습니다. ‘시스템 프록시’라는 표현만 보고 결정하지 말고 실제 요청 형식을 확인하세요.

결론: 먼저 도메인이 진입점까지 전달되는지 확인하세요

로그에서 대상 연결 하나를 확인하세요. 진입점에 올바른 도메인이 이미 전달됐다면 기존 DNS 설정을 유지하는 편이 좋습니다. 대상 IP만 전달되고 도메인 규칙이 필요하다면 FakeDNS의 연결 가로채기와 도메인 복원 경로를 검증하세요. 불필요한 상태 의존성을 추가하지 않도록 실제 문제가 있는지 먼저 확인해야 합니다.

흔한 부작용: 캐시, 내부망, DNS 우회

FakeDNS는 유지 기간이 있는 로컬 매핑 테이블을 사용하지만, 앱과 시스템에는 이전 DNS 응답이 계속 캐시될 수 있습니다. 코어가 재시작되어 기존 매핑이 사라졌는데 앱이 캐시된 가상 IP로 연결을 시도하면 ‘처음에는 되다가 모드를 바꾼 뒤 접속이 안 되는’ 문제가 생길 수 있습니다. 이 경우 아웃바운드를 선택하기 전에 문제가 발생하므로 노드를 계속 바꿔도 대개 해결되지 않습니다.

FakeDNS를 쓴다고 자동으로 ‘DNS 누출이 없어지는’ 것은 아닙니다. 로컬 직접 연결 아웃바운드에서 실제 DNS 조회가 발생할 수 있고, 앱이 제어된 DNS를 우회할 수도 있습니다. DNS 경로를 점검할 때는 조회가 어디로 전달되는지와 연결이 어떤 아웃바운드로 나가는지 각각 확인하세요. 한 번 가상 주소가 반환됐다는 사실만으로 결론을 내려서는 안 됩니다.

가상 IP 연결 실패, 순서대로 점검하기

도메인 하나, 앱 하나, 노드 하나를 정해 전환 전후의 증상을 기록하는 것이 좋습니다. 아래에서는 www.example.com을 조회 예시로 사용합니다. 명령은 현재 로컬 DNS 경로를 확인하기 위한 것이며, 조회가 반드시 FakeDNS에 도달한다고 보장하지는 않습니다. Windows, macOS, Linux의 DNS 도구는 브라우저와 다른 조회 경로를 사용할 수도 있습니다.

nslookup -type=A www.example.com
nslookup -type=AAAA www.example.com
  1. 먼저 조회 결과가 가상 주소 풀에 있는지 확인: A 응답이 설정된 풀에 속한 주소라면 해당 조회에서 가상 응답을 받은 것입니다. 여전히 실제 IP가 반환된다면 조회가 제어된 DNS를 우회했는지, 해당 도메인에 실제 DNS 예외가 적용됐는지 확인하세요.
  2. 다음으로 연결이 코어에 전달되는지 확인: 앱이 연결을 시작할 때 액세스 로그를 확인하세요. 가상 주소가 반환됐는데 코어에 해당 연결 기록이 없다면 노드의 VMess나 VLESS 설정을 먼저 바꾸지 말고 TUN 라우팅과 진입점의 연결 가로채기부터 점검하세요.
  3. 매핑에서 도메인을 복원할 수 있는지 확인: 로그에 가상 IP만 계속 표시된다면 연결을 받는 인바운드에 적합한 복원 설정이 적용됐는지 확인하세요. 코어 재시작, 주소 풀 변경, 다중 인스턴스 전환이 있었는지도 점검해야 합니다. 로그 형식은 버전마다 다르므로 한 줄만 보고 실패를 단정하지 마세요.
  4. 마지막으로 라우팅과 아웃바운드 확인: 도메인을 복원했는데도 연결이 실패한다면 도메인 규칙이 어떤 아웃바운드를 선택하는지 확인하세요. 직접 연결에는 정상적인 실제 DNS 조회 경로가 필요합니다. 프록시 아웃바운드라면 노드 연결, 서버 측 DNS 조회, 전송 설정을 이어서 점검하세요.

Windows에서는 아래 명령으로 시스템 DNS 캐시를 지울 수 있지만 모든 앱의 내부 캐시까지 삭제되지는 않습니다. 캐시를 지우기 전에 현재 연결 가로채기 모드가 올바른지 확인하세요. 그렇지 않으면 앱이 사용할 수 없는 응답을 다시 받게 됩니다. 브라우저나 백그라운드에서 계속 실행되는 프로그램에 문제가 남으면 관련 프로세스를 종료한 뒤 다시 시도하세요.

ipconfig /flushdns

조회 결과가 198.18로 시작하는데 도메인이 잘못 바뀐 건가요?

먼저 해당 주소가 현재 설정된 가상 주소 풀에 속하는지 확인하세요. 풀에 포함된다면 앱 연결이 TUN에서 가로채져 도메인으로 복원되는지 점검하세요. 가상 주소를 hosts 파일에 직접 입력하거나 웹사이트의 실제 주소로 계속 사용하지 마세요.

FakeDNS를 켠 뒤 사내 사이트가 열리지 않으면 어떻게 해야 하나요?

먼저 기존 네트워크에서 내부 도메인이 실제로 어떤 주소로 조회되는지 기록하세요. 그런 다음 사내 DNS와 직접 연결 규칙에 내부 도메인을 설정합니다. 사내 네트워크 대역이 가상 주소 풀과 겹치지 않는지 확인하고, DNS를 다시 조회한 뒤 관련 앱을 재시작해 테스트하세요.

클라이언트를 재시작한 뒤 일부 앱만 연결되지 않으면 어떻게 하나요?

앱 캐시에 이전 가상 주소가 남아 있을 가능성을 먼저 확인하세요. 기존 연결 가로채기 모드를 복원하고 시스템 DNS 캐시를 지운 다음 문제가 있는 앱을 재시작하세요. 그래도 해결되지 않으면 DNS 조회와 연결이 같은 코어 인스턴스에서 처리되는지 비교하세요.

켜면 반드시 더 빨라지나요?

반드시 그렇지는 않습니다. 연결 전에 실제 DNS 응답을 기다리는 단계를 줄일 수는 있지만, 최종 접속 속도는 아웃바운드 DNS 조회와 연결 수립, 네트워크 품질에도 영향을 받습니다. 같은 도메인과 노드, 동일한 연결 가로채기 방식으로 비교하고 규칙이 올바른지 확인한 뒤 계속 사용할지 결정하세요.

v2rayN 다운로드