Selle rakenduse välistamiseks lülitit pole: anna protsessile oma allikas
Marsruutimine sobitab aadresse, mitte protsesside nimesid. Anna välistatud programmile oma allikas ja tabel või vii otsus ruuterisse, kus see on aus.
Üks programm peaks kasutama tavalist ühendust, samal ajal kui kõik muu jääb tunnelisse, ja kliendil pole selleks lülitit. Ka peidetud menüüd pole kuskilt leida. Marsruut valitakse paketi sees olevate väljade põhjal ja pakett kannab aadresse ja porte, mitte selle loonud protsessi identiteeti, seega tuleb välistus väljendada ühes neist väljadest. Jälgi paketti korra ja saadaolevad valikud lakkavad olemast mõistatuslikud.
Miks klient seda pakkuda ei saa
Sihtkoha marsruutimine võrdleb sihtaadressi prefiksitega ja hoiab pikima vaste. Sel hetkel näeb iga pakett ühesugune välja, ükskõik mis selle tekitas. Allika poliitika marsruutimine laiendab võrdlust allikaaadressile ja see on see konks, mida iga praktiline lahendus kasutab: muuda allikat ja teine tabel muutub kõlblikuks.
Pordid ei aita. Pordi järgi välistamist tuleks hinnata enne sihtkoha otsingut ja port ei mängi selles otsuses mingit rolli. Kõik, mida reklaamitakse pordipõhise välistamisena, välistab tegelikult mõne muu välja järgi ja kirjeldab seda lohakalt.
Tõeline rakendusepõhine marsruutimine on olemas seal, kus platvorm on selleks mehhanismi lisanud, näiteks filtrite väljakutsed Windowsis või VPN-teenuse sidumine Androidis. Töölaua OpenVPN-i eksemplar ei too sellest midagi kaasa ja ükski konfiguratsioonilipuke ei mõtle seda välja.
Linux: märgi protsess ja seejärel marsruudi märki
Kõige puhtam lähenemine seob otsuse soklit omava protsessiga. owner vaste töötab kohalikult genereeritud liikluse jaoks OUTPUT-ahelas, seega seal rakendatud märk võib valida eraldi tabeli:
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
Kasutaja 1001 paketid konsulteerivad seejärel tabelit 200 ja väljuvad tavalise lüüsi kaudu, samal ajal kui peamine tabel saadab kõik muu endiselt tunnelisse. owner vaste kehtib ainult kohalikult genereeritud pakettidele, mis on täpselt see liiklus, mis siin oluline on, ja see ei saa klassifitseerida teisele hostile edastatavaid pakette. Kontrolli tööriistade, mitte kavatsusega: ss -tnp näitab loodud ühenduste kohalikku aadressi ja omavat protsessi ning ip route get 1.1.1.1 mark 0x1 näitab, millise tabeli märk valib.
Võrgu nimeruum on iseseisva programmi jaoks tugevam vastus, sest iga seal loodud sokkel on konstruktsiooni järgi sellega seotud, nii et abiprotsessid ja alamühendused pärivad käitumise ilma üldse klassifitseerimata. Hind on torutööd: veth-paar, aadress mõlemas otsas ja nimeruumi sees vaike-marsruut, mis osutab tagasi hostile.
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: sihtkoht otsustab endiselt
Windows valib väljuva liidese sihtkoha järgi, seega programm, mis tahab teist teed, peab muutma midagi, mida virn konsulteerib enne seda valikut. ForceBindIP katab esimese poole: see käivitab programmi, mille soklid on juba teie nimetatud kohaliku aadressiga seotud. Ainult see ei muuda, millise liidese kaudu pakett väljub, sest marsruudi valib endiselt sihtkoht. Seo allikas sülearvutis, mille vaikemarsruut osutab tunnelisse, ja pakett läheb ikkagi tunnelisse.
Sümptomil on loetav kuju, kui sellega tutvuda. See kehtib LAN-aadressi puhul, mida valitud liides otseselt tabab, ja ebaõnnestub kõige puhul internetis, mille marsruut osutab tunnelile. See näib ka toimivat seni, kuni programm annab töö abilisele, sest abilisele, kes avab oma sokli, ei öeldud sidumisest kunagi.
Vii otsus mujale, kui üks protsess on vale ühik
Kui tegelik nõue on seade, mitte programm, pane see omaette SSID-le või VLAN-i ja lase ruuteril otsustada: see allikas läheb tavalist teed, samal ajal kui teised allikad kasutavad tunnelit. Eraldi lüüsmasin on teine aus lahendus: see hoiab VPN-i ja võtab vastu ainult sihtkohad, mille ruuter sellele saadab. VLAN-is katab poliitika iga voolu, mille seade avab, sealhulgas abiprotsessid, mis Windowsi lähenemise rikkusid. Kauplemine on ulatus: selle seadme kahte programmi ei saa enam erinevalt kohelda.
Mõlemad on allika või sihtkoha poliitikad ulatusega, mille saab öelda ühe lausega. Kumbki ei ole rakendusepõhine ja disain, mis reklaamib end rakendusepõhisena, ebaõnnestub esimesel korral, kui programm delegeerib oma töö teisele protsessile.