Vienai programmai vajadzētu izmantot parasto savienojumu, kamēr viss pārējais paliek tunelī, un klientam tam nav slēdža. Nav arī nevienas paslēptas izvēlnes, ko atrast. Maršruts tiek izvēlēts no laukiem paketes iekšienē, un pakete nes adreses un portus, nevis to izveidojušā procesa identitāti, tāpēc izslēgšana ir jāizsaka vienā no šiem laukiem. Izsekojiet paketei vienu reizi, un pieejamās iespējas pārstāj būt noslēpumainas.

Kāpēc klients to nevar piedāvāt

Maršrutēšana pēc galamērķa salīdzina galamērķa adresi ar prefiksiem un saglabā garāko atbilstību. Tajā brīdī katra pakete izskatās vienādi, lai kas to radītu. Avota politikas maršrutēšana paplašina salīdzinājumu uz avota adresi, un tas ir āķis, ko izmanto ikviens praktisks risinājums: mainiet avotu, un cita tabula kļūst piemērota.

Porti nepalīdz. Izslēgšana pēc porta būtu jānovērtē pirms galamērķa meklēšanas, un portam šajā lēmumā nav nekādas lomas. Viss, kas tiek reklamēts kā izslēgšana pēc porta, patiesībā izslēdz pēc cita lauka un apraksta to nevīžīgi.

Īsta maršrutēšana pēc lietotnes pastāv tur, kur platforma tam ir pievienojusi mehānismu, piemēram, filtru izsaukumi Windows vai VPN pakalpojuma piesaiste Android. Darbvirsmas OpenVPN eksemplārs neko no tā nepiegādā, un neviens konfigurācijas karodziņš to neizgudro.

Linux: atzīmējiet procesu, pēc tam maršrutējiet atzīmi

Tīrākā pieeja saista lēmumu ar procesu, kuram pieder ligzda. owner atbilstība darbojas vietēji ģenerētai plūsmai OUTPUT ķēdē, tāpēc tur uzlikta atzīme var izvēlēties atsevišķu tabulu:

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

Lietotāja 1001 paketes pēc tam konsultē 200 tabulu un iziet pa parasto vārteju, kamēr galvenā tabula joprojām sūta visu pārējo tunelī. owner atbilstība attiecas tikai uz vietēji ģenerētām paketēm, un tā ir tieši tā plūsma, kas šeit ir svarīga, un tā nevar klasificēt paketes, kas pārsūtītas citam resursdatoram. Pārbaudiet ar rīkiem, nevis ar nodomu: ss -tnp parāda izveidoto savienojumu vietējo adresi un īpašniekprocesu, un ip route get 1.1.1.1 mark 0x1 parāda, kuru tabulu atzīme izvēlas.

Tīkla nosaukumtelpa ir stingrāka atbilde patstāvīgai programmai, jo katra tajā izveidotā ligzda pēc uzbūves ir tai piesaistīta, tāpēc palīgprocesi un atvasinātie savienojumi pārmanto uzvedību, vispār netiekot klasificēti. Cena ir santehnika: veth pāris, adrese katrā galā, un noklusējuma maršruts nosaukumtelpas iekšienē, kas norāda atpakaļ uz resursdatoru.

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: galamērķis joprojām izlemj

Windows izvēlas izejošo saskarni pēc galamērķa, tāpēc programmai, kas vēlas citu ceļu, ir jāmaina kaut kas tāds, ko steks konsultē pirms šīs izvēles. ForceBindIP nosedz pirmo pusi: tas palaiž programmu ar ligzdām, kas jau piesaistītas jūsu nosauktajai vietējai adresei. Tas vien nemaina to, pa kuru saskarni pakete iziet, jo maršrutu joprojām izvēlas galamērķis. Piesaistiet avotu klēpjdatorā, kura noklusējuma maršruts norāda tunelī, un pakete tomēr nonāks tunelī.

Simptomam ir nolasāma forma, kad to pazīst. Tas attiecas uz LAN adresi, kuru izvēlētā saskarne sasniedz tieši, un neizdodas visam internetā, kura maršruts norāda uz tuneli. Tas arī izskatās kā strādājošs, līdz programma nodod darbu palīgam, jo palīgam, kas atver savu ligzdu, par piesaisti nekad netika teikts.

Pārvietojiet lēmumu, ja viens process ir nepareizā vienība

Ja īstā prasība ir ierīce, nevis programma, ievietojiet to savā SSID vai VLAN un ļaujiet maršrutētājam izlemt: šis avots iet parasto ceļu, kamēr citi avoti izmanto tuneli. Īpaša vārtejas mašīna ir otrs godīgais dizains: tā tur VPN un saņem tikai tos galamērķus, ko tai sūta maršrutētājs. VLAN gadījumā politika aptver katru plūsmu, ko ierīce atver, tostarp palīgprocesus, kas salauza Windows pieeju. Tirgošanās ir tvērums: divas programmas šajā ierīcē vairs nevar apstrādāt atšķirīgi.

Abas ir avota vai galamērķa politikas ar tvērumu, ko var pateikt vienā teikumā. Neviena nav pēc lietotnes, un dizains, kas sevi tirgo kā pēc lietotnes, sabrūk pirmajā reizē, kad programma nodod savu darbu otram procesam.

Saistītie raksti