Android OpenVPN tunel ünvanı olmadan marşrut əlavə etmir
Android OpenVPN müştəriləri telefonun tunel ünvanı olmayana qədər marşrut əlavə etmir. Onu kimin verdiyini, pull filtrlərinin nəyi atdığını və nə vaxt özünüz yazmalı olduğunuzu yoxlayın.
Android OpenVPN profiliniz marşrut əlavə edə bilmir, çünki telefonun virtual interfeysdə ünvanı yoxdur və marşrutun göstərəcəyi heç nə qalmır. Marşrutlar yalnız paketlərin hara getməli olduğunu deyir. Tunel ünvanı telefonun tunelin içində kim olduğunu deyir və müştəri interfeys yaranmadan əvvəl onu verməlidir. Aşağıdakı dörd yoxlamanı sıra ilə keçin və ilk uğursuzluqda dayanın, çünki ünvan yoxkən marşrutları dəyişmək əsl problemi gizlədir.
Uğursuzluğu müştərinin icra etdiyi sıra ilə oxuyun
Android-in VpnService.Builder iki anlayışı ayrı saxlayır: addAddress() tətbiqin qurduğu interfeysə ünvan qoyur, addRoute() təyinat prefiksini əlavə edir, establish() isə ən azı bir ünvan əlavə olunmayana qədər interfeysi yaratmaqdan imtina edir. OpenVPN müştərisi profil və serverin göndərdiyi seçimləri məhz həmin çağırışlara uyğunlaşdırır, ona görə ünvanı oxumayan bağlantı interfeysi heç qura bilmir.
Buna görə oxuduğunuz log sətri marşrutdan danışa bilər, səbəb isə bir addım əvvəldədir. Müştəri marşrut mərhələsinə yalnız interfeys mövcud olduqdan sonra çatır; ünvan olmadan çağırış dərhal uğursuz olur və ya heç işləmir. Log marşrut əlavə edə bilmədiyini deyirsə, marşrut sintaksisindən deyil, ünvandan başlayın.
Yoxlama 1: server cavabda ünvan qoyurmu?
Marşrutlaşdırılmış OpenVPN xidmətində ünvan server hovuzundan və ya hər müştəri üçün təyinatdan gəlir, topologiya isə formasını müəyyən edir. OpenVPN 2.4 və ya daha yeni serverdə subnet topologiyalı xidmət belə görünür:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccdBu formada server ifconfig 10.8.0.6 255.255.255.0 kimi bir şey göndərir. Köhnə topology net30 quraşdırması əvəzinə peer ünvanı göndərir, məsələn ifconfig 10.8.0.6 10.8.0.5, ona görə iki model arasında köçürülən profil düzgün görünə bilər, amma səhv netmask daşıyır.
Müştərinin bağlantı logunda göndərilən seçimlər dəstini axtarın. Əgər orada heç bir ifconfig sətri yoxdursa, server ünvan göndərməyib və ya müştəri seçimi qəbul etməyib. client-config-dir istifadə edən serverdə sertifikatdakı ümumi adla adlanan fayl mövcud olmalı və təyinatı daşımalıdır:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0Yoxlama 2: müştəri verilən ünvanı saxlayırmı?
Həddindən artıq geniş filtr ikinci geniş yayılmış səbəbdir. pull-filter OpenVPN 2.4 və sonrasında var və eyni seçimə bir neçə filtr uyğun gəldikdə sonuncu qalib gəlir, ona görə sonda duran hər şeyi tutan filtr ünvanı xətasız silir:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"Filtri həqiqətən yox etmək istədiyiniz seçimə qədər daraldın və ünvana toxunmayın:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"Bütün pulları söndürmək məsləhəti adətən bir marşrutdan qurtulmaq istəyən adamdan gəlir. route-nopull daha dar açar: ifconfig və digər göndərilən seçimləri saxlayır, yalnız göndərilən marşrutları və DHCP seçimlərini rədd edir. Həqiqətən bunu istəyirsinizsə ondan istifadə edin və ünvan sualına ayrıca cavab verin.
Yoxlama 3: ünvanı özünüz yazmalısınızmı?
Əl ilə ünvanlama yalnız operator dəyəri sizə verdikdə qanunidir. Özünüz yazsanız, o, VPN müştəri subnetindən olmalı, aktiv sessiyalar arasında unikal olmalı və serverin topologiyasına uyğun gəlməlidir. Masaüstü körpünün və ya uzaq LAN-dakı hostun ünvanını köçürmək iki cəhətdən uğursuz olur: telefon başqa yerdə artıq mövcud olan ünvanı tələb edər və şlüzün ora qayıtma yolu olmaz.
Marşrutdakı uzaq LAN prefiksi təyinatdır, heç vaxt telefonun kimliyi deyil. 10.60.0.0/24 üçün marşrut həmin şəbəkəyə tuneldən çat deyir; telefonun hansı 10.60.0.x ünvanını saxlamalı olduğunu demir və telefon onlardan heç birini saxlamamalıdır. Statik təyinatlar server tərəfinə aiddir, orada dinamik hovuzla toqquşmurlar.
Bir kimlik üzərində iki sessiya eyni toqquşmanı göstərir. Eyni sertifikat iki dəfə qoşularsa və server hər ikisinə bir sabit ünvan göndərərsə, ikinci sessiya birincini təkrarlayır və həll ayrı kimliklər və ya ayrı təyinatlar olmalıdır, müştəri tərəfində düzəliş deyil.
Yoxlama 4: tunel yerini başqa bir şey tuturmu?
Android eyni anda yalnız bir aktiv VPN xidmətinə icazə verir. Başqa VPN tətbiqi və ya artıq işləməyən profil üçün aktiv qalmış always-on girişi sizin OpenVPN müştərisi establish() çağırmadan yerini tuta bilər. Onda profil etibarlı olsa da interfeys heç görünmür, ona görə digər VPN-i ayırın, always-on-u söndürün və profilə toxunmadan əvvəl yenidən qoşulun.
Ethernet körpüləşdirməsində israr edən xidmət digər çıxılmaz yoldur. root olmayan Android tətbiqi IP tunel yarada bilər, körpülənmiş Ethernet seqmenti yox, ona görə yazdığınız heç bir ünvan dev tap serveri işlək etməz; operator marşrutlaşdırılmış xidmət təklif etməlidir. Problemi bildirəndə müştərinin adı və versiyası, göndərilən seçimlər, topologiya və ünvanın görünməli olduğu dəqiq addımı əlavə edin.
Dörd yoxlama da keçsə və ünvan mövcud, unikal və düzgün maskalanmış olsa, marşrut sualı adi bir suala çevrilir: server hansı prefikslərə icazə verir və müştəri onları necə məhdudlaşdırmalıdır. Başqa heç nəyi dəyişməzdən əvvəl tunel ünvanını, netmaskını və topologiyanı yazın, çünki operatorun server görünüşü ilə müqayisə etməsi üçün lazım olan üç dəyər bunlardır.