사무실 VPN에 연결하면 Android Studio가 실행 중인 에뮬레이터를 잃고, adb start-server가 멈추며, Wi-Fi의 실제 휴대폰이 기기 목록에서 사라집니다. 하나의 터널이 하나의 제품을 막는 것처럼 보입니다. 실제로는 세 개의 별도 경로가 세 가지 방식으로 실패합니다. adb 기기 검색, 에뮬레이터의 가상 네트워크, 호스트 리졸버입니다. 터널은 보통 마지막 하나만 담당하고, 그마저도 일부만 담당합니다.

세 개의 소켓, 세 명의 소유자

adb 서버는 호스트의 포트 5037에서 수신하고 USB 또는 TCP로 기기와 통신하며, 네트워크 검색에는 mDNS를 사용합니다. 에뮬레이터는 자체 가상 라우터 뒤에서 실행됩니다. 게스트는 10.0.2.15, 게이트웨이는 10.0.2.2, DNS 서버는 10.0.2.3이며, 에뮬레이터 프로세스가 이 모두를 호스트 소켓으로 변환합니다. 호스트 리졸버는 VPN 클라이언트가 DNS와 검색 도메인을 설치하는 곳입니다.

이 분리가 한 가지 수정이 어떤 도구에서는 되고 다른 도구에서는 안 되는 이유를 설명합니다. 호스트 리졸버를 바꾸는 클라이언트는 시작할 때 읽은 리졸버 상태 그대로 실행 중인 에뮬레이터 프로세스를 남깁니다. multicast를 필터링하는 클라이언트는 DNS를 건드리지 않고 검색을 깨뜨립니다. 가상 어댑터를 필터링하는 클라이언트는 호스트 브라우저가 계속 동작하는 동안 에뮬레이터를 거부합니다. 증상마다 원인이 다르므로 설정을 바꾸기 전에 실패하는 경로를 먼저 파악하세요.

adb가 볼 수 있는 것부터 시작하세요

VPN을 건드리기 전에 adb devices 를 실행하세요. 빈 목록은 전송 문제이지 라우팅 문제가 아니며, 서버가 한 번도 나열하지 않은 기기를 터널 설정으로 고칠 수 없습니다. 서버를 깔끔하게 다시 시작하세요. 먼저 adb kill-server 그리고 adb start-server 를 실행하고, 어떤 포트를 잡았는지 출력으로 확인합니다. 시작 자체가 멈춘다면 multicast를 필터링하는 네트워크에서는 mDNS 검색이 흔한 용의자입니다. 문서화된 우회 방법은 검색을 끄고 서버를 시작하는 것입니다:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

실제 기기라면 USB가 가장 짧은 경로입니다. TCP가 필요하면 adb tcpip 5555 로 기기를 수신 모드로 두고 기기의 주소와 포트에 연결하세요. adb connect 192.0.2.10:5555. 포트 5037은 호스트 서버의 포트이며 기기가 수신하는 포트가 아닙니다.

에뮬레이터를 안쪽에서 시험하세요

에뮬레이터는 10.0.2.3에서 DNS에 응답하며, 그 리졸버는 호스트 프로세스가 공급합니다. VPN 클라이언트가 호스트 리졸버를 바꾸면 에뮬레이터가 이를 상속할 수 있지만, 클라이언트가 에뮬레이터 프로세스를 필터링하거나 시작 후 호스트 어댑터 목록이 바뀌면 상속할 수 없습니다. 같은 셸에서 숫자 대상과 이름으로 둘을 분리하세요. adb shell ping -c 2 10.0.2.2 는 가상 네트워크가 호스트 쪽에 도달함을 보여 줍니다. 그다음의 이름 조회는 해석이 경계를 넘었는지 알려 줍니다.

그다음 같은 이름 조회를 호스트에서 실행하세요. 호스트는 해석되고 에뮬레이터는 안 된다면 끊긴 곳은 호스트 리졸버와 에뮬레이터의 가상 네트워크 사이이며 터널 안이 아닙니다. 둘 다 실패하면 호스트 리졸버를 봐야 합니다. VPN 연결 후 에뮬레이터를 다시 시작하는 것은 한 번 시도할 만합니다. 일부 클라이언트는 실행 중인 에뮬레이터 프로세스가 받아들이지 않는 리졸버 상태를 설치하기 때문입니다.

호스트 리졸버와 클라이언트 필터를 확인하세요

전체 터널 클라이언트는 호스트 리졸버를 자체 리졸버로 대체하고, split-DNS 클라이언트는 검색 도메인과 조건부 전달자를 추가합니다. 내부 이름은 흔히 그 split-DNS 구성에 의존하므로 연결된 동안 호스트가 무엇을 쓰는지 확인하세요. 리졸버 주소, 검색 도메인, 내부 영역이 회사 DNS로 라우팅되는지 여부입니다. 공개 이름에는 응답하고 내부 이름에는 응답하지 않는 리졸버는 정책 문제이지 고장 난 터널이 아닙니다.

일부 회사 클라이언트는 가상 어댑터의 트래픽도 차단합니다. 필터 드라이버에는 에뮬레이터가 가상 어댑터처럼 보이므로, 호스트는 완벽하게 동작하는데 정책이 에뮬레이터를 거부할 수 있습니다. 그 정책은 워크스테이션에서 보이지 않고, 프록시 설정을 추측해도 드러나지 않습니다. 호스트는 해석되는데 리졸버 설정과 무관하게 에뮬레이터가 차단된다면 올바른 에스컬레이션 대상은 클라이언트 정책을 소유한 팀입니다.

점검 순서와 각 결과의 의미

위에서 아래로 진행하고 처음 실패하는 행에서 멈추세요. 각 결과는 서로 다른 소유자를 가리키며, 어느 것도 Android Studio를 다시 설치해서 해결되지 않습니다.

ResultLikely ownerNext check
adb devices is empty with USB attachedUSB, driver or adb servercable, authorization prompt, adb kill-server
adb start-server hangsmDNS discoveryADB_MDNS_OPENSCREEN=0
Emulator reaches 10.0.2.2, names failHost resolver to emulator boundaryhost lookup of the same name
Host resolves, emulator still failsEmulator process or client filterrestart emulator, ask IT about virtual adapters
Both fail for internal names onlySplit DNS or search domainresolver and zone configuration

일반적인 의미의 VPN 질문은 마지막 두 행뿐이고, DNS 내용에 관한 것은 마지막 행뿐입니다. adb 문서 는 서버 포트와 여기서 언급한 환경 변수를 다루며, 나머지를 시험하는 동안 전송 쪽을 정직하게 유지하기에 충분합니다.

관련 글