د Android، iOS او Windows په څنګه د ping پرته د VPN حالت وګورو
ping یوازې دا ثابتوي چې یو هوسټ ځواب ورکړ، نه دا چې ټنل فعال دی. د Android، iOS او Windows د حالت API وپوښتئ، بیا هغه لاره وګورئ چې ستاسو اپلیکیشن واقعاً ورته اړتیا لري.
192.0.2.10 ته ping کول یوازې تاسو ته وایي چې یو پته د ICMP انګړ ته ځواب ورکړ، او نور هیڅ نه. په هغه شبکه کې چې ټنل نلري، دا کېدای شي لا هم بریالي شي، ځکه چې پته کېدای شي په محلي فرعي شبکه کې وي؛ د روغ ټنل سره دا کېدای شي ناکام شي، ځکه چې سرور ICMP پرېږدي کله چې HTTPS وړاندې کوي. هغه ګڼنه چې ستاسو سکریپټ ته اړتیا لري د پلیټفارم د حالت پوښتنه او د هغې منزل لپاره د لارې ازموینه ده چې اپلیکیشن یې کاروي. دوی دوه جلا ساحې وګڼئ، هیڅکله د یوې بولین په توګه نه.
د انګړ ځواب واقعاً څه ثابتوي
ICMP یو د رسیدو پروتوکول دی چې د انټرفیسونو یا ټنلونو تصور نلري. کله چې ځواب راځي، کرنل راپور ورکوي چې یو هوسټ ځواب ورکړ؛ دا نه راپور ورکوي چې غوښتنه کومې لارې وړلې او نه دا چې ځواب کومې لارې راوړ. فلټرول سیګنال لا هم شورن کوي، ځکه چې هغه فایر وال چې د انګړ غوښتنې بندوي د خپل شا پورټونو په اړه هیڅ نه وایي. او د ویشل شوي ټنل پروفایل کولای شي ازمویل شوې پته په قصداً توګه وباسي، پداسې حال کې چې نور ټول منزلونه کار کوي.
هغه څه چې تاسو واقعاً غواړئ پوه شئ دا دي چې ایا یو ځانګړی خدمت د هغې لارې له مخې چې اپلیکیشن تیریږي کارول کیدای شي. هغه هوسټ او پورټ غوره کړئ چې اپلیکیشن یې بولي، بیا د اپلیکیشن په طبقې کې ځواب وغواړئ.
رسیدنه او د ټنل حالت جلا حقایق دي، او یو یې سم کیدای شي پداسې حال کې چې بل ناسم وي. د دوی جلا ساتل تاسو ته وایي چې نیمګړتیا د چا ده. د دوی یوځای کول په یوه ګڼنه کې هغه ټکټ جوړوي چې هیڅوک یې نه شي رونډ کولای.
له Android څخه د ping نه، د ټرانسپورټ وپوښتئ
Android د حالت پوښتنې ته د ConnectivityManager له لارې مستقیم ځواب وایي. د فعالې شبکې وړتیاوې د VPN ټرانسپورټ بیرغ لري، کوم چې هغه وخت ټاکل کیږي کله چې ترافیک د VPN انټرفیس له لارې رونډ شي. دا بلنه محلي، ارزانه او د دې څخه خپله ده چې ایا کوم لرې هوسټ ځواب وایي که نه.
د Java دا نسخه false بیرته ورکوي پرځای د دې چې استثنا وغورځوي کله چې فعاله شبکه نشته. ځکه چې دا فعاله شبکه لولي، دا هغه پروفایل منعکس کوي چې کاروونکي په تنظیماتو کې غوره کړی.
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities caps = cm.getNetworkCapabilities(cm.getActiveNetwork());
boolean tunnel = caps != null && caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
د بدلون خبرتیاوو لپاره، د ټایمر په مرسته پوښتنې کولو پرځای NetworkCallback ثبت کړئ. دا د VpnService.prepare سره ګډ مه کوئ، کوم چې یوازې وایي چې ایا کاروونکي د VPN لپاره اجازه ورکړې، نه دا چې پاکټونه بهیږي. لغوه کول د VpnService.onRevoke له لارې راځي، خو په تنظیماتو کې د پروفایل هیرول هیڅ خپریدل نه جوړوي.
iOS: د انټرفیس نومونه یوه اټکل دی، تړون نه
ډیرې iOS ټوټې د پراکسي تنظیمات ګوري، __SCOPED__ قاموس مومي او د tap, tun, utun2, ppp یا ipsec په څیر د انټرفیس کیلي ګوري. دا طریقه د نومونو کنوانسیون دی، نه مستنده تضمین، نو هغه OS تازه کول چې د انټرفیس نوم بدلوي کولای شي دا مات کړي. دا هم د هغو زړو داخلونو لپاره true ویل غواړي چې له ټنل څخه اوږد ژوند کوي.
کله چې ترتیب ستاسو اپلیکیشن لري، NEVPNManager پرځای ریښتینی حالت درکوي. دا هغه ټنل تشریح کوي چې ستاسو اپلیکیشن پیل کړی؛ د هر اپلیکیشن VPN سره، نور اپلیکیشنونه کولای شي په بشپړه توګه د هغه ټنل څخه بهر وي.
د حالت لوستلو دمخه غوره توبونه بیا بار کړئ، ځکه چې ارزښت بدلیږي کله چې ټنل پورته او ښکته کیږي:
let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
let up = manager.connection.status == .connected
print(up)
}
د پلیټفارم د حالت بیرغ لا هم نه ثابتوي چې ترافیک ملګري ته رسیږي. هماغه تشه د لارې ازموینه پټوي، او له همدې امله د ملاتړ لپاره یوه بولین بس نه ده.
د Windows پروفایلونه ریښتینی د حالت ساحه ښیي
Windows د VPN پروفایلونه له اډاپټرونو جلا تعقیبوي، او Get-VpnConnection د هر هغه پروفایل لپاره ConnectionStatus ښیي چې پوهیږي. دلته هغه پروفایلونه ښکاري چې د Windows کلاینټ یا د چمتو کولو پاکټ له لارې جوړ شوي. دا cmdlet عمومي ټنل موندونکی نه دی.
د نومول شوي پروفایل لپاره ساحه ولولئ، او کله چې پروفایل د ټولو کاروونکو وي -AllUserConnection ورزیات کړئ:
Get-VpnConnection -Name "Fabrikam" | Select-Object Name, ConnectionStatus, ServerAddress
د دریمې ډلې کلاینټونه ډیری وختونه د دې cmdlet لپاره پټ پاتې کیږي حتی کله چې د دوی ټنل فعال وي، نو خالي پایله معنی ناڅرګند ده، نه جلا شوی. د اډاپټر لیستونه هم هماغسې ګمراه کوونکي دي: د پلورونکي اډاپټر کولای شي پداسې حال کې چې بې کاره وي پاتې شي، او ځینې اډاپټرونه یوازې د غونډې په جریان کې شته. د هغه پروفایل لپاره چې Windows یې مالک دی، rasdial د وتلو کوډ راپور کوي چې تاسو کولای شي پرې څانګه جوړه کړئ. دا ټول محلي باور تشریح کوي، نه د ملګري رسیدنه.
حالت او لاره: دوه برخې ګڼنه
نښلول شوی پروفایل د دې په اړه هیڅ نه وایي چې پاکټونه چیرته ځي. ویشل شوی ټنل کولای شي ټنل فعال وساتي او هغه منزل وباسي چې تاسو ته مهم دی. always-on پروفایلونه د مړ سرور سره هم نښلول شوي پاتې کیږي، او کله چې ټنل ولوېږي kill switch په قصداً توګه ترافیک بندوي.
دواړه طبقې وأزمویئ: تایید کړئ چې VPN ټرانسپورټ یا پروفایل فعال دی، بیا تایید کړئ چې منزل حل کیږي او د هماغې لارې ځواب وایي. په Linux کې، له کرنل څخه وپوښتئ چې کوم انټرفیس به کاروي:
ip route get 192.0.2.10
resolvectl query intranet.example.test
کله چې کلاینټ ستاسو له کنټرول څخه بهر وي، دواړه پایلې ثبت کړئ او پرېږدئ چې نمونه طبقه وښیي. نښلول شوی او ناکامه لارې ازموینه ویشل شوی ټنل، DNS یا پالیسي وړاندیز کوي. جلا شوی او کارکوونکې لارې ازموینه معنی دا ده چې بله لاره ترافیک وړي.
یوه ازموینه چې تاسو یې په ترتیب سره چلولی شئ
د شبکې هر حالت د بدلولو دمخه لومړی د پلیټفارم حالت ثبت کړئ. د هوسټ نوم حل کړئ او د پتو کورنۍ یادښت کړئ، ځکه چې AAAA ریکارډ کولای شي له A ریکارډ څخه بېله لاره ونیسي. د خدمت پورټ خلاص کړئ او د یوازې لاس ورکولو پرځای د اپلیکیشن ځواب وغواړئ. هر مشاهده په خپله لوګ ساحه کې وساتئ.
په هغه Linux ماشین کې چې dig او curl لري، درې کمانډونه حل، لاره او خدمت پخپله پټوي. دوی د ټنل پورته حالت کې او بیا ښکته حالت کې وچلوئ:
dig +short intranet.example.test
ip route get 198.51.100.20
curl -sS -o /dev/null -w "%{http_code}" --max-time 8 https://intranet.example.test/health
څلور جلا ساحې یوې بولین ته ماتې ورکوي، ځکه چې حالت، DNS، لاره او پالیسي په خپلواکه توګه ناکام کیږي او بیلابیلو ټیمونو ته رسیږي. په ټرمینل کې ping یوه ښه لاسي ګڼنه پاتې کیږي. د اتومات کولو لپاره دا د اړیکې خرابه تعریف دی، چیرې چې د پلیټفارم API او د لارې ازموینه ریښتیني پوښتنې ته ځواب وایي.