Jeden program by mal používať bežné pripojenie, zatiaľ čo všetko ostatné zostáva v tuneli, a klient na to nemá prepínač. Nie je tu ani žiadne skryté menu, ktoré by sa dalo nájsť. Trasa sa vyberá z polí vnútri paketu a paket nesie adresy a porty, nie identitu procesu, ktorý ho vytvoril, takže vylúčenie musí byť vyjadrené v jednom z týchto polí. Prejdite paket raz a dostupné možnosti prestanú byť záhadné.

Prečo to klient nemôže ponúknuť

Smerovanie podľa cieľa porovnáva cieľovú adresu s prefixami a zachováva najdlhšiu zhodu. V tej chvíli vyzerá každý paket rovnako, čokoľvek ho vytvorilo. Smerovanie podľa zásad zdroja rozširuje porovnanie na zdrojovú adresu, a to je háčik, ktorý používa každé praktické riešenie: zmeňte zdroj a iná tabuľka sa stane použiteľnou.

Porty nepomáhajú. Vylúčenie podľa portu by sa muselo vyhodnocovať pred vyhľadaním cieľa a port v tomto rozhodnutí nehrá žiadnu úlohu. Všetko, čo sa ponúka ako vylúčenie založené na porte, v skutočnosti vylučuje podľa iného poľa a opisuje to nenáležite.

Skutočné smerovanie podľa aplikácií existuje tam, kde preň platforma pridala mechanizmus, napríklad volania filtrov v Windows alebo naviazanie služby VPN v Androide. Desktopová inštancia OpenVPN nič z toho neprináša a žiadny konfiguračný prepínač to nevymyslí.

Linux: označte proces a potom smerujte značku

Najčistejší prístup spája rozhodnutie s procesom, ktorý vlastní socket. Zhoda owner funguje pre lokálne generovanú premávku v reťazci OUTPUT, takže značka tu aplikovaná môže vybrať samostatnú tabuľku:

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

Pakety od používateľa 1001 potom konzultujú tabuľku 200 a odchádzajú cez bežnú bránu, zatiaľ čo hlavná tabuľka stále posiela všetko ostatné do tunela. Zhoda owner platí len pre lokálne generované pakety, čo je presne tá premávka, na ktorej tu záleží, a nedokáže klasifikovať pakety preposielané inému hostiteľovi. Overujte nástrojmi, nie úmyslom: ss -tnp ukazuje lokálnu adresu a vlastniaci proces nadviazaných spojení a ip route get 1.1.1.1 mark 0x1 ukazuje, ktorú tabuľku značka vyberá.

Sieťový namespace je pevnejšia odpoveď pre samostatný program, pretože každý socket v ňom vytvorený je k nemu viazaný konštrukciou, takže pomocné procesy a dcérske spojenia dedia správanie bez akéhokoľvek klasifikovania. Cena je inštalatérstvo: dvojica veth, adresa na každom konci a predvolená trasa vnútri namespace, ktorá smeruje späť na hostiteľa.

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: cieľ stále rozhoduje

Windows vyberá odchádzajúce rozhranie podľa cieľa, takže program, ktorý chce inú cestu, musí zmeniť niečo, čo zásobník konzultuje pred touto voľbou. ForceBindIP pokrýva prvú polovicu: spúšťa program s socketmi už naviazanými na vami zadanú lokálnu adresu. Samo o sebe to nemení rozhranie, ktorým paket odchádza, pretože trasu stále vyberá cieľ. Naviazte zdroj na notebooku, ktorého predvolená trasa smeruje do tunela, a paket do tunela vstúpi aj tak.

Príznak má čitateľný tvar, keď ho raz poznáte. Platí pre adresu LAN, na ktorú sa vybrané rozhranie dostane priamo, a zlyháva pri všetkom na internete, ktorého trasa smeruje do tunela. Tiež to vyzerá, že funguje, kým program neodovzdá prácu pomocníkovi, pretože pomocníkovi, ktorý si otvorí vlastný socket, sa o naviazaní nikdy nepovedalo.

Presuňte rozhodnutie, keď je jeden proces nesprávna jednotka

Ak je skutočnou požiadavkou zariadenie a nie program, umiestnite ho na vlastné SSID alebo VLAN a nechajte router rozhodnúť: ten zdroj ide normálnou cestou, zatiaľ čo iné zdroje používajú tunel. Vyhradený stroj brány je druhý poctivý návrh: drží VPN a prijíma len ciele, ktoré mu router posiela. Na VLAN zásada pokrýva každý tok, ktorý zariadenie otvorí, vrátane pomocných procesov, ktoré rozbili prístup Windows. Výmenou je rozsah: dva programy na tom zariadení už nemožno ošetriť rôzne.

Obe sú zásady zdroja alebo cieľa s rozsahom, ktorý sa dá vysloviť jednou vetou. Ani jedna nie je podľa aplikácie, a návrh, ktorý sa predáva ako riešenie podľa aplikácie, zlyhá prvýkrát, keď program deleguje svoju prácu na druhý proces.

Súvisiace články