Přidělení adresy znovu trvá minutu. Týden poté je místo, kde se přesun láme, a málokdy tam, kam naznačuje konzole poskytovatele. Nová veřejná IP se zmiňuje na čtyřech místech: socket, na kterém démon naslouchá, kořen důvěry, který klienti ověřují, každé pravidlo, které jmenuje starou adresu, a záznam DNS, který je spojuje. Dva přesuny vypadají na ovládacím panelu stejně, ale chovají se úplně jinak: přidělení adresy na stroji, který spravujete, nebo postavení druhého endpointu a přesun klientů na něj. Kontroly níže řadí laciné poruchy první a každá část uvádí, ke kterému přesunu patří.

Výměna na místě a paralelní přechod jsou různé práce

Výměna na místě zachová hostitele, klíče, směrovací tabulku i seznam uživatelů; mění se jen adresa. To dělá přidělení plovoucí IP, a u několika poskytovatelů si host ničeho nevšimne, protože překlad probíhá před instancí. Přestavba nebo přidělení od poskytovatele je tvrdší: host změnu vidí a vše, co si starou hodnotu uložilo do mezipaměti, se to dozví ve stejný okamžik.

Paralelní endpoint je druhý hostitel, který dělá stejnou práci. Postavte ho, otestujte jedním profilem a nechte starý odpovídat, dokud se nový neprokáže po skutečné cestě. Cenou je stav. Bez sdílených peer záznamů, odvolání a logování máte dvě sítě, které náhodou sdílejí jméno.

QuestionIn-place swapParallel endpoint
Rollback in one step?Only if you can get the old address backPoint DNS back; old host still up
Blast radiusEvery client at onceOnly the clients you moved
Best whenThe address is yours to reassignThe old address is gone for good

Najděte každé místo, kde je stará adresa zapsaná

Začněte textovým průchodem, protože konfigurační soubory jsou ta snadná polovina. Prohledejte konfiguraci démona, fragmenty firewallu, cíle monitoringu a jakýkoli vygenerovaný klientský balíček na disku. Zahrňte adresu IPv6, pokud nějakou publikujete; přesun, který sleduje jen záznam A, nechává klienty s duálním stackem na staré cestě.

OLD=203.0.113.10
grep -RIn -- "$OLD" /etc /root
ss -lunpt | grep -F "$OLD"
nft list ruleset | grep -F "$OLD"
iptables-save | grep -F "$OLD"
wg show all endpoints

Pak projděte jádro, protože běžící systém drží adresu na místech, která žádný soubor nezmiňuje. Statické pravidlo zdrojového NAT, záznam v ipset, adresa pro bind a záznam conntrack přežijí úpravu konfigurace, která je odstranila, a některé přežijí i restart, protože se vrátily z uložené sady pravidel. O vrstvu výš, skupiny zabezpečení poskytovatele, cíle load balanceru a kontroly monitoringu na vašem souborovém systému vůbec nejsou.

Zapište inventář, než cokoli změníte; poslouží i jako skript pro vrácení.

Klienti s názvem hostitele se zotaví; klienti s doslovnou IP ztichnou

Pokud se klienti dostávají na server přes název hostitele, je přechod hlavně problém DNS a TTL, který jste nastavili včera, rozhoduje, jak špatné to bude. Překladače cachují, stub překladače cachují znovu a mnoho klientů hledá jméno jen při novém spojení, takže zavedený tunel si drží svou počáteční adresu.

Je-li endpoint doslovná adresa, nic znovu nepřekládá a nic nezapisuje stížnost. WireGuard ukládá přeloženou adresu socketu: Endpoint = vpn.example.net:51820 se stane IP v okamžiku, kdy se spustí wg-quick up, a zůstane tou IP, dokud ji nezměníte. OpenVPN je shovívavější: překládá název hostitele remote při spojení a s resolv-retry infinite zkouší DNS znovu při opětovném připojení. S doslovnou IP oba dál vytáčejí stroj, který už neexistuje.

Co lidi mate, je zrcadlový obraz. Klient už nasměrovaný na novou adresu, zatímco starý posluchač ještě odpovídá, projde každým testem, který spustíte od svého stolu. Sám jsem se tím nechal zmást: nový endpoint naskočil na telefonu na první pokus a klient se zastaralým profilem se objevil, až když byl starý posluchač vypnut mnohem později.

Důvěra se s adresou nepřesouvá

WireGuard odděluje identitu od dosažitelnosti, což přesun adresy činí téměř zdarma. Peerové se identifikují veřejným klíčem a endpoint je jen to, kam pakety právě jdou; hostitel aktualizuje endpoint peeru podle zdrojové adresy posledního ověřeného paketu. Nečinný peer ale stále potřebuje důvod mluvit s novým místem a adresu se dozví, až když jeho relace zestárne a opakované pokusy o handshake selžou na viditelném místě. Rychlý úvod do WireGuardu pokrývá pole endpoint.

Servery založené na TLS jsou opačný případ. Certifikát je vázán na jméno a klient, který vytáčí adresu, porovnává, co vytáčel, s alternativními jmény subjektu. Připojte se přes IP k certifikátu, který nese jen DNS SAN, a ověření selže: jméno, které klient použil, v certifikátu není. Vydání s IP SAN opraví to jedno spojení a příští přesun zhorší. Ponechání názvu hostitele v profilu a verify-x509-name na místě drží kontrolu přísnou, i když se adresa pod ní mění.

Pak zkontrolujte, k čemu je démon vázán; socket připíchnutý na starou adresu selže tiše. Server OpenVPN spuštěný s local 203.0.113.10 odmítne nastartovat, jakmile adresa zmizí, zatímco posluchač na 0.0.0.0 změnu sleduje zdarma. NAT se dělí stejně: MASQUERADE sleduje, jakoukoli adresu stroj nyní má, a statický SNAT --to-source 203.0.113.10 dál přepisuje na adresu, kterou už nevlastníte, takže vratný provoz zmizí. Pokud nová adresa přichází s jinou upstream bránou, zkontrolujte rp_filter: filtrování zpětné cesty zahazuje vratný provoz přicházející na rozhraní, které jádro nečekalo.

Pořadí přechodu a důkazy, že fungoval

Snižte TTL den předem, postavte nový posluchač a prokažte ho profilem, který máte jen vy. Test zevnitř stejné sítě neprokazuje téměř nic, proto použijte telefon na mobilních datech a testujte něco, co má tunel přenášet, ne ping na endpoint.

Sledujte obě adresy po celou dobu. wg show all latest-handshakes na novém hostiteli nebo stavový soubor OpenVPN vám řekne, kolik peerů se skutečně přesunulo. Když má nový endpoint peery, které očekáváte, a starý jen opozdilce, vyřaďte starý posluchač, odstraňte zastaralé pravidlo NAT a vyjměte adresu z firewallu poskytovatele. Odstranění starého posluchače je krok, který se přeskakuje, a uzavírá mezeru, kde se zastaralý profil ještě dostane do staré sítě.

Spouštěč vrácení zapište před začátkem: pokud nový endpoint po dohodnutém okně nezíská handshake od jediného skutečného klienta, obnovte starou adresu a přestaňte distribuovat profily. Poté průchod zopakujte a potvrďte, že žádný posluchač není vázán na vyřazenou adresu. Dvě věci se přenášejí do dalšího přesunu: název hostitele v klientském profilu, aby příští změna byla úprava DNS, a inventář uložený vedle poznámek k obnově serveru.

Související články