연결 문제 해결 · Clash 기술 블로그

FlClash Android: 시스템 DNS가 비어 도메인 조회 실패

Android 네트워크가 일시적으로 DNS 서버를 보고하지 않으면 이전 FlClash 버전에서 도메인 조회가 실패할 수 있습니다. VPN을 끈 직접 연결과 DNS 로그를 비교한 뒤 v0.8.99 수정 사항을 확인하고, 검증 및 복구 절차를 준비하세요.

  • FlClash
  • Android
  • 시스템 DNS
  • 도메인 조회
  • v0.8.99
이 글의 목차

휴대폰에 VPN이 연결되었다고 표시되지만 도메인 이름으로 웹페이지를 열 수 없다면 일반 네트워크가 정상인지 먼저 확인해야 합니다. 시스템이 일시적으로 해석 서버를 제공하지 않는 경우, 구독 설정이 잘못된 경우와 노드 연결이 끊긴 경우는 해결 방법이 다릅니다. 같은 네트워크와 접속 대상에서 VPN을 켜기 전후의 결과를 기록해 이번 버전의 수정 대상과 다른 원인을 구분하세요.

연결은 유지되는데 Android에서 도메인 조회가 실패하는 이유는?

Android에서 VPN 연결 후 웹페이지와 노드의 도메인 이름 해석이 실패하는 상황을 기록하고 같은 도메인으로 직접 연결과 FlClash의 요청을 비교한 뒤 로그를 확인하세요. 휴대폰 네트워크, 시스템 DNS 전달, 설정된 상위 서버 또는 노드 연결 때문에 실패할 수 있으므로 빈 목록 조건에 해당할 때만 다음 단계로 진행하세요.

FlClash v0.8.99는 Android 네트워크가 일시적으로 DNS 서버를 보고하지 않을 때 발생하는 이름 해석 실패 경로 하나를 수정했습니다. 이전 로그의 빈 [DNS] updateDns 또는 udp://:가 단서가 될 수 있지만 직접 연결 결과와 함께 판단해야 합니다. 모든 Android 연결 장애가 이 문제 때문인 것은 아닙니다.

이 수정은 Android 네트워크가 일시적으로 DNS 서버를 보고하지 않아 FlClash가 이 경로로 도메인을 조회하지 못하는 경우에 해당합니다. Windows, macOS와 Linux의 일반 DNS 장애나 Android의 설정 오류, 노드 장애, 비공개 DNS 문제에 바로 적용하면 안 됩니다.

VPN을 끈 직접 연결 비교와 빈 DNS 목록의 단서

직접 연결이 정상이라면 원래 Profile과 노드를 다시 켜서 FlClash를 통한 도메인 조회만 실패하는지 확인하세요. 이전 버전 로그의 빈 [DNS] updateDns 또는 udp://:를 가리키는 조회 대상은 공식 커밋과 비교할 단서입니다. 해당 로그가 없다고 이 경로를 배제할 수도 없습니다.

Android의 LinkProperties.getDnsServers()는 현재 네트워크 링크가 보고하는 DNS 서버 목록을 반환합니다. 목록이 일시적으로 비어 있는 것이 여기서 확인할 입력 조건이며, 사용자가 dns.nameserver를 직접 비웠다는 뜻은 아닙니다.

구성에 직접 입력한 nameserver와 nameserver-policy는 프록시 설정이며 Android 비공개 DNS는 시스템 설정입니다. 이 옵션들만 바꿔서는 시스템이 클라이언트에 빈 DNS 목록을 보고하는 문제를 검증하지 못할 수 있습니다.

재현 가능한 최소 비교 기록 남기기

  1. 구성과 오류 발생 당시 상태 기록하기

    FlClash 전체 버전, Android 버전, 네트워크 유형, 현재 Profile과 노드, 첫 실패 시각과 연결·네트워크 전환·복구 중 언제 발생했는지 기록하세요. 로그와 실제 도메인 접근 결과를 보관하고 기록 전에 노드 변경, DNS 수정과 캐시 삭제를 동시에 하지 마세요.

  2. VPN을 끄고 직접 연결 테스트

    같은 Wi-Fi 또는 모바일 네트워크에서 실제 HTTPS 사이트를 열어 휴대전화 네트워크와 시스템 DNS 조회가 정상인지 확인하세요.

  3. 기존 설정으로 다시 테스트

    FlClash를 켠 뒤 같은 Profile, 노드와 대상 사이트를 유지하고 로그의 첫 DNS 오류와 실제 연결 결과를 확인하세요.

  4. 빈 DNS 목록 오류 조건에 해당하는지 확인하기

    직접 연결은 정상이고 FlClash에서 도메인 조회가 실패하며 버전과 빈 DNS 단서가 맞을 때에만 v0.8.99 수정 절차를 진행하세요.

관찰 결과와 다음 단계

관찰 결과다음 단계
FlClash VPN을 꺼도 같은 네트워크에서 도메인을 조회할 수 없음직접 연결에서도 이름 조회가 안 되면 휴대전화 네트워크, 라우터나 통신사 DNS를 복구하세요. FlClash 업그레이드만 해결책으로 삼지 마세요.
직접 연결은 정상이고 이전 FlClash 버전의 DNS 로그에 빈 updateDns 또는 udp://:가 나타남이번 수정의 단서에 해당합니다. 백업한 뒤 공식 v0.8.99를 확인하세요.
특정 노드나 도메인 하나만 실패하고 다른 요청은 정상노드 주소, 상위 DNS, 규칙과 대상 서비스를 확인하세요. 시스템 DNS 목록 전체가 비었다고 단정하지 마세요.
Android 비공개 DNS가 연결 불가라고 표시되거나 다른 VPN이 연결을 관리함시스템의 비공개 DNS와 VPN 상태를 먼저 확인하고 기존 설정을 기록한 뒤 한 번에 한 가지만 바꿔 비교하세요.
빈 DNS 목록이 정상적인 대체 처리를 막는 이유
수정 전에는 Android 서비스의 빈 목록이 Go 코어에 빈 문자열로 전달됐고, strings.Split이 이를 분리해 빈 주소 하나를 만들었습니다. Mihomo는 이를 udp://: 네임서버로 취급해 시스템 리졸버가 서버가 설정됐다고 판단하고 기본 대체 서버를 사용하지 못했습니다. v0.8.99는 실제 빈 목록을 전달합니다.

공식 APK로 v0.8.99 업데이트 후 원래 설정 유지하기

먼저 FlClash의 로컬 백업 기능으로 현재 설정을 저장하고 백업 파일의 위치를 확인한 뒤 구독 출처와 선택된 Profile을 기록하세요. 구독 토큰, 노드 비밀번호, 개인 주소가 백업에 포함될 수 있으므로 원본 파일을 공개 issue나 온라인 변환 사이트에 올리지 마세요.

프로젝트 README에는 arm64-v8a, armeabi-v7a, x86_64 패키지가 나열돼 있습니다. 다른 사람의 휴대전화 모델만 보고 아키텍처를 추측하거나 출처를 확인하지 않은 미러에서 받지 마세요.

업데이트 전에 FlClash VPN을 중지하고 일반 연결이 되는지 확인하세요. 업그레이드할 때 앱 데이터와 사전 백업을 유지하고 데이터베이스나 모든 Profile을 지우지 마세요. 이 수정을 위해 구독 DNS를 임의로 바꾸거나 알 수 없는 공개 서버를 입력하지 마세요.

v0.8.99의 코드 변경은 빈 시스템 DNS 목록을 빈 상태로 유지해 리졸버가 정상적인 기본 대체 경로를 쓰도록 합니다. 모든 기기에 특정 DNS 주소를 강제로 지정하는 변경이 아닙니다. 실제 문제가 상위 서버 연결이나 설정 오류라면 업데이트만으로 해당 원인을 해결할 수 없습니다.

클라이언트 버전만 바꿔 한 번 검증하기

  1. 업그레이드 전 구성과 결과 기록하기

    로컬 백업과 실패 로그를 저장하고 같은 네트워크, Profile, 노드, 대상 사이트를 기록하세요. 설정 변경 효과를 버전 수정 효과로 오인하지 않도록 합니다.

  2. 출처와 아키텍처 확인

    chen08209/FlClash 프로젝트의 공식 v0.8.99 Release에서 기기 ABI에 맞는 Android APK를 선택하고 일반적인 앱 업데이트 절차로 설치하세요.

  3. FlClash VPN 다시 켜기

    Profile과 설정이 남아 있는지 확인한 뒤 FlClash VPN을 다시 켜고 업데이트 전과 같은 노드와 사이트를 사용하세요.

  4. DNS와 실제 요청 비교

    도메인 조회 로그, 연결 기록과 HTTPS 페이지의 완전한 로딩을 확인하세요. VPN 아이콘이나 노드 지연 시간만으로 성공을 판단하지 마세요.

안정적으로 연결됐을 때와 네트워크 전환 후 DNS 확인하기

앱에 v0.8.99가 표시되는지, 현재 Profile·노드·네트워크 유형이 업데이트 전 기록과 같은지 확인하세요. 먼저 안정적인 일반 네트워크에서 같은 실제 HTTPS 사이트에 접속하고 FlClash의 DNS 조회, 요청 또는 로그 화면에서 해당 도메인의 조회와 출구 결과를 확인하세요.

이후 일상 사용 중 Wi-Fi와 모바일 네트워크가 자연스럽게 전환되거나 연결이 끊겼다가 다시 연결되면 같은 대상을 다시 확인하세요. 공식 커밋은 네트워크가 빈 DNS 서버 목록을 보고하는 순간에 대응합니다. 정상 네트워크에 항상 DNS 서버가 있다면 한 번의 성공은 현재 연결이 작동한다는 뜻일 뿐, 앞서 설명한 빈 목록 오류가 수정되었다는 증거는 아닙니다.

업데이트 후 이번 문제의 잘못된 서버 단서가 로그에서 사라지고 도메인 조회와 실제 HTTPS 요청이 모두 복구됐다면 해당 기기에서 재검증에 성공한 것으로 기록할 수 있습니다. 도메인은 조회되지만 페이지만 열리지 않는다면 규칙, 노드, 연결 기록 또는 대상 서비스를 살펴보세요. 모든 시간 초과를 빈 시스템 DNS 탓으로 돌리지 마세요.

검증 체크리스트

  • 클라이언트가 프로젝트의 공식 v0.8.99 Release에서 왔고 Android APK 아키텍처가 기기와 맞음
  • 업데이트 전 백업이 보관돼 있고 기존 Profile, 노드, 덮어쓰기 설정을 확인할 수 있음
  • 같은 네트워크와 같은 대상에서 VPN을 끈 직접 연결과 VPN을 켠 결과가 모두 기록됨
  • FlClash에서 도메인 조회가 되고 실제 HTTPS 페이지가 완전히 로드되며 연결 기록에 예상한 출구가 표시됨
  • 일상적인 네트워크 전환 또는 재연결 뒤 DNS와 요청을 다시 확인했고 로그에 이번 빈 주소로 인한 실패가 없음

v0.8.99에서도 실패하면 어떻게 복구하고 증거를 제출하나요?

먼저 FlClash VPN을 중지하고 Android가 일반 네트워크로 돌아가 도메인 조회와 HTTPS 요청이 되는지 확인하세요. 일반 연결도 실패한다면 클라이언트를 반복해서 재설치하지 말고 현재 Wi-Fi, 모바일 네트워크 또는 비공개 DNS 상태에 따라 시스템 연결부터 복구하세요.

진단 중 Profile, 덮어쓰기 설정 또는 다른 설정을 바꿨다면 이번에 변경한 부분만 복원하고 사전 백업과 원래 값을 대조하세요. 모든 앱 데이터를 삭제하거나 유일한 백업을 덮어쓰거나 시스템 DNS를 알 수 없는 서버로 강제하지 마세요. 이전 버전을 다시 설치하면 이번 결함이 재현될 수 있으므로 백업을 보관한 임시 선택지로만 고려하세요.

v0.8.99에서도 빈 [DNS] updateDns 또는 udp://:가 보인다면 프로젝트 issue에 Android 및 FlClash 버전, 네트워크 유형, VPN을 끈 직접 연결과 켠 상태의 비교, 같은 Profile의 최소 재현 방법, 첫 관련 로그를 제출하세요.

네트워크 전환 전후 결과도 기록하세요. 제출하기 전에 구독 토큰, 노드 비밀번호, 개인 도메인, 기기 식별자를 가리고 원본 백업과 전체 로그는 기기에 보관하세요.

nameserver-policy: system에 해당하는 도메인만 실패한다면 이번 빈 목록 문제와 곧바로 합치지 마세요. 프로젝트의 이전 issue #1393에는 v0.8.88 사전 출시 버전에서 비슷한 udp://: 로그가 기록됐지만, 설정상 발생 조건과 버전이 다릅니다. 현재 기기의 증거를 별도로 제시하세요.

참고 자료