O cliente négase a arrincar e quéixase de que non pode enlazar un enderezo local, e a solución obvia parece apuntalo ao enderezo do túnel que espera recibir. Iso non pode funcionar, e convén entender o motivo: antes de que exista o túnel non hai enderezo interior, e o socket que contacta co servidor ten que existir primeiro. Hai dous enderezos distintos e só un deles pode elixirse localmente.

O erro de enlace nomea un enderezo local

Cando OpenVPN informa de que non pode enlazar un enderezo local, fala do socket de transporte: o extremo UDP ou TCP que leva a conexión cifrada ata o peer.

Unha directiva local explícita pídelle ao demonio que enlace ese socket a un enderezo local concreto. O enderezo debe existir no espazo de nomes de rede onde se executa o proceso, e debe ser asignable no momento en que arrinca o cliente.

Un enderezo público traducido nun router ou no bordo da nube non é un enderezo local que o demonio poida enlazar, aínda que sexa o enderezo que ve o servidor. Esa distinción explica por que un perfil funciona na casa e falla nunha instancia de nube. Tamén explica por que engadir o enderezo público a unha interface de loopback non axuda, xa que entón o transporte sairía dun enderezo ao que a rede non pode devolver nada. Le a lista de interfaces antes de editar o perfil.

Que seleccionan realmente local e remote

remote nomea o peer co que contactar. local enlaza o extremo próximo do mesmo socket. nobind deixa que o sistema operativo elixa tanto o enderezo local como o porto, e por iso os clientes detrás de routers domésticos adoitan funcionar sen ningunha das dúas directivas.

Ningunha das dúas directivas ten nada que ver co enderezo dentro do túnel.

Nun contedor ou nun espazo de nomes de rede aplícase a mesma regra con límites máis estreitos: os enderezos do anfitrión non están dentro, así que unha liña local copiada da configuración do anfitrión falla por un motivo totalmente distinto ao dun enderezo incorrecto.

ip -brief address show
ip route get 203.0.113.10

O enderezo interior vén do servidor

O enderezo dentro do túnel négóciase ou asígnase despois de establecer a canle de control. Cun pool dinámico o servidor decídeo ao conectar, e con configuración específica do cliente pode estar fixo por identidade.

Escribir local cun enderezo interior non lle pide ao servidor que asigne ese enderezo. No mellor caso o enlace falla; no peor o cliente atopa un enderezo de anfitrión non relacionado co mesmo valor e comeza a usalo para o transporte.

As interfaces que hai que ler tamén son distintas. Os parámetros de ifconfig e a configuración do pool describen o interior, mentres que remote, local, proto e nobind describen o exterior. Manter as dúas listas separadas explica case todos os exemplos confusos que atoparás nun foro. O manual de OpenVPN 2.6 documéntaos en seccións separadas por ese mesmo motivo.

A trampa: un túnel completo que captura o seu propio transporte

Unha vez que o túnel está levantado e transporta a ruta por defecto, os paquetes que o sosteñen non deben encamiñarse cara a dentro. É un problema de encamiñamento e non de enderezo, e o demonio resólveo instalando unha ruta máis específica cara ao enderezo do propio servidor a través da porta de enlace orixinal.

Se fixas o transporte a un enderezo local concreto e despois cambias o camiño que usa ese enderezo, a conexión exterior pode perderse mentres o interior segue configurado. O túnel segue informando de que está conectado porque o interior está ben. Só o transporte está roto, e por iso os rexistros se len como contradicións.

Os síntomas entón parecen un túnel que conecta e se conxela, ou un que se reconecta en bucle sen un erro útil. Comproba a ruta cara ao enderezo do peer antes de comprobar nada dentro do túnel, e confirma que o enderezo local que enlazaches segue pertencendo á interface que esperabas.

Un hábito que evita a confusión

Le cada enderezo dun perfil e decide a que capa pertence antes de editalo.

Se nomea o extremo afastado do transporte ou enlaza o seu extremo próximo, é un enderezo exterior e debe existir antes do arranque. Se describe o que ocorre dentro do túnel, vén do servidor ou da topoloxía, e ningunha directiva local pode substituílo.

Escribe as dúas listas nas notas de despregamento xunto ao perfil. A próxima sesión de diagnóstico comezará entón pola capa en lugar de por unha conxectura.

Artigos relacionados