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

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