LAN қызметін VPN шлюзінің өз мекенжайында жариялау
Бағдарланған портты клиенттен құрылғыға дейін және кері қарай бақылаңыз: межелік аудармасының ауқымын анықтап, содан кейін жауаптардың маршрутталатынын немесе аударылатынын шешіңіз.
LAN құрылғысын шлюздің өз туннельдік мекенжайларының бірінде ұсыну үшін NAT-тың бір жолы жеткілікті. Байланыс бәрібір сәтсіз аяқталады, өйткені жауап берген құрылғы клиент мекенжайының сол шлюз арқылы қолжетімді екенін білмейді. Пакетті клиенттен ішке қарай бақылаңыз, содан кейін жауапты кері сыртқа қарай бақылаңыз, сонда жетіспейтін жартысы айқын болады.
Клиенттің көзқарасынан бастаңыз
Бұл мысалдағы клиент VPN пулында, 10.62.0.0/24 желісінде отырады және 8080 портында 10.62.0.1 мекенжайына қосылады. Бұл мекенжай шлюздің өзіне тиесілі, сондықтан пакет басқа әріптеске емес, шлюздің ядросына жетеді. Шлюздің артында LAN — 172.21.4.0/24. Шлюзде 172.21.4.10 бар, ал HTTP қызметін нақты көрсететін құрылғы — 172.21.4.40.
Басқа VPN әріптесіне тиесілі мекенжайды шлюздің қызмет мекенжайымен алмастыруға болмайды. Егер клиент әріптестің мекенжайына қосылып жатса, шлюздің ешбір ережесі мүлде қатыспайды, және бұл тұтас шолу дұрыс емес жағдай.
Межелік аудармасының ауқымын әдейі шектеңіз
Тар нұсқа бір портты ұсынады және тек межелікті қайта жазады. Пакет өз протоколы мен бастауын сақтайды, және бұл шолудың қалған бөлігін қызықты етеді.
iptables -t nat -A PREROUTING -i tun0 -s 10.62.0.0/24 -d 10.62.0.1 -p tcp --dport 8080 -j DNAT --to-destination 172.21.4.40:80
Протокол мен порт өлшемдері жоқ ереже — кең нұсқа: ол клиент таңдаған кез келген портты сақтайды және тек мекенжайды өзгертеді. Бүкіл хостты ұсыну көзделсе, бұл заңды, ал бір қызмет көзделсе, қате. Ережені қайта оқып, интерфейс атауын растаңыз. Дұрыс емес интерфейстегі DNAT ережесі ештеңемен сәйкеспейді, бұл жоқ ережемен бірдей уақыт шегімін тудырады және құрылғыға қарап бір сағатты зая етеді.
Бағдарлау шекарасы келіссін
Аударма тақырыпты өзгертеді, рұқсат бермейді. Әдепкі жоққа шығару саясатында бағдарланған ағынға өз рұқсаты қажет, ал қайту бағытына сіздің саясатыңызда әбден болуы мүмкін орнықты байланыс ережесі қажет.
iptables -A FORWARD -i tun0 -o lan0 -d 172.21.4.40 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Әр DNAT ағыны үшін шартсыз рұқсат бұл жобадан кеңірек және кейінірек басқа біреу қосқан сәйкестендірулерге де жол береді. Межелік пен портты атаңыз, қалғанын жабық қалдырыңыз. Егер бағдарлау ережесінің есептегіштері нөлде тұрып, NAT есептегіштері өссе, пакет сіздің ережеңізге дейін тасталады. Екінші көшірме қосудың орнына тізбек ретін оқыңыз.
Құрылғы қалай да жауап беруі керек
Аудармадан кейін құрылғы 10.62.0.0/24 ішінен бастау көреді. Оның жауабы әдепкі шлюзіне кетеді, ол LAN маршрутизаторы, VPN шлюзі емес, егер әлдекім оған басқаша айтпаса. Екі реттеу мұны түзетеді және олар тең емес. Құрылғыдағы немесе LAN маршрутизаторындағы маршрут 10.62.0.0/24-ті 172.21.4.10-ға жібереді және клиент бастауын сақтайды. Шектелген бастау аудармасы оның орнына клиентті шлюздің LAN мекенжайының артына жасырады.
ip route add 10.62.0.0/24 via 172.21.4.10 dev eth1
iptables -t nat -A POSTROUTING -s 10.62.0.0/24 -d 172.21.4.40 -o lan0 -p tcp --dport 80 -j SNAT --to-source 172.21.4.10
Қызметке не қажет екеніне қарай таңдаңыз. Клиент бойынша саясат пен мәнді журналдар маршрутталған пішінді қалайды; маршрут беруге болмайтын құрылғы немесе міндетті түрде LAN мекенжайын көруі керек қызмет аударылған пішінді көрсетеді. Бір жауапты іске қосу үшін ғаламдық masquerade ережесіне жүгінбеңіз. Ол әр клиентті әр межеліктен жасырады және бастау мекенжайларына тәуелді саясаттарды үнсіз бұзады.
Шлюздің өзінен сынамаңыз
Шлюзде 10.62.0.1 мекенжайына жасалған сұрау кіріс PREROUTING арқылы емес, OUTPUT тізбегі арқылы шығады. Оның сәтсіздігі немесе сәттілігі клиентке қарайтын ереже туралы ештеңе айтпайды, және адамдар дәл осылай жұмыс істеп тұрған ережені бұзылған деп қорытындылайды.
conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'
Нақты клиент сұрауын іске қосып, екеуін де оқыңыз. conntrack жазбасы қолданылған аударманы көрсетеді, ал түсірілімдер сұраудың LAN-ға өткенін және туннельге қарай жауап қайтқанын көрсетеді. Ережелерді өзгерткеннен кейін жаңа байланыс пайдаланыңыз, өйткені бар күй өзінің бұрынғы сәйкестендіруін сақтайды және ескі әдіспен сәтсіз бола береді. Содан кейін бүкіл әңгімені растаңыз: құрылғы мекенжайы, бағдарлау рұқсаты және жауап маршруты бәрі бір ағынды сипаттайды.