Žádný přepínač „vyloučit tuto aplikaci“: dejte procesu vlastní zdroj
Směrování porovnává adresy, ne názvy procesů. Dejte vyloučenému programu vlastní zdroj a tabulku, nebo přesuňte rozhodnutí na router, kde je to poctivé.
Jeden program má používat běžné připojení, zatímco všechno ostatní zůstává v tunelu, a klient na to nemá přepínač. Najít se nedá ani žádná skrytá nabídka. Trasa se vybírá z polí uvnitř paketu a paket nese adresy a porty, nikoli identitu procesu, který ho vytvořil, takže vyloučení musí být vyjádřeno v některém z těchto polí. Projděte paket jednou a dostupné možnosti přestanou být záhadné.
Proč to klient nemůže nabídnout
Směrování podle cíle porovnává cílovou adresu s prefixy a zachovává nejdelší shodu. V té chvíli vypadá každý paket stejně, ať ho vytvořilo cokoli. Směrování podle zásad zdroje rozšiřuje porovnání na zdrojovou adresu, a to je hák, který používá každé praktické řešení: změňte zdroj a jiná tabulka se stane použitelnou.
Porty nepomáhají. Vyloučení podle portu by se muselo vyhodnocovat před vyhledáním cíle a port v tomto rozhodnutí nehraje žádnou roli. Vše, co se nabízí jako vyloučení na základě portu, ve skutečnosti vylučuje podle jiného pole a popisuje to ledabyle.
Skutečné směrování podle aplikací existuje tam, kde pro něj platforma přidala mechanismy, třeba volání filtrů ve Windows nebo navázání služby VPN v Androidu. Desktopová instance OpenVPN nic z toho nemá a žádný konfigurační přepínač to nevymyslí.
Linux: označte proces a pak směrujte značku
Nejčistší přístup svazuje rozhodnutí s procesem, který vlastní socket. Shoda owner funguje pro lokálně generovaný provoz v řetězci OUTPUT, takže značka zde aplikovaná může vybrat samostatnou tabulku:
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 uživatele 1001 pak konzultují tabulku 200 a odcházejí běžnou bránou, zatímco hlavní tabulka stále posílá všechno ostatní do tunelu. Shoda owner platí jen pro lokálně generované pakety, což je přesně ten provoz, na kterém vám zde záleží, a nedokáže klasifikovat pakety předávané jinému hostiteli. Ověřujte nástroji, ne úmyslem: ss -tnp ukazuje lokální adresu a vlastnící proces navázaných spojení a ip route get 1.1.1.1 mark 0x1 ukazuje, kterou tabulku značka vybírá.
Síťový namespace je pevnější odpověď pro samostatný program, protože každý socket v něm vytvořený je k němu svázán konstrukčně, takže pomocné procesy a podřízená spojení dědí chování, aniž by se vůbec klasifikovala. Cena je instalatérství: dvojice veth, adresa na každém konci a výchozí trasa uvnitř namespace, která míří zpět na hostitele.
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: cíl stále rozhoduje
Windows vybírá odchozí rozhraní podle cíle, takže program, který chce jinou cestu, musí změnit něco, co zásobník konzultuje před touto volbou. ForceBindIP pokrývá první polovinu: spouští program se sockety už navázanými na vámi zadanou lokální adresu. Samo o sobě to nezmění rozhraní, kterým paket odchází, protože trasu stále vybírá cíl. Navažte zdroj na notebooku, jehož výchozí trasa míří do tunelu, a paket do tunelu vstoupí i tak.
Příznak má čitelný tvar, jakmile ho znáte. Platí pro adresu LAN, na kterou se vybrané rozhraní dostane přímo, a selhává u čehokoli na internetu, jehož trasa míří do tunelu. Také to vypadá, že to funguje, dokud program nepředá práci pomocnému procesu, protože pomocnému procesu, který si otevře vlastní socket, se o navázání nikdy neřeklo.
Přesuňte rozhodnutí, když je jeden proces špatná jednotka
Pokud je skutečným požadavkem zařízení, a ne program, umístěte ho na vlastní SSID nebo VLAN a nechte rozhodnout router: tento zdroj jde normální cestou, zatímco ostatní zdroje používají tunel. Vyhrazený stroj brány je druhý poctivý návrh: drží VPN a přijímá jen cíle, které mu router posílá. Na VLAN zásada pokrývá každý tok, který zařízení otevře, včetně pomocných procesů, které rozbily přístup ve Windows. Výměnou je rozsah: dva programy na tom zařízení už nelze ošetřit různě.
Obě jsou zásady zdroje nebo cíle s rozsahem, který lze vyslovit jednou větou. Ani jedna není podle aplikace, a návrh, který se vydává za řešení podle aplikace, selže poprvé, když program deleguje svou práci na druhý proces.