Váš profil OpenVPN na Androidu nepřidá trasu, protože telefon nemá na virtuálním rozhraní žádnou adresu, takže trasa nemá na co ukazovat. Trasy říkají jen to, kam mají pakety jít. Adresa tunelu říká, kdo je telefon uvnitř tunelu, a klient ji musí dodat dřív, než rozhraní může vzniknout. Projděte čtyři kontroly níže popořadě a zastavte se u prvního selhání, protože úprava tras před vznikem adresy zakrývá skutečný problém.

Čtěte selhání v pořadí, v jakém ho klient vykonává

VpnService.Builder na Androidu drží oba pojmy oddělené: addAddress() vkládá adresu na rozhraní, které aplikace staví, addRoute() přidává prefix cíle a establish() odmítá rozhraní vytvořit, dokud není přidána alespoň jedna adresa. Klient OpenVPN mapuje profil a volby posílané serverem přesně na tato volání, takže spojení, které adresu nepřečte, rozhraní vůbec nepostaví.

Proto řádek logu, který čtete, může zmiňovat trasu, i když příčina je o krok dřív. Klient se k fázi trasy dostane až poté, co rozhraní existuje; bez adresy volání okamžitě selže nebo se nikdy nespustí. Když log říká, že nemůže přidat trasu, začněte u adresy, ne u syntaxe trasy.

Kontrola 1: posílá server v odpovědi adresu?

U směrované služby OpenVPN přichází adresa z poolu serveru nebo z přiřazení pro jednotlivého klienta a topologie určuje její tvar. Na serveru OpenVPN 2.4 nebo novějším vypadá služba s podsíťovou topologií takto:

topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd

V tomto tvaru server posílá něco jako ifconfig 10.8.0.6 255.255.255.0. Starší nasazení s topology net30 posílá místo toho adresu protějšku, například ifconfig 10.8.0.6 10.8.0.5, takže profil přenesený mezi oběma modely může vypadat správně, ale nést špatnou síťovou masku.

Hledejte v protokolu připojení klienta sadu poslaných voleb. Pokud tam není žádný řádek ifconfig, server adresu nikdy neposlal nebo klient volbu odmítl. Na serveru s client-config-dir musí soubor pojmenovaný podle společného jména v certifikátu existovat a obsahovat přiřazení:

# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0

Kontrola 2: zachová si klient přidělenou adresu?

Příliš široký filtr je druhá častá příčina. pull-filter existuje od OpenVPN 2.4 a novějších a když na stejnou volbu odpovídá několik filtrů, vyhrává poslední, takže závěrečný filtr chytající vše adresu odstraní bez chyby:

# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"

Zužte filtr na volbu, které se opravdu chcete zbavit, a adresy si nevšímejte:

# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"

Rada vypnout všechny pull obvykle pochází od někoho, kdo se chce zbavit jediné trasy. route-nopull je užší přepínač: ponechá ifconfig i ostatní posílané volby a odmítá jen posílané trasy a volby DHCP. Použijte ho, když je to opravdu to, co chcete, a na otázku adresy odpovězte zvlášť.

Kontrola 3: je adresa vaše, abyste ji napsali?

Ruční adresování je oprávněné jen tehdy, když vám hodnotu dá operátor. Pokud si ji napíšete sami, musí pocházet z podsítě klienta VPN, být jedinečná mezi aktivními relacemi a odpovídat topologii serveru. Kopírování adresy stolního mostu nebo hostitele ve vzdálené LAN selže ve dvou bodech: telefon by si nárokoval adresu, která už jinde existuje, a brána by k ní neměla zpáteční cestu.

Prefix vzdálené LAN v trase je cíl, nikdy identita telefonu. Trasa pro 10.60.0.0/24 říká dosáhni této sítě tunelem; neříká, kterou adresu 10.60.0.x má telefon mít, a telefon nemá mít žádnou z nich. Statická přiřazení patří na stranu serveru, kde se nesrazí s dynamickým poolem.

Dvě relace na jedné identitě ukazují stejnou kolizi. Když se stejný certifikát připojí dvakrát a server pošle oběma jednu pevnou adresu, druhá relace duplikuje první a řešením jsou oddělené identity nebo oddělená přiřazení, ne úprava na klientu.

Kontrola 4: nedrží místo tunelu něco jiného?

Android povoluje jen jednu aktivní službu VPN najednou. Jiná aplikace VPN nebo záznam always-on ponechaný zapnutý pro profil, který už nefunguje, může to místo zabrat dřív, než váš klient OpenVPN zavolá establish(). Rozhraní se pak nikdy neobjeví, i když je profil platný, takže odpojte druhou VPN, vypněte always-on a připojte se znovu, než se profilu dotknete.

Služba, která trvá na ethernetovém mostu, je druhá slepá ulička. Aplikace pro Android bez rootu umí vytvořit IP tunel, ne přemostěný ethernetový segment, takže žádná napsaná adresa nerozjede server s dev tap; operátor musí nabídnout směrovanou službu. Když problém hlásíte, uveďte název a verzi klienta, sadu poslaných voleb, topologii a přesný krok, kde se adresa měla objevit.

Pokud všechny čtyři kontroly projdou a adresa je přítomná, jedinečná a správně maskovaná, stane se otázka trasy obvyklou: které prefixy server povoluje a jak je má klient omezit. Zapište adresu tunelu, její masku a topologii, než změníte cokoli dalšího, protože právě tyto tři hodnoty potřebuje operátor porovnat s pohledem serveru.

Související články