Нэг портыг VPN-ээс гадуур гаргахад бодлогын маршрутлалт шаардлагатай
NAT дүрэм хаягийг дахин бичдэг ч гарах холбоосыг сонгодоггүй. Нэг TCP портыг туннелийн гадна байлгах дүрэм, хүснэгт, тэмдэглийг энд тайлбарлав.
Хүсэлт нь үргэлж нэг өгүүлбэрийн хувилбар: хөтлөлтөд VPN үлдээгээрэй, гэхдээ SSH эсвэл нөөц хуулбарын ажил ердийн холболтыг ашиглаг. Энэ тухай тархаж буй зөвлөгөө, өөрөөр хэлбэл портыг iptables NAT дүрмээр дамжуулах нь үүнийг хийдэггүй. NAT дүрэм урсгалын доторх хаяг, портыг дахин бичдэг; пакет аль интерфэйсээр гарч байгааг хэзээ ч сонгодоггүй. Тэр шийдвэр маршрут хайлтад хамаарах бөгөөд маршрут хайлтад порт харахын тулд тусламж хэрэгтэй.
Яагаад энгийн маршрут порттой тохирч чадахгүй вэ
Linux маршрутыг хүснэгтээс очих хаягийг хайж сонгодог, эхлээд нэр дэвшигч хүснэгтүүдийг бодлогын дүрмээр шүүсний дараа. Тэдгээр дүрэм галт ханын тэмдэг, эх хаяг, орж ирэх интерфэйс эсвэл UID-тай тохирч болно. Маршрутын бичлэгт өөрөө портын талбар байхгүй, учир нь маршрут тээврийн толгой мэдэгдэхүйц болохоос өмнө сонгогддог.
Орчин үеийн iproute2 болон цөмүүд дүрмийн сонгогчийг өргөжүүлдэг: ipproto, sport болон dport хүлээн авагдана, тиймээс ip rule add ipproto tcp dport 22 table 100 зорилгыг нэг мөрөнд илэрхийлнэ. Бодит хост дээр ip rule add help ажиллуулж, таны бүтээц dport жагсааж байгаа эсэхийг харна уу. Жагсааж байвал нэг командаар дууссан; байхгүй бол доорх тэмдэглийн зам ижил утгатай.
Ямар ч байсан дүрэм нь зөвхөн заагч. 100-р хүснэгтэд маршрут байх шаардлагатай, хүмүүс яг энэ хэсгийг мартдаг.
Гурван хэсэг, эсвэл нэг
Орчин үеийн хэлбэр нь дээрх ганц дүрэм болон өөр хүснэгт дэх маршрут юм. Сонгодог хэлбэр дунд netfilter нэмдэг: пакетыг тэмдэглэ, дараа нь дүрэмд тэмдэглийг тааруул. Хоёулаа нэг хайлтад төгсдөг; портыг хаана уншихад ялгаатай.
Тэмдэглийн арга нь netfilter тээврийн толгойг хардаг бол маршрутлалтын код түүхэн хувьд хардаггүй байсан учраас бий. Энэ бол бүх механизм бөгөөд нөөц хувилбар яагаад нэг ухаалаг команд биш, харин гурван хамтран ажилладаг хэсэг болохыг тайлбарладаг.
Гурван хэсэг дарааллаар
Эхлээд тойруулахыг хүсч буй урсгалуудыг тэмдэглэ, гинжин хэлхээ маршрутын шийдвэрээс өмнө тэмдэглэгдэхүйц эрт ажиллах ёстой:
nft add table inet vpnexempt
nft 'add chain inet vpnexempt out { type route hook output priority mangle; }'
nft add rule inet vpnexempt out tcp dport 22 meta mark set 0x1Хоёрдугаарт, тэмдэглэсэн пакетуудыг тусдаа хүснэгт рүү илгээ:
ip rule add fwmark 0x1/0x1 table 100Гуравдугаарт, тэр хүснэгтэд физик холбоосоор дамжуулан анхдагч маршрут өг. Хаягууд жишээ; өөрийнхөө хаягийг тавь:
ip route add default via 192.168.1.1 dev wlan0 table 100Гуравдугаар алхмыг алгасвал тэмдэглэсэн пакет 100-р хүснэгтээс маршрут олохгүй тул бүтэлгүйтнэ. Шинж тэмдэг нь дүрэм сүлжээг эвдсэн мэт харагддаг ч үнэндээ пакетэд үлдсэн цорын ганц замыг устгасан.
Эхний пакетын дараа ч ажиллуулж байдаг зүйл
Тэмдэглэгээ нь гарч буй пакетуудад хамаарна. Хариу нь тэр холбоосын олгосон хаягтайгаар физик интерфэйс дээр ирнэ, үндсэн хүснэгт тэр очих газарт туннелийг давуулан үзэж магадгүй. Хоёр механизм хариуны замыг тууштай байлгадаг: холбоосын хаягт зориулсан эхэд суурилсан дүрэм, урсгалын бүх амьдралын турш шийдвэрийг хадгалдаг холболтын хяналт. Тэмдэглийг conntrack-д хадгалж, хариунд сэргээх нь төлөвт онцгой тохиолдлыг тогтвортой болгох энгийн арга юм.
Урвуу замын шүүлт нь нөгөө нам гүм алуурчин. Хэрэв цөм буцах замыг чанд баталгаажуулж, хариу үндсэн хүснэгт сонгохгүй интерфэйс дээр ирвэл пакет ямар ч мэдэгдэлгүйгээр хаягдана. rp_filter анхдагч утгууд нь хуваалт болон интерфэйс дамжуулагдаж байгаа эсэхээс хамаарч өөр өөр байдаг тул унтарсан гэж бодохгүйгээр бодит утгыг уншаарай.
Туннелийн өөрийнх нь тээврийг тэмдэглэж болохгүй. WireGuard эсвэл UDP OpenVPN туннель нь TCP 22 биш, тиймээс дээрх жор аюулгүй, гэхдээ туннелийн очих газраас бусад бүх зүйл гэж бичсэн онцгой тохиолдол шифрлэгдсэн пакетуудыг бариад туннелийг маршрутын давталт мэт харагдах байдлаар эвдэж болно.
Бодохын оронд шалга
Цөмөөс аль замыг сонгохыг асуу, очих газар болон портын хувьд, дараа нь бодит дамжуулалтыг ажиллуул:
ip route get 203.0.113.10
ip rule show
nft list rulesetТэмдэглэгээ байгаа ч тоолуурууд хэзээ ч хөдөлдөггүй бол дүрэм тохирохгүй байна. Тоолуурууд нь таны бичсэн тохиргоо болон цөмийн хэрэгжүүлж буй бодлогын ялгаа юм.
Энэ хэзээ буруу хэрэгсэл вэ
Портод суурилсан онцгой тохиолдлууд байгалиасаа эмзэг. Үйлчилгээнүүд портоо сольдог, HTTP/3 нь UDP 443 хэлбэрээр ирдэг, нэг програмын өөр өөр төрлийн хэд хэдэн урсгал нээж болно. Хэрэв жинхэнэ шаардлага нь энэ программ ердийн холбоосыг ашиглах бол маршрутлалтын давхарга буруу газар; сүлжээний нэрийн орон зай эсвэл програм тус бүрийн прокси илүү тохирно.
Хэрэв шаардлага нь энэ дэд сүлжээ ердийн холбоосыг ашиглах бол тэмдэглэгээг бүрэн алгасаж, илүү тодорхой маршрут нэм. Энэ нь илүү энгийн, нэг хүснэгтэд харагдана, дараагийн хүн дүрмийн багц уншилгүйгээр аудит хийж чадна.
Галт хананд хүрэхээс өмнө гурван шаардлагын аль нь танд үнэхээр байгааг бич. Дээрх механизм нь нарийн бөгөөд буруу давхаргад хэрэглэсэн нарийвчлал нь зөвхөн илүү урт тасалдал юм.