Automatizacija L2TP-a na Androidu: skripta može zatražiti, ne izgraditi
Shell ruta ne podiže L2TP/IPsec na Androidu. IPsec, L2TP, PPP i politika platforme svaki imaju svoj dio, pa odaberite što to može kontrolirati.
Mit je da je L2TP na Androidu još jedna stvar koju shell skripta može pokrenuti: dodaj rutu, pozovi stari servis, gotovo. Ne može biti, jer se četiri različita sloja moraju složiti prije nego tunel prenese paket. Sloj IPsec štiti put, L2TP nosi sesiju, PPP pregovara vezu, a Android mora registrirati rezultat kao VPN oko kojeg može usmjeravati. Vidio sam to pokušano dvaput s kopiranim naredbama, i oba puta ruta je postojala dok ništa nije bilo šifrirano.
Što promjena rute zapravo postiže
Dodavanje rute odlučuje kamo paket ide dalje. Ono ne pregovara sigurnosnu asocijaciju, ne otvara L2TP sesiju i ne pokreće PPP razmjenu koja proizvodi adresu, partnera i DNS postavke. Na telefonu je vidljiv rezultat promet koji izlazi pogrešnim putem, ili izlazi i umire, bez ikakvog stanja tunela bilo gdje.
Isto vrijedi za poziv servisa kopiran iz starijeg izdanja. Androidova unutarnja VPN instalacija nije objavljeni API za automatizaciju, a numerirana transakcija iz druge verzije može pogoditi drugu operaciju ili zahtijevati privilegije koje skripta nema. Automatizacija koja nosi lozinku nikada ne bi smjela ovisiti o nagađanim unutarnjim argumentima, jer je način kvara ili tihi no-op ili napola stvoren profil koji nitko ne čisti.
Četiri vlasnika, a skripta nije nijedan
Uzmite ih redom. IPsec uspostavlja i održava zaštićeni put i autentificira partnere. L2TP nosi sesiju preko njega, i to slojevanje je razlog zašto standard prema njima postupa kao prema odvojenim mehanizmima, a ne jednom protokolu. Unutar toga, PPP pregovara parametre veze koje će klijent koristiti. Zatim Android posjeduje stranu platforme: registrirano VPN sučelje, opseg po aplikaciji, always-on stanje i životni ciklus koji odlučuje što se događa kad se aplikacija ubije.
Skripta može vidjeti samo posljednji od tih slojeva, i to obično neizravno. Može zamoliti klijenta da se poveže ako taj klijent izlaže dokumentiranu kontrolu, a zatim može promatrati stanje sučelja. Ne može zamijeniti tri niža sloja, niti može natjerati platformu da registrirano sučelje tretira kao VPN.
Zašto ni daemon nije prečac
Pokretanje privilegiranog Linux daemona na uređaju izgleda kao dio koji nedostaje, i često doista podigne tunel. Ono što ne čini jest registriranje tog tunela s Androidom. Sučelje postoji unutar kernela, ali odabir VPN-a platforme, usmjeravanje po aplikaciji, always-on politika i životni ciklus ne znaju za njega, a daemonove vlastite promjene ruta i DNS-a natječu se s upraviteljem mreže za iste tablice.
Rezultat je veza koja radi za daemonov promet i misteriozno ne radi za aplikaciju koja vam je bila važna, ili ona koja preživi dok sustav ponovno ne procijeni svoje mreže. Nijedan od tih ishoda nije bug platforme; to je granica između posjedovanja socketa i posjedovanja VPN sadržaja.
Kako izgledaju podržani putovi
Ako organizacija može prijeći na profil koji Android sam osigurava, put platforme je iskren. Od API 30, VpnManager podržava osiguravanje i kontrolu platformskih VPN profila od strane aplikacija, s tijekom autorizacije vezanim uz aplikaciju koja poziva. To nije L2TP pretvarač: model profila koji osigurava za IKEv2 ne prevodi postojeću L2TP konfiguraciju, a promjena protokola je migracija, ne preimenovanje. Identiteti, rute, privatni DNS i dopuštenja pristupa moraju se namjerno prenijeti.
Ako usluga mora ostati L2TP/IPsec, podržana kombinacija je klijent i izdanje OS-a koje operater stvarno dokumentira, i njegov ugovor o automatizaciji ako postoji. Kad nema dokumentirane kontrole bez nadzora, točan odgovor je podržana ručna veza, a ne krhka privilegirana skripta koja slučajno radi na jednoj gradnji.
Što radi ispravna automatizacija
Uz dokumentiranu kontrolu, automatizacija ima mali i obranjiv posao: zatražiti imenovanu vezu, čekati spremnost, zaustaviti se na pogrešci autentifikacije ili postavljanja, pokrenuti predviđeni posao i ostaviti čišćenje komponenti koja posjeduje vezu. Vjerodajnice ostaju s klijentom koji zna kako ih pohraniti i rotirati.
Zapišite koja komponenta posjeduje koji sloj prije nego što napišete prvi redak, i provjerite rezultat prema tome:
- IPsec i PPP obrađuje klijent, ne rute skripte.
- Veza se pojavljuje u VPN stanju platforme, pa se opseg po aplikaciji i always-on primjenjuju na nju.
- Nijedan unutarnji poziv servisa, broj transakcije ni nagađani argument ne nosi vjerodajnicu.
- Kvar u bilo kojem koraku ne ostavlja napola registriran profil.