O teu contedor pode escoitar en UDP 1195 mentres o host publica 1194, e iso é correcto sempre que a asignación o diga. Os números forman unha táboa de tradución: o cliente marca o porto do host, Docker reescribe o destino ao porto do contedor e OpenVPN responde no porto que indica a súa propia configuración. Un desaxuste en calquera deses elos produce un fallo silencioso que parece un cortafogos. Os certificados e os cifrados están despois e non poden reparalo.

Segue un paquete do cliente ao proceso antes de cambiar nada da autenticación.

Tres números, unha conexión

Os tres números son o destino remoto que usa o cliente, a asignación publicada no host e o oínte dentro do contedor. Non teñen que ser iguais, pero deben encadearse. Os números iguais son un caso especial que resulta ser o habitual, por iso un desaxuste é fácil de escribir unha vez e difícil de ver despois.

Escribe a cadea nunha liña antes de depurar: enderezo e porto do cliente, asignación do host, oínte do contedor, transporte. Un defecto na cadea amósase como un número que aparece dúas veces con valores distintos.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

Que di realmente a sintaxe curta

Na forma curta o lado esquerdo é o porto do host e o dereito o porto do contedor, e un sufixo con barra inclinada escolle o transporte. Se omites o sufixo, Docker trata a asignación como TCP, así que un oínte UDP detrás dunha asignación sen protocolo é un oínte ao que ninguén pode chegar. Ese valor por defecto está documentado e aínda sorprende a quen cadrou os números e deu o asunto por rematado.

A forma longa fixa explicitamente o enderezo de enlace e o protocolo, o que vale as liñas extra en calquera cousa exposta a unha rede. Volve ler a asignación publicada en lugar de confiar no ficheiro que a produciu.

ports:
  - 1194:1195/udp

Onde se pode deter o paquete

Unha petición pode descartarse antes de Docker, en Docker ou no oínte. Diante de Docker pode haber un cortafogos de nube ou un router que faga o seu propio reenvío, e ese dispositivo necesita o porto orientado ao host e o transporte correcto. Dentro de Docker, unha asignación ao porto de contedor equivocado reenvía a un socket pechado.

Despois o oínte: a configuración de OpenVPN nomea un porto e un protocolo, e un cliente que chega a outro dentro do contedor non chega a nada. Probar un servizo UDP con TCP non demostra nada en ningunha destas etapas, así que usa o transporte que usará o cliente.

Os enderezos de enlace deciden o alcance

Unha asignación publicada ligada a loopback só é accesible desde o host, mentres que unha ligada a todas as interfaces é accesible onde o cortafogos o permita. As dúas parecen idénticas nun ficheiro Compose que omite o enderezo, e o valor por defecto de Docker é o amplo.

Decide que exposición pretende o despregue e despois escríbea explicitamente. Unha proba interna que conecta por loopback e un cliente remoto que non pode conectar poden ser ambas descricións exactas do mesmo contedor.

Le o estado en execución

Inspecciona a asignación efectiva do contedor en execución e o oínte no seu espazo de nomes de rede. Un ficheiro Compose pode ter sido editado despois de arrincar o contedor, os metadatos da imaxe poden declarar un porto sen publicalo, e un segundo contedor pode ocupar xa o porto do host. Declarar un porto nunha imaxe non é publicalo, e ningunha das dúas cousas é o mesmo que escoitar.

Tres estados distintos, tres ordes distintas, e só a última implica OpenVPN.

Cando a asignación é correcta

Unha vez que o paquete chega a OpenVPN, o seu rexistro é o lugar onde ler sobre TLS e autenticación. Rexenerar certificados para arranxar un paquete que nunca chegou é traballo perdido que engade unha segunda variable. Mantén a nota da asignación xunto ao perfil do cliente para que a seguinte persoa lea unha liña en lugar de redescubrir os tres números. Unha captura de paquetes no lado do host resolve cal dos tres elos falla, e custa menos que rexenerar un certificado.

A publicación por ponte é o caso descrito aquí. A rede do host e os enderezos de contedor encamiñados saltan a tradución, así que os mesmos números significan outra cousa neses deseños.

Artigos relacionados