Un cliente conecta a un de varios servidores OpenVPN e despois necesita un servizo pequeno que se execute nese nodo: unha páxina de estado, un punto de métricas, un axente de copias de seguridade. Darlle a cada nodo a mesma dirección privada de servizo fai que a configuración do cliente sexa idéntica independentemente do servidor no que aterrase. Esa comodidade é real, e tamén é doado sobreinterpretala: a dirección compartida dinos a que nodo chegaches, non que algo sexa redundante.

Por que a mesma dirección en cada nodo funciona

Cada nodo posúe a dirección localmente e responde por ela, así que un cliente que a alcanza polo seu túnel actual obtén o servizo no extremo oposto dese túnel. Nada se coordina entre nodos, e ningún tráfico cruza dun nodo a outro.

A dirección é unha etiqueta local, repetida en vez de replicada. Cada nodo responde só por si mesmo, e ningún deles reenvía tráfico pola dirección en nome doutro nodo. Iso é o que mantén válida unha soa configuración de cliente mentres os servidores seguen sendo independentes. É tamén a razón pola que o deseño non necesita coordinación entre os nodos.

Por iso a mesma configuración funciona en todos os servidores sen un protocolo de encamiñamento entre eles. É tamén por iso que o deseño non di nada sobre a saúde: a dirección existe nun nodo enfermo exactamente igual que nun san, porque está ligada ao host e non a que o servizo sexa útil.

Asínaa ao loopback, non ao túnel

Poñer a dirección nunha interface de loopback desacóplaa da vida útil de calquera dispositivo de túnel, de modo que unha reconexión ou unha recarga de configuración non a elimina. A dirección existe mentres exista o host.

Unha dirección en lo non é un filtro. O servizo segue tendo que escoitar nela, e a devasa do host segue avaliando o camiño entrante real, que chega pola interface do túnel. Quen supón que loopback significa só local acaba bloqueando clientes lexítimos ou expoñendo algo que non pretendía.

Fai persistente a asignación mediante a configuración de rede do host en vez de volver engadila desde un hook. Un hook de instalación non se dispara nun nodo onde non subiu ningún túnel, e a dirección de servizo non debería depender da actividade do túnel. Pon a dirección na configuración da interface que xestiona a túa distribución, logo reinicia unha vez e compróbaa. Un reinicio é a única proba que sobrevive a un cambio de configuración posterior.

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

Empuxa unha ruta e refírete a un destino

O cliente necesita unha ruta de host para a dirección, ofrecida polo servidor ao que se conecta. Como todos os servidores ofrecen o mesmo destino, o perfil non cambia cando o cliente se move.

Verifica que instalou o cliente antes de culpar o servizo.

ip route get 10.250.0.1

Para un servizo HTTP, dálle á dirección un nome e un certificado para ese nome. A IP compartida non é unha identidade, e non elimina a verificación TLS, nin xustifica copiar unha clave privada a cada nodo. Un nome que resolve á dirección compartida mantén a historia do certificado ordinaria e permíteche conservar unha identidade por nodo se a necesitas.

O que a dirección compartida non pode facer

Non proporciona conmutación por fallo. Se o nodo escollido morre, a dirección morre con el, e o cliente ten que reconectar noutro sitio.

Non migra unha sesión TCP viva, porque unha conexión nova remata nun host distinto que non sabe nada da anterior.

Non escolle un nodo san, nin equilibra carga, nin sincroniza datos entre nodos. Cada unha desas cousas é un mecanismo á parte cos seus propios modos de fallo, e finxir que o truco de direccionamento as cobre é como un deseño simple adquire unha reputación inmerecida de resiliencia. Se dous túneles están activos á vez, o significado do destino vólvese ambiguo, así que mantén explícita a suposición dun só túnel activo.

Mantén a identidade do servizo xunto ao nome

Escribe o que significa a dirección: chega ao servizo no nodo ao que o cliente está conectado agora. Esa soa frase evita a maior parte do malentendido que atrae este patrón.

Logo documenta as pezas xuntas: a dirección, a interface na que vive, a ruta que empuxa o servidor, e o nome e o certificado que presenta o servizo. Catro feitos pequenos que un lector futuro pode verificar, na orde en que os comprobará.

Se o requisito é un destino estable para un servizo local do nodo, o patrón encaixa e non custa case nada.

Se o requisito é dispoñibilidade, sube unha capa: un balanceador de carga, un nome de servizo con comprobacións de saúde, ou un sistema de orquestración que xa sabe como substituír un nodo.

Decidilo cedo mantén a dirección compartida no que é, unha etiqueta cómoda, no canto dun compoñente do que en silencio se espera que faga un traballo para o que nunca se deseñou.

Artigos relacionados