Android OpenVPN ne dodaje rutu bez adrese tunela
Android OpenVPN klijenti ne dodaju rute dok telefon nema adresu tunela. Provjerite ko je dodjeljuje, šta pull filteri odbacuju i kada je smijete upisati sami.
Vaš OpenVPN profil na Androidu ne dodaje rutu jer telefon nema adresu na virtuelnom interfejsu, pa ruta nema na šta pokazivati. Rute govore samo kuda paketi treba da idu. Adresa tunela govori ko je telefon unutar tunela, a klijent je mora dati prije nego interfejs može postojati. Prođite četiri provjere ispod po redu i stanite na prvom neuspjehu, jer mijenjanje ruta prije nego adresa postoji skriva pravi problem.
Čitajte neuspjeh onim redom kojim ga klijent izvršava
VpnService.Builder na Androidu drži dva pojma odvojeno: addAddress() stavlja adresu na interfejs koji aplikacija gradi, addRoute() dodaje prefiks odredišta, a establish() odbija stvoriti interfejs dok nije dodana barem jedna adresa. OpenVPN klijent preslikava profil i opcije koje server gura upravo na te pozive, pa veza koja ne pročita adresu ne može izgraditi interfejs.
Zato linija u logu koju čitate može spominjati rutu dok uzrok stoji korak ranije. Klijent dolazi do faze rute tek kad interfejs postoji; bez adrese poziv odmah pada ili se nikad ne izvrši. Kada log kaže da ne može dodati rutu, počnite od adrese, a ne od sintakse rute.
Provjera 1: stavlja li server adresu u odgovor?
U usmjeravanoj OpenVPN usluzi adresa dolazi iz serverovog pula ili iz dodjele po klijentu, a topologija odlučuje o njenom obliku. Na serveru OpenVPN 2.4 ili novijem usluga s podmrežnom topologijom izgleda ovako:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccdS tim oblikom server gura nešto poput ifconfig 10.8.0.6 255.255.255.0. Starije postavljanje s topology net30 gura umjesto toga adresu partnera, na primjer ifconfig 10.8.0.6 10.8.0.5, pa profil premješten između dva modela može izgledati ispravno, a nositi pogrešnu mrežnu masku.
Potražite u logu veze klijenta skup gurnutih opcija. Ako nema nijedne linije ifconfig, server nikad nije poslao adresu ili je klijent odbio opciju. Na serveru koji koristi client-config-dir datoteka nazvana po zajedničkom imenu u certifikatu mora postojati i nositi dodjelu:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0Provjera 2: zadržava li klijent adresu koju je dobio?
Preširok filter je drugi čest uzrok. pull-filter postoji od OpenVPN 2.4 i novije, a kada se nekoliko filtera podudara s istom opcijom, pobjeđuje posljednji, pa završni filter koji hvata sve uklanja adresu bez greške:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"Suzite filter na opciju koje se zaista želite riješiti i ostavite adresu na miru:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"Savjet da isključite sve pull obično dolazi od nekoga ko želi ukloniti jednu rutu. route-nopull je uža sklopka: zadržava ifconfig i ostale gurnute opcije, a odbija samo gurnute rute i DHCP opcije. Koristite ga kada je to zaista ono što želite, a na pitanje adrese odgovorite odvojeno.
Provjera 3: je li adresa vaša da je upišete?
Ručno adresiranje je legitimno samo kada vam operater preda vrijednost. Ako je upišete sami, mora doći iz podmreže VPN klijenta, biti jedinstvena među aktivnim sesijama i odgovarati topologiji servera. Kopiranje adrese desktop mosta ili hosta na udaljenoj LAN mreži pada na dvije tačke: telefon bi tražio adresu koja već postoji negdje drugdje, a pristupnik ne bi imao povratni put do nje.
Prefiks udaljene LAN mreže u ruti je odredište, nikad identitet telefona. Ruta za 10.60.0.0/24 kaže stigni tu mrežu kroz tunel; ne kaže koju adresu 10.60.0.x telefon treba držati, i telefon ne treba držati nijednu od njih. Statičke dodjele pripadaju na stranu servera, gdje se ne sudaraju s dinamičkim pulom.
Dvije sesije na jednom identitetu pokazuju isti sudar. Ako se isti certifikat poveže dvaput i server gura jednu fiksnu adresu objema, druga sesija duplira prvu, a rješenje su odvojeni identiteti ili odvojene dodjele, a ne izmjena na klijentu.
Provjera 4: zauzima li nešto drugo mjesto tunela?
Android dopušta samo jednu aktivnu VPN uslugu odjednom. Druga VPN aplikacija ili always-on unos ostavljen uključen za profil koji više ne radi može zauzeti to mjesto prije nego vaš OpenVPN klijent pozove establish(). Tada se interfejs nikad ne pojavi iako je profil ispravan, pa odspojite drugi VPN, isključite always-on i ponovo se povežite prije nego dirate profil.
Usluga koja insistira na Ethernet mostu je drugi ćorsokak. Android aplikacija bez roota može stvoriti IP tunel, ali ne premosnjeni Ethernet segment, pa nijedna upisana adresa neće osposobiti server s dev tap; operater mora ponuditi usmjeravanu uslugu. Kada prijavljujete problem, navedite ime i verziju klijenta, skup gurnutih opcija, topologiju i tačan korak u kojem se adresa trebala pojaviti.
Ako sve četiri provjere prođu i adresa je prisutna, jedinstvena i pravilno maskirana, pitanje rute postaje obično: koje prefikse server odobrava i kako ih klijent treba ograničiti. Zapišite adresu tunela, njenu masku i topologiju prije nego promijenite bilo šta drugo, jer te tri vrijednosti operater treba uporediti sa serverskim prikazom.