Plný tunel versus cesta ke koncovému bodu: jak udržet VPN server dostupný
Tunel putuje přes síť, kterou nahrazuje. Porovnejte výjimku v podobě hostitelské cesty s označením socketu na úrovni aplikace a zjistěte, kdy každá z nich selže.
Přidejte výchozí cestu přes tunel a vlastní pakety tunelu ji budou následovat. Tabulka pak obsahuje pravidlo, které samo sebe ruší. Šifrované spojení se serverem se snaží jít uvnitř spojení, které se snaží navázat.
Dvěma mechanismy této smyčce brání. Jeden je vidět ve směrovací tabulce, druhý žije uvnitř aplikace.
Vnitřní a vnější provoz jsou různá rozhodnutí
Paket aplikace vstoupí do virtuálního rozhraní a je zapouzdřen. Výsledkem je nový paket adresovaný na veřejnou adresu serveru. Ten paket potřebuje cestu ve fyzické síti, protože nic z něj nesmí vstoupit do tunelu.
Obě jsou směrovací rozhodnutí a jen první patří tunelu. Když klient nainstaluje výchozí cestu, která pokrývá i server, vnější paket je zachycen také.
Příznaky jsou okamžité a úplné. Handshake se dokončí a pak nic neteče, nebo spojení spadne ve chvíli instalace cesty. V obou případech keepalive už nemůže odejít.
Možnost jedna: hostitelská cesta ke koncovému bodu
Přímý přístup přidá cestu k adrese serveru přes původní bránu. Zabere jeden řádek. Je vidět pro každého, kdo tabulku čte. Také se snadno vysvětluje v záznamu o změně.
Její slabina se objeví, když se změní podkladová trasa. Uložená cesta jmenuje bránu a rozhraní ze staré sítě. Po přepnutí Wi-Fi ta brána nemusí existovat a cesta zůstane, vypadá správně a nic nedělá.
# before the tunnel: which path reaches the endpoint?
ip route get 198.51.100.7
# pin it through the current gateway
ip route add 198.51.100.7/32 via 192.168.1.1 dev wlan0
# after the tunnel is up, confirm the pin survived
ip route get 198.51.100.7
Název hostitele to ztěžuje. Pokud je koncový bod jménem, které se překládá na několik adres, výjimka musí pokrýt adresu, která se skutečně používá. Pozdější vyhledání může vrátit něco, co cesta nikdy nepokrývala.
Možnost dvě: chránit socket
Druhý přístup se směrovací tabulky nikdy nedotkne. Klient označí nebo ochrání socket, který nese tunel, takže operační systém posílá provoz tohoto socketu mimo tunel podle zásady. Android zpřístupňuje mechanismus přímo aplikacím VPN. Desktopoví klienti implementují ekvivalenty pomocí značek firewallu nebo volání pro připojení k zařízení.
Výhodou je, že výjimka sleduje spojení, nikoli uloženou bránu. Změna sítě přepíše podkladovou trasu a chráněný socket se s ní přesune, protože nikdy nebyl připnut k adrese. Směrovací tabulka zůstává čistá.
Cenou je viditelnost. Nic ve směrovací tabulce výjimku neukazuje, takže recenzent hledající hostitelskou cestu nic nenajde a může usoudit, že návrh je nebezpečný. Ochrana žije v kódu klienta a v pravidlech zásad, která tento kód instaluje.
Jak vybírat mezi nimi
Zvolte mechanismus na úrovni socketu, když ho klient podporuje, protože přežije změny sítě, které připnutou cestu zlomí. Zvolte hostitelskou cestu, když výjimka musí být viditelná pro jiné nástroje nebo když klient nenabízí nic lepšího.
Ani jeden mechanismus neruší potřebu, aby adresa serveru byla vůbec dostupná. Privátní brána má veřejnou adresu pro naslouchání a právě tato adresa musí zůstat mimo tunel. Vnitřní sítě za ní se stanou dostupnými až poté, co tunel existuje.
Ať vyberete cokoli, držte to u komponenty, která tunel vlastní. Zbloudilá hostitelská cesta přidaná ručně funguje do další sítě a pak se stane zítřejším záhadným výpadkem.