En klient kobler til én av flere OpenVPN-servere og trenger deretter en liten tjeneste som kjører på den noden: en statusside, et metrikkendepunkt, en reservekopiagent. Å gi hver node den samme private tjenesteadressen gjør klientens konfigurasjon identisk uansett hvilken server den havnet på. Den bekvemmeligheten er reell, og den er også lett å overtolke: den delte adressen forteller hvilken node du nådde, ikke at noe er redundant.

Hvorfor samme adresse på hver node fungerer

Hver node eier adressen lokalt og svarer for den, slik at en klient som når den gjennom sin nåværende tunnel får tjenesten i den andre enden av den tunnelen. Ingenting koordineres mellom nodene, og ingen trafikk går fra én node til en annen.

Adressen er en lokal etikett, gjentatt og ikke replikert. Hver node svarer bare for seg selv, og ingen av dem videresender trafikk for adressen på vegne av en annen node. Det er dette som holder én klientkonfigurasjon gyldig mens serverne forblir uavhengige. Det er også grunnen til at designet ikke trenger noen koordinering mellom nodene.

Det er derfor den samme konfigurasjonen virker på hver server uten en rutingprotokoll mellom dem. Det er også derfor designet ikke sier noe om helse: adressen finnes på en usunn node akkurat som på en sunn, fordi den er bundet til verten og ikke til at tjenesten er nyttig.

Tildel den til loopback, ikke til tunnelen

Å legge adressen på et loopback-grensesnitt frikobler den fra levetiden til enhver tunnel-enhet, slik at en gjenoppkobling eller en konfigurasjonsinnlesing ikke fjerner den. Adressen finnes så lenge verten finnes.

En adresse på lo er ikke et filter. Tjenesten må fortsatt lytte på den, og brannmuren på verten vurderer fortsatt den reelle innkommende veien, som ankommer på tunnelgrensesnittet. Den som antar at loopback betyr bare lokalt, ender enten med å blokkere legitime klienter eller eksponere noe de ikke hadde tenkt.

Gjør tildelingen varig gjennom vertens nettverkskonfigurasjon i stedet for å legge den til igjen fra en hook. En oppsett-hook utløses ikke på en node der ingen tunnel kom opp, og tjenesteadressen bør ikke avhenge av tunnelaktivitet. Legg adressen i grensesnittkonfigurasjonen distribusjonen din eier, og start deretter på nytt én gang og kontroller den. En omstart er den eneste testen som overlever en senere konfigurasjonsendring.

ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev lo

Push én rute og mene én destinasjon

Klienten trenger en vertsrute for adressen, tilbudt av serveren den kobler til. Fordi hver server tilbyr samme destinasjon, endres ikke profilen når klienten flytter seg.

Kontroller hva klienten installerte før du gir tjenesten skylden.

ip route get 10.250.0.1

For en HTTP-tjeneste, gi adressen et navn og et sertifikat for det navnet. Den delte IP-en er ikke en identitet, og den fjerner ikke TLS-verifisering, og den rettferdiggjør heller ikke å kopiere én privat nøkkel til hver node. Et navn som løser til den delte adressen holder sertifikathistorien ordinær og lar deg beholde en identitet per node hvis du trenger det.

Hva den delte adressen ikke kan

Den gir ikke failover. Hvis den valgte noden dør, dør adressen med den, og klienten må koble til på nytt et annet sted.

Den migrerer ikke en levende TCP-økt, fordi en ny tilkobling avsluttes på en annen vert som ikke vet noe om den gamle.

Den velger ikke en sunn node, balanserer ikke last og synkroniserer ikke data mellom noder. Hver av disse er en egen mekanisme med sine egne feilmoduser, og å late som adressetrikset dekker dem er hvordan et enkelt design får et ufortjent rykte for robusthet. Hvis to tunneler er aktive samtidig, blir betydningen av destinasjonen tvetydig, så hold antakelsen om én aktiv tunnel eksplisitt.

Hold tjenesteidentiteten sammen med navnet

Skriv ned hva adressen betyr: den når tjenesten på noden klienten er koblet til akkurat nå. Den ene setningen forhindrer mesteparten av misforståelsen dette mønsteret tiltrekker seg.

Dokumenter deretter delene sammen: adressen, grensesnittet den lever på, ruten serveren pusher, og navnet og sertifikatet tjenesten presenterer. Fire små fakta en fremtidig leser kan verifisere, i den rekkefølgen de vil kontrollere dem.

Hvis kravet er en stabil destinasjon for en node-lokal tjeneste, passer mønsteret og koster nesten ingenting.

Hvis kravet er tilgjengelighet, flytt ett lag opp: en lastbalanserer, et tjenestenavn med helsesjekker, eller et orkestreringssystem som allerede vet hvordan en node erstattes.

Å bestemme det tidlig holder den delte adressen til det den er, en praktisk etikett, i stedet for en komponent det stille forventes at skal gjøre arbeid den aldri ble designet for.

Relaterte artikler