Доћи до веб интерфејса унутар VPN контејнера: изаберите власника порта
Апликација дели мрежни простор имена VPN-а, па порт припада VPN контејнеру. Правилно повежите слушаоца, објавите на власнику и држите пут уским.
Са апликацијом је све у реду и са тунелом је све у реду, а контролна табла се ипак не учитава. Када услуга ради са network_mode: service:vpn, она дели мрежни простор имена VPN контејнера, што значи да њен слушалац и објављени портови припадају том простору имена, а не услузи. Из тога следе три одлуке: где се апликација везује, који контејнер објављује порт и колико је узак пут управљања. Поређајте их погрешним редоследом и свака појединачна поставка изгледа исправно, док комбинација не може да ради.
Коме припада простор имена порта
У дељеном простору имена, додавање записа ports: зависној услузи не чини ништа корисно, а неколико мрежних опција за њу није подржано по дизајну. Објавите уместо тога на контејнеру који поседује простор имена. Тај контејнер је и онај чија се адреса појављује на хосту, па се мапирање чита као један запис, а не један по услузи.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Обратите пажњу на адресу лево од мапирања. Везивање на 127.0.0.1 задржава објављени порт на loopback-у хоста, што обично жели интерфејс за управљање. Везивање на 0.0.0.0 га излаже на сваком интерфејсу хоста, и то је друга безбедносна одлука, не удобност.
Натерајте апликацију да слуша тамо где простор имена то очекује
Слушалац везан на 127.0.0.1 унутар простора имена доступан је само изнутра тог простора. Објављени портови хоста долазе споља, па апликација мора да веже ширу адресу да би мапирање радило. То је измена од једног реда на већини сервера, и управо се тај корак прескаче након копирања водича за очвршћивање написаног за постављање без контејнера.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Списак слушалаца унутар апликације говори истину о адреси везивања, а docker port показује шта је власник заиста објавио. Ако први показује 127.0.0.1, а други мапирање на хосту, нашли сте неслагање без дирања VPN конфигурације.
Изаберите како улази пут управљања
Постоје три разумна распореда. Објавите на VPN контејнеру и дођите до њега са хоста или из локалне мреже. Поставите обрнути прокси испред простора имена и дајте му једини отворени порт. Или држите контролну таблу доступном само изнутра простора имена кроз exec сесију или SSH тунел, што је најмање излагања и најмање удобности.
Који одговара зависи од тога коме и одакле је потребан интерфејс. Један администратор на истом хосту задовољава се везивањем на loopback. Тим који му приступа преко VPN-а треба смишљен пут и именованог власника. Избор прокси опције даје вам TLS и дневнике приступа, по цени још једне компоненте коју треба одржавати ажурном.
Отворите порт за управљање без отварања свега
Сопствена политика локалног приступа или закључавања VPN клијента може да одбаци долазни захтев за управљање, чак и док излазни тунел ради беспрекорно. Дозволите један документовани изузетак за предвиђени извор и порт, затим потврдите да уобичајена заштита тунела није измењена. Искључивање прекидача за хитне случајеве да би се контролна табла учитала замењује стварну контролу картицом у прегледачу.
Оставите сопствену аутентификацију апликације укључену. Боравак у стеку повезаном са VPN-ом не даје овлашћење сваком локалном кориснику или сваком уређају који може да дође до хоста, а административни панел без аутентификације иза тунела и даље је панел без аутентификације.
Проверите са уређаја за управљање, а затим проверите поново касније
Тестирајте са машине која ће заиста управљати услугом, не са хоста, а затим одвојено проверите интернет пут који апликација захтева. Успех у управљању доказује један смер и не говори ништа о излазу.
Тестирајте поново након што се стек поново створи. Замењени власник мреже мења простор имена на који се апликација прикључује, а URL који је радио пре ажурирања после њега можда неће показивати никуда. Запишите објављено мапирање и адресу везивања, да следећа поновна изградња буде провера од два минута, а не поновна истрага.