Чаму ваш проброс порта Docker VPN ніколі не дасягае OpenVPN
Порт хоста, порт кантэйнера і транспарт — гэта тры асобныя рашэнні. Прасачыце адну спробу UDP праз кожную мяжу, перш чым чапаць сертыфікаты.
Ваш кантэйнер можа слухаць UDP 1195, пакуль хост публікуе 1194, і гэта правільна, калі так сказана ў мапе. Лікі ўтвараюць табліцу перакладу: кліент набірае порт хоста, Docker перапісвае прызначэнне на порт кантэйнера, а OpenVPN адказавае на порце, названым у яго ўласнай канфігурацыі. Няўзгодненасць на любым з гэтых звёнаў дае ціхі збой, які выглядае як міжсеткавы экран. Сертыфікаты і шыфры знаходзяцца ніжэй па плыні і не могуць гэтага выправіць.
Прасачыце адзін пакет ад кліента да працэсу, перш чым нешта змяняць у аўтэнтыфікацыі.
Тры лікі, адно злучэнне
Гэтыя тры лікі — аддалены пункт прызначэння, які выкарыстоўвае кліент, апублікаваная мапа на хосце і слухач унутры кантэйнера. Яны не абавязаны быць роўнымі, але павінны ўтвараць ланцуг. Роўныя лікі — асобны выпадак, які трапляецца найчасцей, і таму няўзгодненасць лёгка запісаць аднойчы і цяжка заўважыць потым.
Запішыце ланцуг адным радком перад адладкай: адрас і порт кліента, мапа хоста, слухач кантэйнера, транспарт. Дэфект у ланцугу паказвае сябе як лік, які з'яўляецца двойчы з рознымі значэннямі.
| Location | Example |
|---|---|
| Remote client destination | Host address, UDP 1194 |
| Published mapping | Host UDP 1194 to container UDP 1195 |
| Container listener | OpenVPN 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 і аўтэнтыфікацыю. Перагенерацыя сертыфікатаў, каб выправіць пакет, які ніколі не прыйшоў, — марная праца, якая дадае другую зменную. Трымайце нататку пра мапу побач з профілем кліента, каб наступны чалавек прачытаў адзін радок, а не адкрываў усе тры лікі нанова. Адзін захоп пакетаў на баку хоста вырашае, якое з трох звёнаў няправільнае, і каштуе менш за перагенерацыю сертыфіката.
Тут апісаны выпадак публікацыі праз мост. Сетка хоста і маршрутызаваныя адрасы кантэйнераў абыходзяць пераклад, таму ў такіх схемах тыя ж лікі значаць іншае.