«Энэ аппыг хасах» унтраалга байхгүй: процесст өөрийн эх сурвалжийг өг
Маршрутлалт хаягийг тулгадаг, процессын нэрийг биш. Хасагдсан программд өөрийн эх сурвалж, хүснэгтийг өг, эсвэл шийдвэрийг чиглүүлэгч рүү зөө, тэнд шударга байдаг.
Нэг програм ердийн холболтыг ашиглах ёстой, бусад бүхэн туннель дээр үлдэнэ, мөн клиентэд үүнд унтраалга байхгүй. Нууц цэс ч олдохгүй. Маршрутыг пакетийн доторх талбаруудаас сонгодог бөгөөд пакет нь хаяг, портыг зөөдөг, түүнийг үүсгэсэн процессын таних тэмдгийг биш, тиймээс хасалтыг эдгээр талбарын аль нэгэнд илэрхийлэх ёстой. Пакетийг нэг удаа дага, боломжтой сонголтууд нууцлаг байхаа болино.
Клиент яагаад үүнийг санал болгож чадахгүй вэ
Очих газрын маршрутлалт очих газрын хаягийг угтвартай харьцуулж, хамгийн урт тохирлыг хадгална. Тэр мөчид пакет бүр ижил харагддаг, юу ч үүсгэсэн бай. Эх сурвалжийн бодлогын маршрутлалт харьцуулалтыг эх сурвалжийн хаяг хүртэл өргөжүүлдэг бөгөөд энэ нь практик шийдэл бүрийн ашигладаг дэгээ: эх сурвалжийг өөрчил, өөр хүснэгт тохиромжтой болно.
Портууд тус болохгүй. Портоор хасахыг очих газрын хайлтаас өмнө үнэлэх ёстой байсан бөгөөд порт тэр шийдвэрт ямар ч үүрэггүй. Портод суурилсан хасалт гэж сурталчилсан бүхэн үнэндээ өөр талбараар хасдаг бөгөөд үүнийг чөлөөтэй дүрсэлдэг.
Жинхэнэ апп тус бүрийн маршрутлалт платформ үүнд механизм нэмсэн газар л байдаг, жишээ нь Windows дахь шүүлтүүрийн дуудлага эсвэл Android дахь VPN үйлчилгээний холболт. Ширээний OpenVPN хувилбар үүнээс юу ч авчирдаггүй бөгөөд ямар ч тохиргооны туг үүнийг зохиодоггүй.
Linux: процессыг тэмдэглэ, дараа нь тэмдгийг маршрутла
Хамгийн цэвэр арга нь шийдвэрийг сокетыг эзэмшдэг процесст холбодог. owner тохирол OUTPUT гинжин хэлхээнд локал үүссэн трафикт ажилладаг тул тэнд тавьсан тэмдэг тусдаа хүснэгт сонгож чадна:
iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table 200
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.0 table 200
ip route add default via 192.168.1.1 dev eth0 table 200
1001 хэрэглэгчийн пакетууд дараа нь 200 хүснэгтэд хандаж, ердийн гарцаар гарна, харин үндсэн хүснэгт бусад бүхнийг туннель рүү илгээсээр байна. owner тохирол зөвхөн локал үүссэн пакетуудад хамаарна, энэ нь яг энд чухал трафик бөгөөд өөр хост руу дамжуулсан пакетыг ангилж чадахгүй. Зориулалтаар биш, хэрэгслээр шалга: ss -tnp тогтоосон холболтын локал хаяг, эзэмшигч процессыг харуулна, ip route get 1.1.1.1 mark 0x1 тэмдэг аль хүснэгтийг сонгож байгааг харуулна.
Сүлжээний нэрийн орон зай бие даасан программд илүү бат бөх хариулт, учир нь дотор нь үүсгэсэн сокет бүр бүтцээрээ түүнд холбогдсон байдаг тул туслах процессууд болон охин холболтууд ангилалгүйгээр зан төлөвийг өвлөдөг. Үнэ нь сантехник: veth хос, хоёр төгсгөлд хаяг, нэрийн орон зайн дотор хост руу буцаж заасан өгөгдмөл маршрут.
ip netns add novpn
ip link add veth-host type veth peer name veth-ns
ip link set veth-ns netns novpn
ip addr add 10.200.0.1/24 dev veth-host
ip netns exec novpn ip addr add 10.200.0.2/24 dev veth-ns
ip netns exec novpn ip route add default via 10.200.0.1
Windows: очих газар л шийднэ
Windows гарч буй интерфейсийг очих газраас сонгодог тул өөр зам хүссэн программ тэр сонголтоос өмнө стек асуудаг зүйлийг өөрчлөх ёстой. ForceBindIP эхний хагасыг хамардаг: програмыг сокетууд нь таны нэрлэсэн локал хаягт аль хэдийн холбогдсон байхад эхлүүлдэг. Зөвхөн энэ нь пакет аль интерфейсээр гарахыг өөрчлөхгүй, учир нь маршрутыг очих газар л сонгодог. Өгөгдмөл маршрут нь туннель рүү заасан зөөврийн компьютер дээр эх сурвалжийг холбо, пакет бүх л туннельд орно.
Шинж тэмдэг нь нэг удаа мэдвэл уншигдахуйц хэлбэртэй. Сонгосон интерфейс шууд хүрдэг LAN хаягт энэ нь биелдэг, интернэт дэх маршрут нь туннель рүү заасан бүх зүйлд бүтэлгүйтдэг. Програм ажлаа туслах руу шилжүүлэх хүртэл ажиллаж байгаа мэт харагддаг, учир нь өөрийн сокетыг онгойлгодог туслахад холболтын талаар хэзээ ч хэлээгүй.
Нэг процесс буруу нэгж байвал шийдвэрийг зөө
Жинхэнэ шаардлага програм биш, төхөөрөмж бол түүнийг өөрийн SSID эсвэл VLAN дээр тавьж, чиглүүлэгчид шийдүүл: тэр эх сурвалж ердийн замаар явна, бусад эх сурвалж туннель ашиглана. Тусгай гарцын машин бол нөгөө шударга загвар: VPN-ийг барьж, чиглүүлэгчийн илгээсэн очих газрыг л хүлээн авдаг. VLAN дээр бодлого төхөөрөмжийн онгойлгосон урсгал бүрийг хамарна, Windows аргыг эвдсэн туслах процессуудыг оролцуулан. Солилцоо бол хамрах хүрээ: тэр төхөөрөмж дээрх хоёр програмыг цаашид өөрөөр үзэх боломжгүй.
Хоёулаа нэг өгүүлбэрээр хэлж болох хамрах хүрээ бүхий эх сурвалж эсвэл очих газрын бодлого. Аль нь ч апп тус бүр биш бөгөөд өөрийгөө апп тус бүр гэж сурталчилсан загвар програм ажлаа хоёр дахь процесст шилжүүлсэн эхний л үед бүтэлгүйтдэг.