CGNAT артынан VPN клиент портын жариялау: тексеру тізімі
Тек мақсатты NAT ережесі жартылай ашық қосылымдар береді. Туннель мекенжайын бекітіңіз, екі бағытта да аударыңыз және сынақтан бұрын жауап жолын растаңыз.
Қызметті оператор деңгейіндегі NAT артындағы ноутбукке орналастырыңыз, сол ноутбукті VPN арқылы VPS-ке бағыттаңыз, сонда сырттан ешкім оған жете алмайды. VPS-те мақсатты NAT ережесін қосасыз және үнсіздіктен де жаман нәрсе аласыз: қосылымдар ашылады, содан кейін тұрып қалады. Жауап жоғалған жоқ, ол клиенттің өзінің әдепкі маршрутымен шығып жатыр, яғни сервер оны ешқашан көрмейді. Осы бес тексеруді ретімен орындаңыз және бірінші орындалмайтын жерде тоқтаңыз.
Сервердің мүлдем қайта жіберетінін растаңыз
Кез келген аударма жазбас бұрын осы ұяшықты белгілеңіз. Ядро қайта жіберуден бас тартатын пакет үшін DNAT ережесін ереже талдағышы қабылдайды, содан кейін қайта жіберу жолы оны тастайды, бұл қауіпсіздік қабырғасының мәселесіне ұқсайтын кідіріс тудырады.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
Оны жұмыс істеп тұрған ядрода орнату қайта жүктеу арқылы орнатумен бірдей емес. net.ipv4.ip_forward=1 мәнін /etc/sysctl.d/ астындағы файлға жазыңыз, sysctl --system іске қосыңыз, содан кейін файл қабылданды деп сенудің орнына мәнді қайта оқыңыз. Өз желілік ат кеңістігін басқаратын контейнерге сол кеңістіктің ішінде бірдей мән қажет, тек хостта ғана емес.
Егер қайта оқу әлі де нөл болса, осында тоқтаңыз. Төменде ештеңе жұмыс істемейді.
Кез келген ереже оған сілтеме жасамас бұрын туннель мекенжайын бекітіңіз
Пул мекенжайларды қосылым ретімен таратады, сондықтан бүгінгі жалға жазылған ереже келесі аптада үнсіз басқа клиентті нұсқауы мүмкін. Мекенжайды келу ретіне емес, сертификаттың жеке басына байлаңыз.
client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13
Бұл жұп нүктеден нүктеге дейінгі туннельдің клиент жағы мен серіктес жағы, ал сервер сертификаттың жалпы атына кілттелген. Ішкі желі топологиясында екінші мән оның орнына желілік маска ретінде оқылады, сондықтан қолданылып жатқан топологияға сай пішінді жазыңыз. Содан кейін клиентті қайта қосыңыз және мекенжайды клиенттің өзінде оқыңыз, өйткені сервердің пулға көзқарасы клиенттің нені конфигурациялағанының дәлелі емес.
Егер мекенжай қайта қосылғаннан кейін өзгерсе, тоқтаңыз. Қозғалыстағы нысананы ұстанатын NAT ережесі мезгіл-мезгіл сәтсіздікке ұшырайды және сізге ештеңе үйретпейді.
Екі бағытта да аударыңыз
Мақсатты аудару кіріс пакетін клиентке жібереді. Дәл дереккөзді аудару клиентті бастапқы жіберушіге емес, серверге жауап беруге мәжбүр етеді, және бұл адамдар жіберіп қоятын ереже.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13
Екінші ережесіз клиент өзінің ISP жоғары арнасы арқылы жауап береді, сондықтан алыс серіктес ешқашан сөйлеспеген дереккөз мекенжайын көреді, ал серверде жауап үшін ешқандай бақылау жазбасы болмайды. Сыртқы бақылаушы жартылай аяқталатын қол алысуды көреді және бұл адамдарды жоқ қауіпсіздік қабырғасының қатесін іздеуге жіберетін нақты белгі.
Екі ережені де iptables -t nat -S арқылы қайта оқыңыз және интерфейс атауының жария мекенжайды тасымалдайтын атау екенін растаңыз. nftables-пен әлдеқашан сүзетін хостта аударманы құралдарды араластырудың орнына сәйкес мекенжай тобындағы nftables NAT тізбегіне жазыңыз.
Сүзгі кестесін өткізіңіз
NAT кестелері тақырыптарды қайта жазады; олар рұқсат бермейді. Әдепкі DROP саясатымен қайта жіберілетін ағынға өзінің рұқсаты қажет, қосымша қайтару бағытын көптеген саясаттар әлдеқашан established,related ережесімен жабады.
iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Бірдеңе қоспас бұрын FORWARD тізбегінің саясатын тексеріңіз, өйткені ерте DROP тәртібі сіздің ережеңіздің қаралатынын шешеді. Сүзгілеуі nftables-те тұратын хостта баламалы ережені inet кестесінің forward ілгегіне қосыңыз және негізгі тізбектің тек жергілікті кірісті емес, шынымен қайта жіберілетін трафикті көретінін растаңыз. Егер жаңа ережедегі пакет санағышы нөлде қалып, NAT санағыштары өссе, пакет сіздің ережеңізге дейін тасталады. Бұл тізбектер тәртібін оқуға арналған сигнал, сол ереженің екінші көшірмесін қосуға емес.
Оны сыртқы желіден дәлелдеңіз
Байланыссыз желіден сынаңыз. Сол LAN-дағы басқа машинадан тексеру hairpin NAT қолдауы арқылы өтуі мүмкін және алыс клиент қолданатын жолды ешқашан жаттықтырмайды, сондықтан ондағы жасыл нәтиже дұрыс емес нәрсені дәлелдейді.
tcpdump -ni any port 29443
conntrack -L | grep 29443
Түсірілімді серверде және клиентте бір уақытта орындаңыз. Сервердегі түсірілім аударылған пакеттің туннельге қарай шығатынын көрсетеді; клиенттегі түсірілім сұраныстың келетінін және жауаптың қайда бағытталғанын көрсетеді. conntrack -L ішіндегі аударма жазбасы ереженің сәйкес келгенін дәлелдейді, ал оның болмауы пакеттің NAT тізбегіне ешқашан жетпегенін дәлелдейді.
Порт сканерлері әлсіз дәлел. Олар портты қолданба байланғанша және тыңдағанша жабық деп хабарлайды, сондықтан нақты қызметке нақты қосылымды пайдаланыңыз. Ақыры жұмыс істегенде, әсерді сол бір портта ұстаңыз: бірінші ереже ыңғайсыз көрінгендіктен SSH немесе әкімшілік панелін қайта жіберу қызметті жариялаудан әлдеқайда үлкен шешім.