Ваш кантэйнер можа слухаць 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 і аўтэнтыфікацыю. Перагенерацыя сертыфікатаў, каб выправіць пакет, які ніколі не прыйшоў, — марная праца, якая дадае другую зменную. Трымайце нататку пра мапу побач з профілем кліента, каб наступны чалавек прачытаў адзін радок, а не адкрываў усе тры лікі нанова. Адзін захоп пакетаў на баку хоста вырашае, якое з трох звёнаў няправільнае, і каштуе менш за перагенерацыю сертыфіката.

Тут апісаны выпадак публікацыі праз мост. Сетка хоста і маршрутызаваныя адрасы кантэйнераў абыходзяць пераклад, таму ў такіх схемах тыя ж лікі значаць іншае.

Падобныя артыкулы