Egy programnak a szokásos kapcsolatot kellene használnia, miközben minden más az alagúton marad, és a kliensnek nincs erre kapcsolója. Rejtett menü sincs, amit meg lehetne találni. Az útvonalat a csomagon belüli mezők közül választják, a csomag pedig címeket és portokat hordoz, nem a létrehozó folyamat azonosságát, ezért a kizárást valamelyik ilyen mezőben kell kifejezni. Kövess végig egy csomagot egyszer, és a rendelkezésre álló lehetőségek megszűnnek titokzatosnak lenni.

Miért nem tudja a kliens kínálni

A cél szerinti útválasztás a célcímet hasonlítja össze előtagokkal, és a leghosszabb egyezést tartja meg. Abban a pillanatban minden csomag egyformán néz ki, bármi is hozta létre. A forrás szerinti szabályútválasztás kiterjeszti az összehasonlítást a forráscímre, és ez az a horog, amelyet minden gyakorlati megoldás használ: változtasd meg a forrást, és egy másik tábla válik alkalmassá.

A portok nem segítenek. A port szerinti kizárást a célkeresés előtt kellene értékelni, és a portnak ebben a döntésben semmi szerepe nincs. Minden, amit portalapú kizárásként hirdetnek, valójában másik mező szerint zár ki, és lazán írja le azt.

Valódi alkalmazásonkénti útválasztás ott létezik, ahol a platform gépezetet adott hozzá, például szűrőhívások a Windowsban vagy a VPN-szolgáltatás kötése az Androidban. Az asztali OpenVPN-példány semmit nem hoz ebből, és egyetlen konfigurációs kapcsoló sem találja ki.

Linux: jelöld meg a folyamatot, aztán irányítsd a jelölést

A legtisztább megközelítés a döntést a socketet birtokló folyamathoz köti. Az owner-egyezés a helyben létrehozott forgalomra működik az OUTPUT láncban, ezért az ott alkalmazott jelölés külön táblát választhat:

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

Az 1001 felhasználótól érkező csomagok ezután a 200-as táblához fordulnak, és a szokásos átjárón távoznak, miközben a fő tábla továbbra is az alagútba küld minden mást. Az owner-egyezés csak a helyben létrehozott csomagokra vonatkozik, ami pontosan az itt fontos forgalom, és nem tud másik hoszt számára továbbított csomagokat osztályozni. Eszközökkel ellenőrizd, ne szándékkal: az ss -tnp megmutatja a létrejött kapcsolatok helyi címét és tulajdonos folyamatát, az ip route get 1.1.1.1 mark 0x1 pedig megmutatja, melyik táblát választja a jelölés.

A hálózati névtér szilárdabb válasz egy önálló program számára, mert minden benne létrehozott socket konstrukció szerint hozzá van kötve, így a segédfolyamatok és a gyermekkapcsolatok öröklik a viselkedést, anélkül hogy egyáltalán osztályoznák őket. Az ára vízvezeték-szerelés: egy veth pár, egy cím mindkét végén, és egy alapértelmezett útvonal a névtéren belül, amely visszafelé mutat a hosztra.

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: a cél dönt továbbra is

A Windows a cél alapján választja ki a kimenő interfészt, ezért a más utat akaró programnak meg kell változtatnia valamit, amit a verem e választás előtt megkérdez. A ForceBindIP az első felét fedi le: olyan programot indít, amelynek socketjei már a megadott helyi címhez vannak kötve. Ez önmagában nem változtatja meg, melyik interfészen hagyja el a csomag a gépet, mert az útvonalat továbbra is a cél választja. Köss forrást egy laptopon, amelynek alapértelmezett útvonala az alagútba mutat, és a csomag így is belép az alagútba.

A tünetnek olvasható formája van, ha egyszer ismered. Érvényes olyan LAN-címre, amelyet a választott interfész közvetlenül elér, és meghiúsul mindenre az interneten, amelynek útvonala az alagútra mutat. Úgy is tűnik, hogy működik, amíg a program át nem ad munkát egy segédnek, mert egy segédnek, amely saját socketet nyit, soha nem mondták el a kötést.

Vidd át a döntést, amikor egy folyamat a rossz egység

Ha a valódi igény egy eszköz és nem egy program, tedd a saját SSID-jére vagy VLAN-jára, és hagyd a routert dönteni: az a forrás a normál utat veszi, míg a többi forrás az alagutat használja. Egy dedikált átjárógép a másik őszinte tervezés: tartja a VPN-t, és csak azokat a célokat fogadja, amelyeket a router küld neki. VLAN-on a szabályzat az eszköz által nyitott minden folyamatra kiterjed, beleértve azokat a segédfolyamatokat, amelyek megtörték a Windows-megközelítést. A csere a hatókör: az eszköz két programját már nem lehet külön kezelni.

Mindkettő forrás- vagy célszabály, olyan hatókörrel, amelyet egy mondatban el lehet mondani. Egyik sem alkalmazásonkénti, és az a tervezés, amely magát alkalmazásonkéntiként árulja, először akkor bukik meg, amikor a program a munkáját egy második folyamatra bízza.

Kapcsolódó cikkek