Контейнерът ви може да слуша на UDP 1195, докато хостът публикува 1194, и това е правилно, стига съпоставянето да го казва. Числата образуват таблица за превод: клиентът набира порта на хоста, Docker пренаписва дестинацията към порта на контейнера, а OpenVPN отговаря на порта, който собствената му конфигурация посочва. Несъответствие в която и да е от тези връзки дава тих отказ, който изглежда като защитна стена. Сертификатите и шифрите са надолу по веригата и не могат да го поправят.

Проследете един пакет от клиента до процеса, преди да промените каквото и да е по удостоверяването.

Три числа, една връзка

Трите числа са отдалечената дестинация, която клиентът използва, публикуваното съпоставяне на хоста и слушателят вътре в контейнера. Не е нужно да са равни, но трябва да образуват верига. Равните числа са специален случай, който случайно е най-честият, затова несъответствието е лесно да се напише веднъж и трудно да се забележи после.

Запишете веригата на един ред преди отстраняване на грешки: адрес и порт на клиента, съпоставяне на хоста, слушател на контейнера, транспорт. Дефект във веригата се показва като число, което се появява два пъти с различни стойности.

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

Какво всъщност казва краткият синтаксис

В кратката форма лявата страна е портът на хоста, а дясната — портът на контейнера, и наставка с наклонена черта избира транспорта. Пропуснете наставката и Docker третира съпоставянето като TCP, така че слушател по UDP зад съпоставяне без протокол е слушател, до който никой не може да стигне. Това поведение по подразбиране е документирано и все още изненадва хората, които са напаснали числата и са счели работата за свършена.

Дългата форма фиксира адреса за свързване и протокола изрично, което си заслужава допълнителните редове за всичко, изложено на мрежа. Прочетете публикуваното съпоставяне обратно, вместо да се доверявате на файла, който го е създал.

ports:
  - 1194:1195/udp

Къде пакетът може да спре

Заявката може да бъде отхвърлена преди Docker, в Docker или при слушателя. Преди Docker може да има облачна защитна стена или рутер със собствено препращане, и това устройство се нуждае от порта, обърнат към хоста, и правилния транспорт. Вътре в Docker съпоставяне към грешен порт на контейнера препраща към затворен сокет.

След това слушателят: конфигурацията на OpenVPN посочва порт и протокол и клиент, който пристига на друг порт вътре в контейнера, не достига до нищо. Тестването на UDP услуга през TCP не доказва нищо на нито един от тези етапи, затова използвайте транспорта, който клиентът ще използва.

Адресите за свързване решават достъпността

Публикувано съпоставяне, свързано с loopback, е достъпно само от хоста, докато това, свързано с всички интерфейси, е достъпно навсякъде, където защитната стена позволява. Двете изглеждат еднакво във файл на Compose, който пропуска адреса, а стойността по подразбиране на Docker е широката.

Решете какво излагане цели внедряването, после го запишете изрично. Вътрешен тест, който се свързва през loopback, и отдалечен клиент, който не може да се свърже, могат и двата да са точни описания на един и същ контейнер.

Прочетете работещото състояние

Проверете ефективното съпоставяне на работещия контейнер и слушателя в неговото мрежово пространство от имена. Файл на Compose може да е редактиран след стартирането на контейнера, метаданните на образа може да обявяват порт, без да го публикуват, а втори контейнер може вече да държи порта на хоста. Да обявиш порт в образ не е да го публикуваш и нито едно от двете не е същото като да слушаш.

Три различни състояния, три различни команди и само последната включва OpenVPN.

След като съпоставянето е правилно

След като пакетът стигне до OpenVPN, неговият журнал е мястото, където се чете за TLS и удостоверяване. Прегенерирането на сертификати, за да оправиш пакет, който никога не е пристигнал, е прахосана работа, която добавя втора променлива. Дръжте бележката за съпоставянето до клиентския профил, за да прочете следващият човек един ред, вместо да открива наново и трите числа. Едно прихващане на пакети от страна на хоста решава коя от трите връзки е грешна и струва по-малко от преиздаване на сертификат.

Публикуването през мост е случаят, описан тук. Мрежата на хоста и маршрутизираните адреси на контейнери пропускат превода, затова същите числа означават друго в тези схеми.

Подобни статии