Қолданбада ешқандай ақау жоқ және туннельде ешқандай ақау жоқ, бірақ тақта әлі де жүктелмейді. Қызмет 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 одан кейін еш жерге сілтемеуі мүмкін. Жарияланған картаны және байланысу мекенжайын жазып қойыңыз, сонда келесі қайта құру қайталанған тергеу емес, екі минуттық тексеріс болады.

Қатысты мақалалар