VPN контейнеріндегі DNAT: INPUT емес, қайта бағыттау
DNAT-тан кейін туннель мекенжайына деген сұраныс қайта бағытталған трафикке айналады. Қайта бағыттау ережесін тарылтыңыз, Docker тізбегін оқыңыз және қайту жолын саналы түрде таңдаңыз.
Сұраныс туннель IP мекенжайына келіп, сол контейнерден көршілес қызметтің мекенжайына шығады. Осы екі сәттің арасында DNAT межелі мекенжайды қайта жазды, ал пакет VPN контейнері үшін кіріс болудан қалды. Енді ол басқа ережемен бағаланатын қайта бағытталған трафик. Бұл өзгеріс туннель мекенжайы үшін дұрыс көрінетін firewall ережесінің аударылған қосылымға неге әсер етпейтінін түсіндіреді.
Аудармадан кейін пакетті қадағалаңыз
10.90.0.0/24 клиент пулын және 10.90.0.1 туннель мекенжайын алыңыз. Бір көпірде екі контейнер бар: 192.0.2.2 VPN-ді, ал 192.0.2.3 қолданбаны іске қосады. Клиент 10.90.0.1:8080 мекенжайына қосылады, ал VPN контейнерінің атау кеңістігіндегі DNAT ережесі оны қолданбаның нақты мекенжайы мен портына қайта жазады. Содан кейін маршрут пакетті көпір арқылы жібереді. Бұл мекенжайлар мысал ретінде берілген, орналастыру рецепті емес.
Қолданба шын мәнінде тыңдайтын порт хостта жарияланған кез келген порттан өзгеше болуы мүмкін. Екі сан сәйкес келеді деп болжамай, контейнер ішіндегі тыңдаушыны оқыңыз.
Рұқсат қайта бағыттау жолына тиесілі
VPN контейнеріне IP қайта бағыттау және клиент пулымен, қолданба мекенжайымен және көздеген портпен шектелген қайта бағыттау шешімі қажет. Орнатылған жауаптарға өз рұқсаты керек. Бастапқы туннель мекенжайына сәйкес келетін ереже DNAT-тан кейін сәйкес келмейді, себебі межелі мекенжай өзгеріп қойған. INPUT рұқсаты бұл хостқа енді адрестелмейтін трафик үшін қате ілмек.
Аумақты тар ұстаңыз: бір көз ауқымы, бір межелі мекенжай, бір қызмет. Кең қайта бағыттау ережесін жазу оңай, ал кейін қорғау әлдеқайда қиын.
docker exec vpn-container ip route get 192.0.2.3
docker exec vpn-container iptables -t nat -S
docker exec vpn-container iptables -S FORWARD
Docker тізбектері сіздің контейнеріңіздің тізбектері емес
Контейнердің атау кеңістігіндегі ережелер Docker хостының ережелері емес. Трафик туннель интерфейсінен көпірге өткенде, хосттың көпір firewall-ы басқа шешім қабылдауы мүмкін. Docker-дің iptables backend-інде құжатталған қайта бағыттау тізбектері мен DNAT-тан кейінгі сәйкестік нүктелері осы шешім пайда болатын жер.
Docker firewall анықтамалығы осы тізбектерді және DNAT-тан кейінгі сәйкестікті сипаттайды. Жетіспейтін рұқсатты Docker-дің firewall басқаруын өшірумен немесе әр тізбекті рұқсат ететін етумен түзетпеңіз, себебі бұл пайдаланғыңыз келген шекараны алып тастайды.
Қайту жолын саналы таңдауға айналдырыңыз
Егер көз мекенжайы сақталса, қолданба 10.90.0.x көреді және жауаптарды VPN контейнері арқылы кері бағыттауы керек. Әйтпесе оның қарапайым Docker шлюзі оларды туннельге ие емес хостқа жібереді. Балама — VPN контейнерінде тар шектелген көз аудармасы, ол жауапты жеңілдетеді, бірақ клиентті қолданбадан жасырады. Саналы түрде таңдаңыз және қайсысын таңдағаныңызды жазыңыз.
Қарапайым клиенттен жаңа рұқсат етілген қосылымды сынап көріңіз, содан кейін байланыссыз порттардың жабық қалатынын растаңыз. Пакет жоғалғанда, VPN атау кеңістігін, қолданбаның атау кеңістігін және қолданбаның өз журналын қарап шығыңыз. Көпір шлюзіне ping қызметті қабылдау тесті емес.
Ережелерді контейнердің қолдау көрсетілетін іске қосу конфигурациясында ұстаңыз, себебі интерактивті өзгерістер ол қайта жасалғанда жоғалады. Хост портын жариялау — әсер етудің басқа жолы және қызмет туннель арқылы қолжетімді болғандықтан ғана қажет емес.