ADB এবং Android এমুলেটর VPN-এর পিছনে ব্যর্থ: তিনটি পথ
ADB আবিষ্কার, এমুলেটরের ভার্চুয়াল নেটওয়ার্ক কার্ড এবং হোস্ট রিজলভার VPN-এর পিছনে আলাদাভাবে ব্যর্থ হয়। টানেলকে দোষ দেওয়ার আগে প্রতিটি পথ ক্রমে পরীক্ষা করুন।
আপনি অফিস 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 পুনরায় ইনস্টল করে কোনোটিই ঠিক হয় না।
| Result | Likely owner | Next check |
|---|---|---|
| adb devices is empty with USB attached | USB, driver or adb server | cable, authorization prompt, adb kill-server |
| adb start-server hangs | mDNS discovery | ADB_MDNS_OPENSCREEN=0 |
| Emulator reaches 10.0.2.2, names fail | Host resolver to emulator boundary | host lookup of the same name |
| Host resolves, emulator still fails | Emulator process or client filter | restart emulator, ask IT about virtual adapters |
| Both fail for internal names only | Split DNS or search domain | resolver and zone configuration |
কেবল শেষ দুটি সারি প্রচলিত অর্থে VPN প্রশ্ন, এবং কেবল শেষটিই DNS বিষয়বস্তু নিয়ে। adb ডকুমেন্টেশন এখানে উল্লিখিত সার্ভার পোর্ট ও এনভায়রনমেন্ট ভেরিয়েবল কভার করে, যা বাকিগুলো পরীক্ষা করার সময় পরিবহন দিকটি সৎ রাখতে যথেষ্ট।