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 руу гарсан эсэх, туннель рүү хариу буцаж ирсэн эсэхийг харуулна. Дүрэм өөрчилсний дараа шинэ холболт ашигла, учир нь одоо байгаа төлөв өмнөх буулгалтаа хадгалж, хуучин аргаар бүтэлгүйтсээр байх болно. Дараа нь бүх ярианы урсгалыг баталгаажуул: төхөөрөмжийн хаяг, дамжуулалтын зөвшөөрөл, хариуны маршрут бүгд нэг урсгалыг дүрсэлж байна.