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 эсвэл админ панелийг дамжуулах нь үйлчилгээ нийтлэхээс хамаагүй том шийдвэр юм.