Jedna servisna IP adresa na svakom OpenVPN čvoru: šta ona ne radi
Rezervišite privatnu /32 na svakom čvoru da bi klijent stigao do servera koji je odabrao. Adresa ne pruža prebacivanje pri kvaru, ne prenosi sesije i ne bira zdrav čvor.
Klijent se povezuje na jedan od nekoliko OpenVPN servera i zatim mu treba mala usluga koja radi na tom čvoru: stranica sa statusom, krajnja tačka za metrike, agent za rezervne kopije. Davanje iste privatne servisne adrese svakom čvoru čini klijentsku konfiguraciju identičnom bez obzira na to na koji je server sletio. Ta pogodnost je stvarna, a lako ju je i precijeniti: zajednička adresa govori vam na koji ste čvor stigli, a ne da je nešto suvišno.
Zašto ista adresa na svakom čvoru radi
Svaki čvor posjeduje adresu lokalno i odgovara za nju, pa klijent koji je dosegne kroz svoj trenutni tunel dobija uslugu na drugom kraju tog tunela. Između čvorova se ništa ne koordinira i nikakav saobraćaj ne prelazi s jednog čvora na drugi.
Adresa je lokalna oznaka, ponovljena, a ne replicirana. Svaki čvor odgovara samo za sebe i nijedan od njih ne prosljeđuje saobraćaj u ime adrese na drugom čvoru. To održava jednu klijentsku konfiguraciju važećom dok serveri ostaju nezavisni. To je i razlog zašto dizajn ne treba koordinaciju između čvorova.
Zato ista konfiguracija radi na svakom serveru bez protokola rutiranja između njih. Zato i dizajn ne govori ništa o zdravlju: adresa postoji na nezdravom čvoru jednako kao na zdravom, jer je vezana za host, a ne za to da li je usluga korisna.
Dodijelite je loopbacku, a ne tunelu
Stavljanje adrese na loopback interfejs odvaja je od životnog vijeka bilo kojeg tunelskog uređaja, pa je ponovno povezivanje ili ponovno učitavanje konfiguracije ne uklanja. Adresa postoji dokle god postoji host.
Adresa na lo nije filter. Usluga i dalje mora slušati na njoj, a host firewall i dalje ocjenjuje stvarnu dolaznu putanju, koja dolazi preko tunelskog interfejsa. Svako ko pretpostavi da loopback znači samo lokalno na kraju ili blokira legitimne klijente ili izlaže nešto što nije namjeravao.
Zadržite dodjelu kroz mrežnu konfiguraciju hosta, umjesto da je ponovo dodajete iz hooka. Hook za postavljanje neće se pokrenuti na čvoru na kojem tunel nije podignut, a servisna adresa ne bi trebala zavisiti od aktivnosti tunela. Stavite adresu u konfiguraciju interfejsa koju posjeduje vaša distribucija, zatim jednom ponovo pokrenite sistem i provjerite je. Ponovno pokretanje je jedini test koji preživljava kasniju promjenu konfiguracije.
ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev loPošaljite jednu rutu i mislite na jedno odredište
Klijentu je potrebna host ruta za adresu, koju nudi server na koji se povezuje. Pošto svaki server nudi isto odredište, profil se ne mijenja kad se klijent premjesti.
Provjerite šta je klijent instalirao prije nego okrivite uslugu.
ip route get 10.250.0.1Za HTTP uslugu, dajte adresi ime i certifikat za to ime. Zajednička IP adresa nije identitet i ne uklanja TLS provjeru, niti opravdava kopiranje jednog privatnog ključa na svaki čvor. Ime koje se razrješava na zajedničku adresu drži priču o certifikatu običnom i omogućava vam da zadržite identitet po čvoru ako vam treba.
Šta zajednička adresa ne može
Ona ne pruža prebacivanje pri kvaru. Ako odabrani čvor umre, adresa umre s njim i klijent se mora ponovo povezati negdje drugdje.
Ona ne migrira živu TCP sesiju, jer nova veza završava na drugom hostu bez ikakvog znanja o staroj.
Ona ne bira zdrav čvor, ne balansira opterećenje i ne sinhronizuje podatke između čvorova. Svako od toga je odvojen mehanizam sa sopstvenim načinima kvara, a pretvaranje da trik s adresiranjem ih pokriva jeste način na koji jednostavan dizajn stekne nezasluženu reputaciju otpornosti. Ako su dva tunela aktivna istovremeno, značenje odredišta postaje dvosmisleno, zato pretpostavku o jednom aktivnom tunelu držite eksplicitnom.
Zadržite identitet usluge uz ime
Zapišite šta adresa znači: ona doseže uslugu na čvoru na koji je klijent trenutno povezan. Ta jedna rečenica sprječava većinu nesporazuma koji ovaj obrazac privlači.
Zatim dokumentujte dijelove zajedno: adresu, interfejs na kojem živi, rutu koju server šalje, te ime i certifikat koje usluga predstavlja. Četiri male činjenice koje budući čitalac može provjeriti, onim redom kojim će ih provjeravati.
Ako je zahtjev stabilno odredište za uslugu lokalnu na čvoru, obrazac odgovara i gotovo ništa ne košta.
Ako je zahtjev dostupnost, pomjerite se sloj više: balanser opterećenja, ime usluge s provjerama zdravlja ili orkestracijski sistem koji već zna kako zamijeniti čvor.
Rano donošenje te odluke zadržava zajedničku adresu onim što jeste, zgodnom oznakom, umjesto komponente od koje se tiho očekuje da radi posao za koji nikada nije bila projektovana.