192.0.2.10 ga ping yuborish faqat bitta manzil ICMP aks-sadosiga javob berganini aytadi, xolos. Tunnel yo‘q tarmoqda ham u muvaffaqiyatli bo‘lishi mumkin, chunki manzil mahalliy quyi tarmoqda bo‘lishi mumkin; sog‘lom tunnel bilan u muvaffaqiyatsiz bo‘lishi mumkin, chunki server HTTPS xizmat ko‘rsatayotganda ICMP ni tashlab yuboradi. Sizning skriptingizga kerak bo‘lgan tekshiruv bu platforma holati so‘rovi va ilova ishlatadigan manzilga marshrut sinovi. Ularni ikkita alohida maydon sifatida ko‘ring, hech qachon bitta mantiqiy qiymat sifatida emas.

Aks-sado javobi aslida nimani isbotlaydi

ICMP bu interfeyslar yoki tunnellar haqida tushunchasi yo‘q yetib borish protokoli. Javob kelganda yadro bitta host javob berganini xabar qiladi; so‘rovni qaysi marshrut olib borganini yoki javobni qaysi marshrut olib kelganini xabar qilmaydi. Filtrlash signalni yanada shovqinli qiladi, chunki aks-sado so‘rovlarini bloklaydigan xavfsizlik devori o‘zining orqasidagi portlar haqida hech narsa demaydi. Va bo‘lingan tunnel profili sinovdan o‘tgan manzilni ataylab chiqarib tashlashi mumkin, qolgan barcha manzillar ishlayotganda.

Siz aslida bilmoqchi bo‘lgan narsa — ilova bosib o‘tadigan yo‘lda muayyan xizmat ishlatsa bo‘ladimi. Ilova chaqiradigan host va portni tanlang, so‘ngra ilova darajasida javob talab qiling.

Yetib borish va tunnel holati boshqa-boshqa faktlar, va biri rost bo‘lganda ikkinchisi yolg‘on bo‘lishi mumkin. Ularni alohida saqlash nosozlik kimniki ekanini aytadi. Ularni bitta tekshiruvga qo‘shish hech kim marshrutlay olmaydigan chipta hosil qiladi.

Android dan ping emas, transportni so‘rang

Android holat savoliga ConnectivityManager orqali bevosita javob beradi. Faol tarmoq imkoniyatlari VPN transport bayrog‘ini olib yuradi, u trafik VPN interfeysi orqali yo‘naltirilganda o‘rnatiladi. Chaqiruv mahalliy, arzon va qaysidir uzoq host javob berishiga bog‘liq emas.

Java ning bu versiyasi faol tarmoq bo‘lmaganda istisno tashlash o‘rniga false qaytaradi. U faol tarmoqni o‘qiganligi uchun foydalanuvchi Sozlamalarda tanlagan profilni aks ettiradi.

ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities caps = cm.getNetworkCapabilities(cm.getActiveNetwork());
boolean tunnel = caps != null && caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);

O‘zgarish bildirishnomalari uchun taymer bilan so‘rash o‘rniga NetworkCallback ro‘yxatdan o‘tkazing. Buni VpnService.prepare bilan aralashtirmang, u faqat foydalanuvchi VPN uchun ruxsat berganini xabar qiladi, paketlar oqayotganini emas. Bekor qilish VpnService.onRevoke orqali keladi, lekin Sozlamalarda profilni unutish hech qanday eshittirish hosil qilmaydi.

iOS: interfeys nomlari taxmin, shartnoma emas

Ko‘pgina iOS parchalari proksi sozlamalarini tekshiradi, __SCOPED__ lug‘atini topadi va tap, tun, utun2, ppp yoki ipsec kabi interfeys kalitlarini qidiradi. Bu yondashuv nomlash an’anasi, hujjatlashtirilgan kafolat emas, shuning uchun interfeys nomini o‘zgartiradigan OS yangilanishi uni buzishi mumkin. Shuningdek u tunneldan uzoq yashaydigan eski yozuvlar uchun true xabar berishga moyil.

Konfiguratsiya ilovangizga tegishli bo‘lsa, o‘rniga NEVPNManager haqiqiy holat beradi. U ilovangiz boshlagan tunnelni tavsiflaydi; har bir ilova uchun VPN bilan boshqa ilovalar bu tunneldan butunlay tashqarida bo‘lishi mumkin.

Holatni o‘qishdan oldin sozlamalarni qayta yuklang, chunki tunnel ko‘tarilib tushganda qiymat o‘zgaradi:

let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
    let up = manager.connection.status == .connected
    print(up)
}

Platforma holat bayrog‘i baribir trafik sherikka yetib borishini isbotlamaydi. Aynan o‘sha bo‘shliqni marshrut sinovi qoplaydi, shuning uchun qo‘llab-quvvatlash uchun bitta mantiqiy qiymat yetarli emas.

Windows profillari haqiqiy holat maydonini ochib beradi

Windows VPN profillarini adapterlardan alohida kuzatadi, Get-VpnConnection esa o‘zi bilgan har bir profil uchun ConnectionStatus ko‘rsatadi. Windows mijozi yoki tayyorlash paketi orqali yaratilgan profillar shu yerda ko‘rinadi. Bu cmdlet umumiy tunnel aniqlagichi emas.

Nomlangan profil uchun maydonni o‘qing, profil barcha foydalanuvchilarga tegishli bo‘lsa -AllUserConnection qo‘shing:

Get-VpnConnection -Name "Fabrikam" | Select-Object Name, ConnectionStatus, ServerAddress

Uchinchi tomon mijozlari tunneli ishlab turganda ham bu cmdlet uchun ko‘rinmas bo‘lib qoladi, shuning uchun bo‘sh natija noma’lum degani, uzilgan emas. Adapter ro‘yxatlari ham shunday chalg‘itadi: sotuvchi adaptori bo‘sh turganda ham saqlanib qolishi mumkin, ba’zi adapterlar esa faqat sessiya davomida mavjud. Windows ga tegishli profil uchun rasdial shoxobcha qilish mumkin bo‘lgan chiqish kodini xabar qiladi. Bularning barchasi mahalliy ishonchni tavsiflaydi, sherikning yetib borishini emas.

Holat va marshrut: ikki qismli tekshiruv

Ulangan profil paketlar qayerga ketishini aytmaydi. Bo‘lingan tunnellash tunnelni ishlab turganda sizga muhim bo‘lgan manzilni chiqarib tashlashi mumkin. always-on profillar o‘lik server bilan ham ulangan holda qoladi, tunnel yiqilganda kill switch trafikni ataylab bloklaydi.

Ikkala qatlamni sinab ko‘ring: VPN transporti yoki profil faol ekanini tasdiqlang, so‘ngra manzil shu yo‘l orqali hal bo‘lishi va javob berishini tasdiqlang. Linux da yadrodan qaysi interfeysni ishlatishini so‘rang:

ip route get 192.0.2.10
resolvectl query intranet.example.test

Mijoz sizning nazoratingizdan tashqarida bo‘lsa, ikkala natijani ham jurnalga yozing va naqsh qatlamga ishora qilsin. Ulangan va muvaffaqiyatsiz marshrut sinovi bo‘lingan tunnellash, DNS yoki siyosatni ko‘rsatadi. Uzilgan va ishlaydigan marshrut sinovi trafikni boshqa yo‘l olib ketayotganini bildiradi.

Tartib bilan bajarish mumkin bo‘lgan sinov

Har qanday tarmoq holatini o‘zgartirishdan oldin birinchi navbatda platforma holatini yozib oling. Host nomini hal qiling va manzil oilasini qayd eting, chunki AAAA yozuvi A yozuvidan boshqa yo‘l olishi mumkin. Xizmat portini oching va shunchaki qo‘l berish o‘rniga ilova javobini talab qiling. Har bir kuzatuvni o‘z jurnal maydonida saqlang.

dig va curl bor Linux mashinasida uchta buyruq hal qilish, marshrut va xizmatning o‘zini qamrab oladi. Ularni tunnel ko‘tarilganda va yana tushirilganda ishga tushiring:

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

To‘rtta alohida maydon bitta mantiqiy qiymatdan afzal, chunki holat, DNS, marshrut va siyosat mustaqil ravishda ishdan chiqadi va turli jamoalarga tushadi. Terminaldagi ping yaxshi qo‘lda tekshiruv bo‘lib qoladi. Avtomatlashtirish uchun bu ulanishning yomon ta’rifi, u yerda platforma API si va marshrut sinovi haqiqiy savolga javob beradi.

O'xshash maqolalar