Per què la teva assignació de ports VPN de Docker no arriba mai a OpenVPN
El port de l’amfitrió, el port del contenidor i el transport són tres decisions separades. Segueix un intent UDP per cada frontera abans de tocar els certificats.
El teu contenidor pot escoltar a UDP 1195 mentre l’amfitrió publica 1194, i això és correcte sempre que l’assignació ho digui. Els números formen una taula de traducció: el client marca el port de l’amfitrió, Docker reescriu la destinació cap al port del contenidor, i OpenVPN respon al port que indica la seva pròpia configuració. Una discrepància en qualsevol d’aquests enllaços produeix una fallada silenciosa que sembla un tallafoc. Els certificats i els xifrats se situen després i no la poden reparar.
Segueix un paquet del client al procés abans de canviar res de l’autenticació.
Tres números, una connexió
Els tres números són la destinació remota que fa servir el client, l’assignació publicada a l’amfitrió i l’oient dins del contenidor. No cal que siguin iguals, però han de formar una cadena. Els números iguals són un cas especial que resulta ser el més habitual, i per això una discrepància és fàcil d’escriure un cop i difícil de veure després.
Escriu la cadena en una línia abans de depurar: adreça i port del client, assignació de l’amfitrió, oient del contenidor, transport. Un defecte a la cadena es mostra com un número que apareix dues vegades amb valors diferents.
| Location | Example |
|---|---|
| Remote client destination | Host address, UDP 1194 |
| Published mapping | Host UDP 1194 to container UDP 1195 |
| Container listener | OpenVPN on UDP 1195 |
Què diu realment la sintaxi curta
En la forma curta, el costat esquerre és el port de l’amfitrió i el dret és el port del contenidor, i un sufix amb barra inclinada selecciona el transport. Si ometes el sufix, Docker tracta l’assignació com a TCP, de manera que un oient UDP darrere d’una assignació sense protocol és un oient al qual ningú no pot arribar. Aquest valor per defecte està documentat i encara sorprèn qui ha quadrat els números i ho ha donat per fet.
La forma llarga fixa explícitament l’adreça d’enllaç i el protocol, cosa que val les línies extra en qualsevol cosa exposada a una xarxa. Torna a llegir l’assignació publicada en lloc de confiar en el fitxer que la va produir.
ports:
- 1194:1195/udpOn es pot aturar el paquet
Una petició es pot descartar abans de Docker, a Docker o a l’oient. Davant de Docker hi pot haver un tallafoc de núvol o un encaminador que faci el seu propi reenviament, i aquell dispositiu necessita el port orientat a l’amfitrió i el transport correcte. Dins de Docker, una assignació cap a un port de contenidor equivocat reenvia a un sòcol tancat.
Després, l’oient: la configuració d’OpenVPN anomena un port i un protocol, i un client que arriba a un altre port dins del contenidor no arriba enlloc. Provar un servei UDP amb TCP no demostra res en cap d’aquestes etapes, així que fes servir el transport que farà servir el client.
Les adreces d’enllaç decideixen l’abast
Una assignació publicada lligada a loopback només és accessible des de l’amfitrió, mentre que una lligada a totes les interfícies és accessible allà on el tallafoc ho permet. Les dues semblen idèntiques en un fitxer Compose que omet l’adreça, i el valor per defecte de Docker és el més ampli.
Decideix quina exposició pretén el desplegament i després escriu-la explícitament. Una prova interna que connecta per loopback i un client remot que no pot connectar poden ser dues descripcions exactes del mateix contenidor.
Llegeix l’estat en execució
Inspecciona l’assignació efectiva del contenidor en execució i l’oient del seu espai de noms de xarxa. Un fitxer Compose pot haver estat editat després que el contenidor arrenqués, les metadades de la imatge poden declarar un port sense publicar-lo, i un segon contenidor pot ja ocupar el port de l’amfitrió. Declarar un port en una imatge no és publicar-lo, i cap de les dues coses no és el mateix que escoltar.
Tres estats diferents, tres ordres diferents, i només l’última implica OpenVPN.
Quan l’assignació és correcta
Quan el paquet arriba a OpenVPN, el seu registre és el lloc on llegir sobre TLS i autenticació. Regenerar certificats per arreglar un paquet que mai no va arribar és feina perduda que afegeix una segona variable. Mantén la nota de l’assignació al costat del perfil del client perquè la propera persona llegeixi una línia en lloc de redescobrir tots tres números. Una captura de paquets al costat de l’amfitrió decideix quin dels tres enllaços falla, i costa menys que una regeneració de certificats.
La publicació per pont és el cas que es descriu aquí. La xarxa de l’amfitrió i les adreces de contenidor encaminades s’estalvien la traducció, així que els mateixos números signifiquen una altra cosa en aquests dissenys.