Viena programa turėtų naudoti įprastą ryšį, o visa kita lieka tune, ir klientas tam neturi jungiklio. Paslėpto meniu taip pat nėra ko ieškoti. Maršrutas parenkamas iš laukų paketo viduje, o paketas neša adresus ir prievadus, o ne jį sukūrusio proceso tapatybę, todėl išskyrimas turi būti išreikštas viename iš tų laukų. Sekite paketą vieną kartą ir galimi variantai nustoja būti paslaptingi.

Kodėl klientas negali to pasiūlyti

Maršrutizavimas pagal paskirties vietą lygina paskirties adresą su priešdėliais ir palieka ilgiausią atitikimą. Tą akimirką kiekvienas paketas atrodo vienodai, kad ir kas jį sukūrė. Šaltinio politikos maršrutizavimas išplečia palyginimą iki šaltinio adreso, ir tai yra kabliukas, kurį naudoja kiekvienas praktiškas sprendimas: pakeiskite šaltinį, ir kita lentelė tampa tinkama.

Prievadai nepadeda. Išskyrimas pagal prievadą turėtų būti vertinamas prieš paskirties paiešką, o prievadas tame sprendime nevaidina jokio vaidmens. Viskas, kas reklamuojama kaip išskyrimas pagal prievadą, iš tiesų išskiria pagal kitą lauką ir apibūdina tai aplaidžiai.

Tikras maršrutizavimas pagal programą egzistuoja ten, kur platforma tam pridėjo mechanizmą, pavyzdžiui, filtrų iškvietimus Windows ar VPN paslaugos susiejimą Android. Darbalaukio OpenVPN egzempliorius nieko iš to neturi, ir joks konfigūracijos požymis to neišgalvoja.

Linux: pažymėkite procesą, tada maršrutizuokite žymę

Švariausias būdas susieja sprendimą su procesu, kuriam priklauso lizdas. owner atitikimas veikia vietoje sugeneruotam srautui OUTPUT grandinėje, todėl ten uždėta žymė gali pasirinkti atskirą lentelę:

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 naudotojo paketai tada kreipiasi į 200 lentelę ir išeina per įprastą tinklų sietuvą, o pagrindinė lentelė vis dar siunčia visa kita į tunelį. owner atitikimas taikomas tik vietoje sugeneruotiems paketams, o tai yra būtent tas srautas, kuris čia svarbus, ir jis negali klasifikuoti paketų, persiunčiamų kitam mazgui. Tikrinkite įrankiais, o ne ketinimu: ss -tnp rodo nustatytų ryšių vietinį adresą ir jį turintį procesą, o ip route get 1.1.1.1 mark 0x1 rodo, kurią lentelę pasirenka žymė.

Tinklo vardų sritis yra tvirtesnis atsakymas savarankiškai programai, nes kiekvienas joje sukurtas lizdas konstrukciškai yra prie jos pririštas, todėl pagalbiniai procesai ir antriniai ryšiai paveldi elgseną visiškai neklasifikuojami. Kaina yra santechnika: veth pora, adresas kiekviename gale ir numatytasis maršrutas vardų srities viduje, kuris rodo atgal į mazgą.

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: paskirties vieta vis dar nusprendžia

Windows parenka išeinančią sąsają pagal paskirties vietą, todėl programa, norinti kito kelio, turi pakeisti tai, ko krūva klausia prieš tą pasirinkimą. ForceBindIP uždengia pirmąją pusę: jis paleidžia programą, kurios lizdai jau pririšti prie jūsų nurodyto vietinio adreso. Vien tai nepakeičia, per kurią sąsają paketas išeina, nes maršrutą vis dar parenka paskirties vieta. Pririškite šaltinį nešiojamajame kompiuteryje, kurio numatytasis maršrutas veda į tunelį, ir paketas vis tiek pateks į tunelį.

Simptomas turi perskaitomą formą, kai jį pažįsti. Jis galioja LAN adresui, kurį pasirinkta sąsaja pasiekia tiesiogiai, ir nepavyksta viskam internete, kurio maršrutas rodo į tunelį. Jis taip pat atrodo veikiantis tol, kol programa perduoda darbą pagalbininkui, nes pagalbininkui, kuris atsidaro savo lizdą, apie priskyrimą niekada nebuvo pasakyta.

Perkelkite sprendimą, kai vienas procesas yra netinkamas vienetas

Jei tikrasis reikalavimas yra įrenginys, o ne programa, įdėkite jį į savo SSID arba VLAN ir leiskite maršrutizatoriui nuspręsti: tas šaltinis eina įprastu keliu, o kiti šaltiniai naudoja tunelį. Skirtasis tinklų sietuvo kompiuteris yra kitas sąžiningas sprendimas: jis laiko VPN ir priima tik tuos tikslus, kuriuos jam siunčia maršrutizatorius. VLAN tinkle politika apima kiekvieną įrenginio atidaromą srautą, įskaitant pagalbinius procesus, kurie sugriovė Windows metodą. Mainai yra apimtis: dviejų programų tame įrenginyje nebegalima traktuoti skirtingai.

Abi yra šaltinio arba paskirties politikos su apimtimi, kurią galima pasakyti vienu sakiniu. Nė viena nėra pagal programą, o dizainas, kuris save parduoda kaip pagal programą, žlunga pirmą kartą, kai programa perduoda savo darbą antram procesui.

Susiję straipsniai