Fake-IP DNS의 동작 방식과 적용 조건
Clash Verge Rev에서 Fake-IP를 설정하면 DNS 조회 결과로 웹사이트의 실제 IP 대신 예약된 가상 IP가 반환됩니다. 예를 들어 mihomo의 기본적인 Fake-IP 대역인 198.18.0.0/16 안의 주소가 앱에 전달될 수 있습니다. 앱이 그 주소로 연결하면 코어는 내부 매핑에서 원래 도메인을 찾아 규칙을 적용하고, 선택된 직접 연결 또는 프록시 정책으로 실제 접속을 처리합니다. 이 주소는 웹사이트 서버의 실제 주소가 아니며, 외부 DNS에 등록되는 주소도 아닙니다.
Fake-IP의 장점은 연결을 처리할 때 도메인 정보를 보존하기 쉽다는 점입니다. 도메인 규칙을 주로 사용하는 설정에서는 대상 IP만으로 분류하는 상황을 줄이는 데 도움이 됩니다. 반면 라우터, 프린터, 사내 서비스처럼 실제 LAN 주소가 필요한 대상은 Fake-IP 응답과 맞지 않을 수 있어 예외 설정을 검토해야 합니다.
| 확인 항목 | Fake-IP 적용에 필요한 상태 | 확인하지 않으면 생길 수 있는 문제 |
|---|---|---|
| 코어 DNS | DNS 기능이 켜지고 코어가 DNS 요청을 처리 | 기존 DNS 응답이 계속 사용되거나 조회가 실패 |
| enhanced-mode | fake-ip로 설정 | 실제 IP 응답 모드로 동작 |
| 요청 경로 | 앱의 DNS 요청이 코어에 도달 | 브라우저 또는 앱이 시스템 DNS를 우회 |
| 예외 목록 | 필요한 LAN 도메인만 필터에 추가 | 내부 서비스가 잘못된 주소를 받거나 접속 실패 |
설정 전 준비: 코어와 현재 DNS 경로 확인
Clash Verge Rev는 그래픽 인터페이스이고 DNS 동작은 실행 중인 코어와 최종 적용 설정에 좌우됩니다. 아래 예시는 mihomo 계열 설정을 기준으로 합니다. 사용 중인 코어가 다른 구현이거나 오래된 버전이면 같은 YAML 필드를 지원하지 않을 수 있으므로, 먼저 클라이언트의 코어 정보와 시작 로그에서 실제 코어 이름 및 버전을 확인하세요. 구독이 이미 dns 설정을 포함한다면 같은 키를 중복해서 붙이지 말고, 오버라이드나 병합 기능에서 최종 결과를 확인해야 합니다.
- Clash Verge Rev를 실행하고 현재 선택된 프로필이 의도한 구독 또는 로컬 설정인지 확인합니다. 프로필 목록에 보이는 것만으로 실행 중인 설정이라고 볼 수는 없습니다.
- 현재 설정 파일을 백업합니다. 구독 원본을 직접 편집하면 다음 업데이트에서 수정 내용이 사라질 수 있으므로 클라이언트가 제공하는 설정 병합 또는 오버라이드 방식을 우선 사용하세요.
- Windows에서 다른 VPN, DNS 필터, 보안 프로그램이 별도 DNS 프록시를 제공하는지 살펴봅니다. 여러 도구가 같은 포트나 네트워크 경로를 변경하면 실패 원인을 구분하기 어렵습니다.
- LAN 장치 이름이나 내부 도메인을 사용하는 환경이라면 그 주소와 연결 방법을 기록해 둡니다. 설정 후에는 외부 도메인뿐 아니라 해당 내부 서비스도 점검해야 합니다.
현재 설정에 dns:가 여러 번 있으면 YAML 파싱 오류가 발생하거나 예상과 다른 값이 적용될 수 있습니다. 같은 키를 여러 곳에 추가하는 대신 최종 설정에서 DNS 항목이 하나의 일관된 블록으로 합쳐졌는지 확인하세요. 코어 로그에 알 수 없는 필드나 DNS 초기화 오류가 나타나면 Fake-IP를 켜기 전에 해당 오류부터 해결하는 편이 안전합니다.
mihomo DNS 설정 예시와 항목별 의미
다음은 DNS 서버를 로컬 주소의 53번 포트에서 수신하고 Fake-IP 모드를 사용하는 설정 예시입니다. 완성된 구독 파일이 아니라 기존 설정의 DNS 관련 부분을 설명하는 조각입니다. 같은 포트를 이미 사용하는 프로그램이 있으면 코어가 시작하지 못할 수 있습니다. 이 경우 임의로 포트를 바꾸기보다 클라이언트의 DNS 및 TUN 설정에서 요청이 어느 포트로 전달되는지 함께 맞추세요.
dns:
enable: true
listen: 127.0.0.1:53
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://1.1.1.1/dns-query
fake-ip-filter:
- "*.lan"
- "localhost"
- "*.local"
enable은 코어 DNS 모듈을 켭니다. 비활성 상태라면 다른 DNS 항목을 적어도 코어가 해당 설정으로 조회를 처리하지 않습니다.listen은 코어가 DNS 요청을 받는 로컬 주소와 포트입니다. 위 예시에서는 루프백 주소로 제한하므로 LAN의 다른 기기가 이 DNS 리스너를 사용하지 않습니다.ipv6는 DNS 응답에서 IPv6 주소 처리 여부에 영향을 줍니다. IPv6를 실제로 사용하는 환경이라면 무조건 끄기보다 기존 네트워크 및 코어 설정에 맞춰 검증하세요.fake-ip-range는 가상 주소를 할당하는 범위입니다. 일반적인 사설 LAN 대역과 겹치지 않도록 기본 대역을 임의로 바꾸지 않는 것이 좋습니다.fake-ip-filter는 지정한 도메인을 Fake-IP 매핑에서 제외하는 데 사용합니다. 예시는 설명용이며, 실제 내부 도메인과 서비스 이름에 맞게 좁혀서 구성하세요.
nameserver에 적은 HTTPS DNS 서버는 코어가 실제 DNS 조회를 수행할 때 사용할 서버의 예입니다. 네트워크에서 해당 주소로 연결할 수 있어야 하며, 회사나 학교 네트워크의 정책과 충돌할 수 있습니다. 구독에 이미 DNS 서버나 라우팅 정책이 정의되어 있다면 예시의 값을 통째로 덮어쓰기보다 현재 설정의 의도와 합쳐야 합니다.
Windows에서 설정을 적용하고 결과 확인하기
설정은 파일을 저장한 순간이 아니라 활성 프로필과 실행 중인 코어에 반영된 뒤에야 시험할 수 있습니다. 다음 순서로 변경 범위를 좁히세요. 메뉴 이름과 표시 위치는 Clash Verge Rev 릴리스에 따라 달라질 수 있으므로, 특정 버튼 이름을 찾기 어렵다면 프로필 화면, 설정 오버라이드, 코어 로그에서 같은 기능을 확인합니다.
- 현재 활성 프로필을 확인하고, 원본 설정의 복사본 또는 되돌릴 수 있는 로컬 오버라이드를 준비합니다.
- DNS 설정에서
enable: true와enhanced-mode: fake-ip를 지정합니다. 기존 구독에 DNS 블록이 있으면 중복 블록을 만들지 말고 최종 설정에 병합합니다. - 코어가 사용하는 DNS 리스너 주소와 포트를 확인합니다. 위 예시처럼
127.0.0.1:53을 쓴다면 해당 주소를 다른 서비스가 이미 점유하고 있지 않아야 합니다. - 저장한 뒤 활성 설정을 다시 불러오거나 코어를 재시작합니다. 시작 로그에서 YAML 파싱 오류, 포트 바인딩 실패, DNS 초기화 실패가 없는지 확인합니다.
- PowerShell 또는 명령 프롬프트에서
nslookup을 실행하고, 조회 서버를 코어의 DNS 리스너로 지정한 뒤 외부 도메인을 조회합니다. 리스너가 53번 포트가 아니라면nslookup대화형 모드의set port=포트번호를 사용해 실제 포트에 맞추세요. - 조회 결과가 사용 중인 Fake-IP 대역에 속하는지 확인하고, 동시에 Clash Verge Rev의 연결 목록이나 로그에서 해당 요청이 처리되는지도 확인합니다. 이후 브라우저에서 같은 도메인을 열어 연결 결과를 비교합니다.
조회 결과가 예상한 대역이라고 해서 모든 트래픽 경로가 검증된 것은 아닙니다. 그 결과는 해당 DNS 리스너가 Fake-IP 응답을 반환했다는 증거입니다. 실제 브라우저가 Windows 시스템 DNS를 쓰는지, 자체 DoH를 사용해 다른 경로로 조회하는지, 규칙에서 어느 정책을 선택했는지는 별도로 살펴봐야 합니다. 확인 중에는 브라우저의 사용자 지정 보안 DNS를 잠시 꺼서 비교하면 경로를 단순화할 수 있습니다.
시스템 프록시만 사용하는 구성에서 명령줄의 DNS 조회가 코어를 통과하지 않을 수 있습니다. 반면 TUN을 사용한다면 TUN이 켜져 있는지, 관리자 권한이 필요한 설정이 적용됐는지, 포트 53 DNS 요청이 코어로 전달되는지 확인하세요. mihomo 설정에서 TUN DNS 가로채기를 구성하는 경우 예를 들어 dns-hijack에 UDP용 any:53 및 필요한 환경의 TCP용 tcp://any:53을 사용할 수 있습니다. 이는 포트 443을 사용하는 브라우저 DoH까지 자동으로 가로채는 설정은 아닙니다.
DNS 오류와 연결 실패를 원인별로 점검하기
| 증상 | 가능한 원인 | 우선 점검할 항목 |
|---|---|---|
| 코어 시작 시 DNS 오류 | YAML 들여쓰기, 중복 키, 리스너 포트 충돌 | 코어 로그와 활성 설정, 포트 사용 여부 |
| 조회가 시간 초과됨 | DNS 요청이 리스너에 도달하지 않거나 상위 DNS에 연결 불가 | 조회 서버 주소·포트, TUN 경로, 방화벽 및 네트워크 |
| 일부 앱만 접속되지 않음 | 앱 자체 DoH, 앱 DNS 캐시, LAN 도메인의 Fake-IP 처리 | 앱의 보안 DNS 설정, 필터 대상, 앱 재시작 |
| DNS 응답은 있지만 사이트는 실패 | 프록시 노드, 규칙, 실제 출구 연결의 문제 | 연결 목록의 매칭 규칙과 선택된 프록시 정책 |
포트 오류가 의심되면 Windows에서 관리자 권한 터미널을 열어 netstat -ano | findstr :53으로 53번 포트를 사용하는 프로세스가 있는지 확인할 수 있습니다. 결과에 PID가 나오면 작업 관리자의 세부 정보에서 프로세스를 대조하세요. 익숙하지 않은 시스템 프로세스를 임의로 종료하지 말고, 포트를 점유한 프로그램과 현재 Clash 설정이 같은 리스너를 요구하는지부터 살펴보세요.
Fake-IP 응답이 확인되는데 웹페이지가 열리지 않는다면 DNS 설정만 계속 바꾸지 마세요. 연결 목록에서 도메인 또는 대상 주소가 어떤 규칙에 일치했는지, 선택된 그룹에 사용 가능한 노드가 있는지 확인합니다. 규칙 모드에서 DIRECT가 선택됐다면 DNS는 정상이어도 직접 연결이 실패할 수 있습니다. 반대로 브라우저만 문제라면 브라우저의 보안 DNS, 프록시 설정, 기존 DNS 캐시를 각각 비교하세요.
LAN 장치에 접속할 수 없다면 해당 내부 도메인이 fake-ip-filter 예외에 포함되는지와 내부 DNS 서버를 올바르게 사용하는지 확인합니다. 예외 규칙을 추가한 뒤에는 이미 캐시된 매핑이 남을 수 있으므로 브라우저나 해당 앱을 다시 시작하고 재조회합니다. Windows DNS 캐시를 비워야 할 때는 관리자 권한 명령 프롬프트에서 ipconfig /flushdns를 실행할 수 있습니다. 이 명령은 앱 자체 캐시나 브라우저 DoH 캐시까지 모두 지우는 것은 아닙니다.
설정 되돌리기와 이후 관리
문제가 생겼을 때는 여러 값을 한꺼번에 바꾸기보다 최근 변경을 되돌려 원인을 분리하세요. 먼저 로컬 오버라이드에서 enhanced-mode를 이전 값으로 복구하거나 해당 DNS 오버라이드를 제거하고, 활성 프로필을 다시 불러옵니다. DNS 설정을 통째로 삭제하면 구독이 제공하던 기본 DNS 정책까지 사라질 수 있으므로 백업과 원본 설정을 기준으로 복원하세요.
- Clash Verge Rev에서 이전에 사용하던 프로필 또는 백업 설정을 선택합니다.
- 테스트를 위해 추가했던 Fake-IP 필터와 포트 변경을 제거하거나 이전 값으로 되돌립니다.
- 코어를 다시 시작하고 로그에서 DNS 리스너가 정상적으로 초기화됐는지 확인합니다.
- Windows의 「설정」→「네트워크 및 인터넷」에서 DNS를 수동 지정했다면 원래 자동 설정 또는 기록해 둔 값을 복구합니다. 이 작업은 Clash의 코어 DNS 설정과 별개입니다.
- 브라우저와 앱을 다시 시작하고, 필요하면
ipconfig /flushdns로 Windows DNS 캐시를 비운 뒤 웹과 LAN 접속을 각각 검사합니다.
정상 동작을 확인한 뒤에는 클라이언트 버전, 코어 버전, 리스너 주소, Fake-IP 대역, 추가한 필터, TUN 사용 여부를 기록해 두면 다음 업데이트 후 비교하기 쉽습니다. 구독 업데이트 뒤에는 최종 설정에서 오버라이드가 유지되는지, 코어가 같은 DNS 설정으로 시작하는지 다시 확인하세요. Fake-IP는 DNS만의 단독 스위치가 아니라 앱의 조회 경로, 코어 설정, 규칙 처리와 함께 검증해야 안정적으로 사용할 수 있습니다.