Bạn kết nối VPN của văn phòng và Android Studio mất trình giả lập đang chạy, adb start-server bị treo, còn điện thoại thật trên Wi-Fi rơi khỏi danh sách thiết bị. Có vẻ như một đường hầm chặn một sản phẩm. Thực tế ba con đường riêng biệt thất bại theo ba cách: phát hiện thiết bị của adb, mạng ảo của trình giả lập và bộ phân giải của máy chủ. Đường hầm thường chỉ sở hữu con đường cuối, và thường chỉ một phần của nó.

Ba socket, ba chủ sở hữu

Máy chủ adb lắng nghe trên cổng 5037 của máy chủ và nói chuyện với thiết bị qua USB hoặc TCP, dùng mDNS để phát hiện trong mạng. Trình giả lập chạy sau bộ định tuyến ảo của riêng nó: khách là 10.0.2.15, cổng ra là 10.0.2.2 và máy chủ DNS là 10.0.2.3, và tiến trình trình giả lập chuyển tất cả thành socket của máy chủ. Bộ phân giải của máy chủ là nơi ứng dụng VPN cài DNS và các miền tìm kiếm.

Sự tách biệt đó giải thích vì sao một bản sửa có vẻ hiệu quả với công cụ này mà không với công cụ khác. Ứng dụng đổi bộ phân giải của máy chủ để lại tiến trình trình giả lập đang chạy với trạng thái bộ phân giải đọc lúc khởi động. Ứng dụng lọc multicast phá vỡ việc phát hiện mà không chạm vào DNS. Ứng dụng lọc card ảo từ chối trình giả lập trong khi trình duyệt của máy chủ vẫn chạy. Mỗi triệu chứng có nguyên nhân khác nhau, vì vậy hãy xác định con đường thất bại trước khi đổi bất kỳ cài đặt nào.

Bắt đầu từ những gì adb nhìn thấy

Chạy adb devices trước khi chạm vào VPN. Danh sách rỗng là vấn đề truyền tải, không phải định tuyến, và không cài đặt đường hầm nào sửa được thiết bị mà máy chủ chưa bao giờ liệt kê. Khởi động lại máy chủ thật sạch: trước tiên adb kill-server sau đó adb start-server, và đọc đầu ra để xem nó chiếm cổng nào. Nếu chính việc khởi động bị treo, phát hiện mDNS là nghi phạm thường gặp trên mạng lọc multicast; cách xử lý đã ghi nhận là khởi động máy chủ với tính năng phát hiện bị tắt:

ADB_MDNS_OPENSCREEN=0 adb start-server
adb devices

Với thiết bị thật, USB là con đường ngắn nhất. Nếu cần TCP, đưa thiết bị vào chế độ lắng nghe bằng adb tcpip 5555 và kết nối tới địa chỉ và cổng của thiết bị, adb connect 192.0.2.10:5555. Cổng 5037 là cổng máy chủ của máy chủ, không phải cổng thiết bị lắng nghe.

Thử trình giả lập từ bên trong

Trình giả lập trả lời DNS từ 10.0.2.3, và bộ phân giải đó được tiến trình của máy chủ cấp dữ liệu. Khi ứng dụng VPN đổi bộ phân giải của máy chủ, trình giả lập có thể thừa hưởng nó; khi ứng dụng lọc tiến trình trình giả lập hoặc danh sách card của máy chủ thay đổi sau khi khởi động, nó không thể. Tách hai bên bằng một đích số và một tên từ cùng một shell. adb shell ping -c 2 10.0.2.2 chứng minh mạng ảo tới được phía máy chủ. Truy vấn tên sau đó cho biết việc phân giải có vượt ranh giới hay không.

Sau đó chạy cùng truy vấn tên trên máy chủ. Máy chủ phân giải được còn trình giả lập không có nghĩa chỗ đứt nằm giữa bộ phân giải của máy chủ và mạng ảo của trình giả lập, không phải trong đường hầm. Cả hai thất bại nghĩa là phải xem bộ phân giải của máy chủ. Khởi động lại trình giả lập sau khi kết nối VPN đáng để thử một lần, vì vài ứng dụng cài trạng thái bộ phân giải mà tiến trình trình giả lập đang chạy không nhận.

Kiểm tra bộ phân giải của máy chủ và bộ lọc của ứng dụng

Ứng dụng đường hầm đầy đủ thay bộ phân giải của máy chủ bằng của mình, còn ứng dụng split-DNS thêm miền tìm kiếm và bộ chuyển tiếp có điều kiện. Tên nội bộ thường phụ thuộc vào cấu hình split-DNS đó, nên hãy xem máy chủ dùng gì khi đang kết nối: địa chỉ bộ phân giải, miền tìm kiếm và vùng nội bộ có được định tuyến tới DNS doanh nghiệp hay không. Một bộ phân giải trả lời tên công cộng nhưng không trả lời tên nội bộ là câu hỏi chính sách, không phải đường hầm hỏng.

Một số ứng dụng doanh nghiệp còn chặn lưu lượng từ card ảo. Với trình điều khiển lọc, trình giả lập trông như card ảo, nên máy chủ có thể chạy hoàn hảo trong khi chính sách từ chối trình giả lập. Chính sách đó không nhìn thấy từ máy trạm, và đoán cài đặt proxy sẽ không tiết lộ nó. Nếu máy chủ phân giải được mà trình giả lập vẫn bị chặn bất kể cài đặt, việc báo lên đúng chỗ là nhóm sở hữu chính sách của ứng dụng.

Thứ tự kiểm tra và ý nghĩa của từng kết quả

Làm từ trên xuống dưới và dừng ở dòng thất bại đầu tiên. Mỗi kết quả chỉ về một chủ sở hữu khác nhau, và không kết quả nào được sửa bằng cách cài lại 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

Chỉ hai dòng cuối là câu hỏi VPN theo nghĩa thông thường, và chỉ dòng cuối nói về nội dung DNS. Tài liệu adb bao gồm cổng máy chủ và các biến môi trường được nêu ở đây, đủ để giữ phía truyền tải trung thực trong khi bạn thử phần còn lại.

Bài viết liên quan