Ваш контејнер може да слуша на 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-у и аутентификацији. Поновно генерисање сертификата да би се поправио пакет који никада није стигао је узалудан посао који додаје другу променљиву. Држите белешку о мапирању поред профила клијента како би следећа особа прочитала један ред уместо да поново открива сва три броја. Једно хватање пакета на страни домаћина решава која је од три карике погрешна, и кошта мање од поновног генерисања сертификата.

Овде описани случај је објављивање преко моста. Мрежа домаћина и рутиране адресе контејнера прескачу превод, па у тим решењима исти бројеви значе нешто друго.

Повезани чланци