Další trasy Mac VPN potřebují vlastníka, ne přihlašovací skript
Trasa přidaná jednou při přihlášení není politika opětovného připojení. Dejte vzdáleným prefixům vlastníka a rozhodněte, jak se s tímto spojením objevují, mění a mizí.
Dosáhnout na privátní prefix přes VPN je požadavek s trváním: platí, dokud je to spojení použitelné, a končí, když skončí spojení. Přihlašovací skript to vyjádřit neumí, protože přihlášení a nahození tunelu jsou různé okamžiky a tunel, který existuje při přihlášení, nemusí být ten, který o minutu později nese provoz. První rozhodnutí není, který příkaz spustit. Je to, která komponenta prefix vlastní.
Prefix potřebuje vlastníka, ne okamžik
Začněte tím, že požadavek zapíšete jako větu s podmětem: dosáhněte 10.77.0.0/24 přes Office VPN, dokud je to spojení nahozené. Ta věta pojmenovává prefix, spojení i podmínku a okamžitě vylučuje dvě oblíbené náhrady: přihlašovací hook a název rozhraní, jako je ppp0 nebo utun2.
Názvy rozhraní se přidělují za běhu a nejsou mezi opětovnými připojeními stabilní. Hook, který odpovídá názvu viděnému minulý týden, buď nezasáhne, nebo zasáhne proti cizímu rozhraní. Oba výsledky vypadají jako chyba směrování, ne jako zastaralý předpoklad, kterým jsou. Stejná námitka platí pro každý skript vázaný na název, který existuje jen dokud je nahozený jeden konkrétní tunel.
Použijte podporovaný zdroj záměru trasy
Brána, spravovaný profil nebo dokumentovaný mechanismus tras vlastnícího klienta je to správné místo, kdykoli tento mechanismus dokáže požadavek vyjádřit. Který platí, závisí na protokolu a poskytovateli a klíče mezi nimi nepřecházejí, takže hodnota, která konfiguruje profil OpenVPN neříká nic o nativním klientu L2TP nebo IKEv2.
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
Pro vývojáře paketových tunelů nastavení tunelu IPv4 od Applu výslovně vystavuje zahrnuté a vyloučené trasy a IPv6 má svůj protějšek. To jsou API, která poskytovatel používá, ne důkaz, že každý nativní panel VPN nabízí správci libovolný seznam tras. Pokud současná kombinace nedokáže potřebné prefixy vyjádřit, je dalším krokem podporovaná cesta konfigurace od operátora, ne jiná aplikace nainstalovaná v naději, že se bude chovat lépe.
Životnost zahrnuje úklid
Externí pomocník je někdy skutečně potřeba, a pak je „přidej trasu“ nejmenší částí jeho práce. Musí vědět, kterému spojení slouží a které rozhraní toto spojení používá, počkat, až se příslušný stav sítě ustálí, zůstat idempotentní při dvou spuštěních za sebou, a neuklidit nic, co sám nenainstaloval.
Poslední klauzule je ta, která bolí. Pomocník, který smaže každou trasu odpovídající kancelářskému prefixu, dříve nebo později smaže trasu, kterou nepřidal. Výsledný výpadek se svede na klienta VPN, protože klient je část, kterou uživatel vidí. Rozhodnout, co pomocník vlastní, předtím než ho napíšete, je levnější než potom vysvětlovat, proč místní podsíť přestala odpovídat.
Závod při opětovném připojení
Představte si rychlé opětovné připojení. Relace A spadne, relace B naskočí a nainstaluje svou trasu, a pak konečně proběhne A-in odložený úklid. Pokud ten úklid odstraňuje trasy podle prefixu, vezme s sebou platný stav B a spojení, které před sekundou fungovalo, teď směruje do prázdna.
To je závod o vlastnictví a přidání spánku do skriptu jen mění, která strana ho vyhraje. Řešením je podmínit úklid identitou: porovnejte rozhraní a relaci, které pomocník nainstaloval, s těmi, které jsou stále aktuální, a odstraňujte jen při shodě.
Co testovat a co trasa neumí
Přijetí musí pokrýt čtyři přechody: první spojení, opětovné připojení na jiné rozhraní, neúspěšný pokus o připojení a závěrečné odpojení. Po každém z nich si přečtěte trasu, kterou systém skutečně zvolil pro adresu na vzdálené straně, ne tu, kterou jste očekávali.
route -n get 10.77.0.5
netstat -rn -f inet
Zahrňte i nepohodlné případy ve stejném průchodu: IPv6 tam, kde je potřeba, místní prefix, který se překrývá se vzdáleným, a trasu k samotnému veřejnému koncovému bodu VPN, která musí fungovat, dokud je tunel nahozený. Pak si zapište, co trasa není. Vybere pakety; neuděluje oprávnění na vzdálené straně a nevytváří zpáteční cestu, a to zůstávají oddělené požadavky s oddělenými vlastníky.
Výsledek, který chcete, je prefix, který následuje svého podporovaného vlastníka spojení přes každý přechod, a ne příkaz, který jednou náhodou uspěl na stroji, kde byl napsán.