Nema prekidača za izuzimanje ove aplikacije: dajte procesu vlastiti izvor
Usmjeravanje upoređuje adrese, a ne nazive procesa. Dajte izuzetoj aplikaciji vlastiti izvor i tablicu ili premjestite odluku na ruter, gdje je to iskreno.
Jedan program treba da koristi običnu vezu dok sve ostalo ostaje na tunelu, a klijent nema prekidač za to. Nema ni skrivenog menija koji bi se našao. Ruta se bira iz polja unutar paketa, a paket nosi adrese i portove, a ne identitet procesa koji ga je stvorio, pa izuzetak mora biti izražen u jednom od tih polja. Pratite paket jednom i dostupne opcije prestaju biti tajanstvene.
Zašto klijent to ne može ponuditi
Usmjeravanje prema odredištu upoređuje odredišnu adresu s prefiksima i zadržava najduže poklapanje. U tom trenutku svaki paket izgleda isto, šta god ga proizvelo. Usmjeravanje po politici izvora proširuje poređenje na adresu izvora, i to je kuka koju koristi svako praktično rješenje: promijenite izvor i druga tablica postaje prihvatljiva.
Portovi ne pomažu. Izuzetak po portu morao bi se procijeniti prije traženja odredišta, a port ne igra nikakvu ulogu u toj odluci. Sve što se reklamira kao izuzetak zasnovan na portu zapravo izuzima po nekom drugom polju i to opisuje labavo.
Stvarno usmjeravanje po aplikacijama postoji tamo gdje je platforma dodala mehanizme za to, poput filter poziva na Windowsu ili povezivanja VPN usluge na Androidu. Desktop instanca OpenVPN-a ne nosi ništa od toga i nijedan konfiguracijski prekidač to ne izmišlja.
Linux: označite proces, zatim usmjerite oznaku
Najčišći pristup veže odluku za proces koji posjeduje socket. Poklapanje owner radi za lokalno generisan saobraćaj u lancu OUTPUT, pa oznaka primijenjena tamo može odabrati zasebnu tablicu:
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
Paketi od korisnika 1001 zatim konsultuju tablicu 200 i izlaze kroz obični gateway, dok glavna tablica i dalje šalje sve ostalo u tunel. Poklapanje owner vrijedi samo za lokalno generisane pakete, što je upravo saobraćaj koji vas ovdje zanima, i ne može klasificirati pakete proslijeđene drugom hostu. Provjerite alatima, a ne namjerom: ss -tnp pokazuje lokalnu adresu i proces koji posjeduje uspostavljene veze, a ip route get 1.1.1.1 mark 0x1 pokazuje koju tablicu oznaka odabire.
Mrežni namespace je čvršći odgovor za samostalan program, jer je svaki socket stvoren unutar njega po konstrukciji vezan za njega, pa pomoćni procesi i podređene veze nasljeđuju ponašanje bez ikakve klasifikacije. Cijena je vodovod: par veth, adresa na svakom kraju i zadana ruta unutar namespacea koja pokazuje natrag na host.
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: odredište i dalje odlučuje
Windows bira odlazni interfejs prema odredištu, pa program koji želi drugačiji put mora promijeniti nešto što stack konsultuje prije tog izbora. ForceBindIP pokriva prvu polovinu: pokreće program sa socketima već vezanim za lokalnu adresu koju navedete. Samo to ne mijenja interfejs kroz koji paket izlazi, jer odredište i dalje bira rutu. Vežite izvor na laptopu čija zadana ruta vodi u tunel i paket ipak ulazi u tunel.
Simptom ima čitljiv oblik kad ga jednom znate. Vrijedi za LAN adresu do koje odabrani interfejs stiže direktno, a pada za sve na internetu čija ruta pokazuje na tunel. Također izgleda da radi dok program ne preda posao pomoćnom procesu, jer pomoćnom procesu koji otvara vlastiti socket nikad nije rečeno za vezivanje.
Premjestite odluku kad je jedan proces pogrešna jedinica
Ako je stvarni zahtjev uređaj, a ne program, stavite ga na vlastiti SSID ili VLAN i pustite ruter da odluči: taj izvor ide normalnim putem dok ostali izvori koriste tunel. Namjenska gateway mašina je drugi iskren dizajn: drži VPN i prima samo odredišta koja joj ruter šalje. Na VLAN-u politika pokriva svaki tok koji uređaj otvori, uključujući pomoćne procese koji su slomili Windows pristup. Trgovina je obim: dva programa na tom uređaju više se ne mogu tretirati različito.
Obje su politike izvora ili odredišta s obimom koji možete izreći u jednoj rečenici. Nijedna nije po aplikaciji, a dizajn koji se predstavlja kao po aplikaciji pada prvi put kad program povjeri svoj posao drugom procesu.