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 же админ панелин өткөрүп берүү кызматты жарыялоодон алда канча чоң чечим.