Een diens-IP op elke OpenVPN-node: wat dit nie doen nie
Reserveer ’n private /32 op elke node sodat ’n kliënt die bediener bereik wat hy gekies het. Die adres bied nie foutoorskakeling nie, skuif nie sessies oor nie en kies nie ’n gesonde node nie.
’n Kliënt verbind met een van verskeie OpenVPN bedieners en het dan ’n klein diens nodig wat op daardie node loop: ’n statusbladsy, ’n metrieke eindpunt, ’n rugsteunagent. As elke node dieselfde private diensadres kry, bly die kliënt se konfigurasie identies ongeag watter bediener hy getref het. Daardie gerief is werklik, en dit is ook maklik om te oorlees: die gedeelde adres sê vir jou watter node jy bereik het, nie dat iets oorbodig is nie.
Waarom dieselfde adres op elke node werk
Elke node besit die adres plaaslik en antwoord daarvoor, so ’n kliënt wat dit deur sy huidige tonnel bereik, kry die diens aan die ander kant van daardie tonnel. Niks word tussen nodes gekoördineer nie, en geen verkeer kruis van een node na ’n ander nie.
Die adres is ’n plaaslike etiket, herhaal eerder as gerepliseer. Elke node antwoord net vir homself, en nie een van hulle stuur verkeer namens die adres op ’n ander node deur nie. Dit is wat een kliëntkonfigurasie geldig hou terwyl die bedieners onafhanklik bly. Dit is ook hoekom die ontwerp geen koördinering tussen die nodes nodig het nie.
Dit is hoekom dieselfde konfigurasie op elke bediener werk sonder ’n roeteringsprotokol tussen hulle. Dit is ook hoekom die ontwerp niks oor gesondheid sê nie: die adres bestaan op ’n ongesonde node presies soos op ’n gesonde een, want dit is aan die gasheer gebind eerder as aan die diens wat nuttig is.
Wys dit aan loopback toe, nie aan die tonnel nie
Om die adres op ’n loopback-koppelvlak te plaas, ontkoppel dit van die leeftyd van enige tonneltoestel, so ’n herverbinding of ’n herlaai van die konfigurasie verwyder dit nie. Die adres bestaan solank die gasheer bestaan.
’n Adres op lo is nie ’n filter nie. Die diens moet steeds daarop luister, en die gasheer se vuurmuur evalueer steeds die werklike inkomende pad, wat op die tonnelkoppelvlak aankom. Enigiemand wat aanneem loopback beteken net-plaaslik, eindig óf deur wettige kliënte te blokkeer óf deur iets bloot te stel wat hulle nie bedoel het nie.
Hou die toewysing deur die gasheer se netwerkkonfigurasie vol, eerder as om dit weer uit ’n hook by te voeg. ’n Opstellingshook sal nie op ’n node loop waar geen tonnel opgekom het nie, en die diensadres moet nie van tonnelaktiwiteit afhang nie. Sit die adres in die koppelvlakkonfigurasie wat jou distribusie besit, herbegin dan een keer en kontroleer dit. ’n Herbegin is die enigste toets wat ’n latere konfigurasieverandering oorleef.
ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev loStoot een roete en bedoel een bestemming
Die kliënt het ’n gasheerroete vir die adres nodig, wat deur die bediener aangebied word waarmee hy verbind. Omdat elke bediener dieselfde bestemming aanbied, verander die profiel nie wanneer die kliënt beweeg nie.
Kontroleer wat die kliënt geïnstalleer het voordat jy die diens blameer.
ip route get 10.250.0.1Vir ’n HTTP-diens, gee die adres ’n naam en ’n sertifikaat vir daardie naam. Die gedeelde IP is nie ’n identiteit nie, en dit verwyder nie TLS-verifikasie nie, en dit regverdig ook nie om een private sleutel na elke node te kopieer nie. ’n Naam wat na die gedeelde adres oplos, hou die sertifikaatverhaal gewoon en laat jou ’n per-node identiteit behou as jy een nodig het.
Wat die gedeelde adres nie kan doen nie
Dit bied nie foutoorskakeling nie. As die gekose node sterf, sterf die adres saam daarmee, en die kliënt moet elders weer verbind.
Dit migreer nie ’n lewende TCP-sessie nie, want ’n nuwe verbinding eindig by ’n ander gasheer sonder enige kennis van die oue.
Dit kies nie ’n gesonde node nie, balanseer nie las nie en sinchroniseer nie data tussen nodes nie. Elkeen daarvan is ’n aparte meganisme met sy eie foutmodusse, en om voor te gee dat die adresseringstruuk hulle dek, is hoe ’n eenvoudige ontwerp ’n onverdiende reputasie vir veerkragtigheid kry. As twee tonnels gelyktydig aktief is, word die betekenis van die bestemming dubbelsinnig, so hou die aanname van een aktiewe tonnel eksplisiet.
Hou die diensidentiteit by die naam
Skryf neer wat die adres beteken: dit bereik die diens op die node waarmee die kliënt tans verbind is. Daardie enkele sin voorkom die meeste van die misverstand wat hierdie patroon lok.
Dokumenteer dan die stukke saam: die adres, die koppelvlak waarop dit leef, die roete wat die bediener stoot, en die naam en sertifikaat wat die diens aanbied. Vier klein feite wat ’n toekomstige leser kan verifieer, in die volgorde waarin hy hulle sal nagaan.
As die vereiste ’n stabiele bestemming vir ’n node-plaaslike diens is, pas die patroon en kos dit byna niks.
As die vereiste beskikbaarheid is, beweeg ’n laag op: ’n lasbalanseerder, ’n diensnaam met gesondheidskontroles, of ’n orkestrasiestelsel wat reeds weet hoe om ’n node te vervang.
Om dit vroeg te besluit, hou die gedeelde adres wat dit is: ’n gerieflike etiket, in plaas van ’n komponent wat stilweg verwag word om werk te doen waarvoor dit nooit ontwerp is nie.