Една програма треба да го користи обичниот приклучок, додека сето друго останува во тунелот, а клиентот нема прекинувач за тоа. Нема ни скриено мени што би се нашло. Рутата се избира од полињата внатре во пакетот, а пакетот носи адреси и порти, а не идентитетот на процесот што го создал, затоа исклучувањето мора да се изрази во едно од тие полиња. Следете пакет еднаш и достапните опции престануваат да бидат мистериозни.

Зошто клиентот не може да го понуди

Рутирањето според одредиштето ја споредува адресата на одредиштето со префиксите и го задржува најдолгото совпаѓање. Во тој момент секој пакет изгледа исто, што и да го создало. Рутирањето според политиката на изворот ја проширува споредбата на адресата на изворот, и тоа е куката што ја користи секое практично решение: сменете го изворот, и друга табела станува соодветна.

Порти не помагаат. Исклучување според порта би морало да се оцени пред барањето на одредиштето, а портата нема никаква улога во таа одлука. Сето она што се рекламира како исклучување засновано на порта всушност исклучува според друго поле и го опишува тоа небрежно.

Вистинско рутирање по апликација постои онаму каде што платформата додала механизам за тоа, како филтерски повици во Windows или поврзување на VPN услугата во Android. Десктоп примерокот на OpenVPN не носи ништо од тоа, и ниту едно конфигурациско знаменце не го измислува.

Linux: означете го процесот, потоа рутирајте ја ознаката

Најчистиот пристап ја врзува одлуката за процесот што го поседува сокетот. Совпаѓањето owner работи за локално генериран сообраќај во синџирот OUTPUT, па ознака применета таму може да избере посебна табела:

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

Пакетите од корисникот 1001 потоа ја консултираат табелата 200 и излегуваат преку обичната порта, додека главната табела уште испраќа сето друго во тунелот. Совпаѓањето owner важи само за локално генерирани пакети, што е токму сообраќајот што е важен овде, и не може да класифицира пакети проследени за друг домаќин. Проверете со алатките, а не со намерата: ss -tnp ја покажува локалната адреса и процесот што ги поседува воспоставените врски, а ip route get 1.1.1.1 mark 0x1 покажува која табела ја избира ознаката.

Мрежен простор од имиња е поцврст одговор за самостојна програма, зашто секој сокет создаден внатре во него е врзан за него по конструкција, па помошните процеси и детските врски го наследуваат однесувањето без воопшто да бидат класифицирани. Цената е водоводна: пар veth, адреса на секој крај и стандардна рута внатре во просторот од имиња што покажува назад кон домаќинот.

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: одредиштето уште одлучува

Windows го избира излезниот интерфејс според одредиштето, па програмата што сака друг пат мора да промени нешто што стекот го консултира пред тој избор. ForceBindIP ја покрива првата половина: ја стартува програмата со сокети веќе врзани за локалната адреса што ќе ја наведете. Тоа само по себе не менува низ кој интерфејс пакетот излегува, зашто рутата уште ја избира одредиштето. Врзете извор на преносен сметач чија стандардна рута покажува во тунелот, и пакетот сепак влегува во тунелот.

Симптомот има читлива форма откако ќе го запознаете. Тој важи за LAN адреса до која избраниот интерфејс стигнува директно, а не успева за сето на интернет чија рута покажува кон тунелот. Исто така изгледа дека работи додека програмата не му предаде работа на помошник, зашто на помошник што отвора сопствен сокет никогаш не му било кажано за врзувањето.

Преместете ја одлуката кога еден процес е погрешна единица

Ако вистинското барање е уред, а не програма, ставете го на сопствен SSID или VLAN и оставете рутерот да одлучи: тој извор оди по нормалниот пат, додека другите извори го користат тунелот. Посветена портална машина е другиот чесен дизајн: ја држи VPN и ги прима само одредиштата што рутерот ѝ ги испраќа. На VLAN политиката го покрива секој тек што уредот го отвора, вклучувајќи ги помошните процеси што го скршија пристапот на Windows. Замената е обем: две програми на тој уред веќе не можат да се третираат поинаку.

Двете се политики на извор или одредиште со обем што може да се каже во една реченица. Ниту една не е по апликација, а дизајнот што се продава како по апликација пропаѓа првиот пат кога програмата ќе ја делегира својата работа на втор процес.

Поврзани статии