Android OpenVPN ne dodaje rutu bez adrese tunela
OpenVPN klijenti na Androidu ne mogu dodati rute dok telefon nema adresu tunela. Provjerite ko je dodjeljuje, koji je pull filtri odbacuju i kada je trebate upisati sami.
Vaš OpenVPN profil na Androidu ne dodaje rutu jer telefon nema adresu na virtualnom sučelju, pa nema čega da se ruta dotakne. Rute odgovaraju samo na pitanje kamo paketi trebaju ići. Adresa tunela odgovara na pitanje ko je telefon unutar tunela, a klijent je mora osigurati prije nego sučelje može postojati. Prođite kroz četiri provjere ispod redom i zaustavite se na prvom neuspjehu, jer uređivanje ruta prije nego adresa postoji skriva pravi problem.
Pročitajte neuspjeh onim redom kojim ga klijent izvodi
VpnService.Builder Androida drži dva pojma odvojenima: addAddress() stavlja adresu na sučelje koje aplikacija gradi, addRoute() dodaje odredišni prefiks, a establish() odbija stvoriti sučelje dok nije dodana barem jedna adresa. OpenVPN klijent preslikava profil i opcije koje server gura točno na te pozive, pa veza koja nikad ne parsira adresu uopće ne može izgraditi sučelje.
Zato linija zapisa koju čitate može navesti rutu dok uzrok stoji korak ranije. Klijent dolazi do faze rute tek nakon što sučelje postoji; bez adrese poziv rute odmah pada ili se nikad ne izvršava. Kad zapis 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?
Za rutiranu OpenVPN uslugu adresa dolazi iz skupa servera ili iz dodjele po klijentu, a topologija odlučuje kakav će oblik imati. Na serveru OpenVPN 2.4 ili novijem, usluga s topologijom podmreže izgleda ovako:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
S tim oblikom server gura nešto poput ifconfig 10.8.0.6 255.255.255.0. Starija topology net30 instalacija gura umjesto toga adresu partnera, primjerice ifconfig 10.8.0.6 10.8.0.5, pa profil premješten između dvaju modela može izgledati ispravno dok nosi pogrešnu mrežnu masku.
U zapisu veze klijenta potražite poslani skup opcija. Ako u njemu uopće nema retka ifconfig, server nikad nije poslao adresu ili je klijent odbio opciju. Na serveru koji koristi client-config-dir, datoteka nazvana po common nameu certifikata mora postojati i nositi dodjelu:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
Provjera 2: zadržava li klijent dobivenu adresu?
Prefiltar je drugi čest uzrok. pull-filter postoji u OpenVPN 2.4 i novijem, a kad više filtara odgovara istoj opciji, pobjeđuje posljednji koji odgovara, pa završni catch-all uklanja adresu bez pogreške:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
Suzite filtar na opciju koje se doista ž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 pullove obično dolazi od nekoga tko se želi riješiti jedne jedine rute. route-nopull je uža sklopka: zadržava ifconfig i ostale poslane opcije, a odbija poslane rute i opcije nalik DHCP-u. Upotrijebite je kad je to doista ono što želite, a pitanje adrese riješite odvojeno.
Provjera 3: je li adresa vaša za upisivanje?
Ručno adresiranje opravdano je samo kad vam operator preda vrijednost. Ako je upišete sami, mora doći iz podmreže VPN klijenta, biti jedinstvena među aktivnim sesijama i odgovarati topologiji koju server izvodi. Kopiranje adrese stolne premosnice ili računala na udaljenom LAN-u pada po obje osnove: telefon bi tražio adresu koja već postoji negdje drugdje, a pristupnik ne bi imao povratni put do nje.
Prefiks udaljenog LAN-a u ruti je odredište, nikad identitet telefona. Ruta za 10.60.0.0/24 kaže dođi do te mreže kroz tunel; ne govori ništa o tome koju adresu 10.60.0.x telefon treba imati, a telefon ne treba imati nijednu od njih. Statičke dodjele pripadaju strani servera, gdje se ne mogu sudariti s dinamičkim skupom.
Dvije sesije na jednom identitetu otkrivaju isti sudar. Ako se isti certifikat poveže dvaput i server gura jednu fiksnu adresu objema, druga sesija duplicira prvu, a rješenje su odvojeni identiteti ili odvojene dodjele, a ne uređivanje na strani klijenta.
Provjera 4: drži li nešto drugo mjesto tunela?
Android dopušta samo jednu aktivnu VPN uslugu istodobno. Druga VPN aplikacija ili unos stalno uključenog VPN-a ostavljen uključenim za profil koji više ne radi može zauzeti to mjesto prije nego vaš OpenVPN klijent pozove establish(). Sučelje se tada nikad ne pojavi iako je profil valjan, pa odspojite drugi VPN, isključite postavku stalno uključenog i ponovno se povežite prije nego dirate profil.
Usluga koja inzistira na Ethernet premosnici je drugi slijepi put. Android aplikacija bez roota može stvoriti IP tunel, ne premosni Ethernet segment, pa nijedna adresa koju upišete neće pokrenuti server dev tap; operator mora ponuditi rutiranu uslugu. Kad prijavljujete problem, navedite naziv i verziju klijenta, poslani skup opcija, topologiju i točan korak u kojem se adresa trebala pojaviti.
Ako sve četiri provjere prođu i adresa je prisutna, jedinstvena i ispravno maskirana, pitanje rute postaje uobičajeno: koje prefikse server ovlašćuje i kako ih klijent treba ograničiti. Zapišite adresu tunela, njegovu mrežnu masku i topologiju prije nego išta drugo promijenite, jer su te tri vrijednosti ono što operator treba usporediti s pogledom servera.