Մի ծրագիր պետք է օգտագործի սովորական կապը, մինչ մնացած ամեն ինչ մնում է թունելում, և հաճախորդը դրա համար անջատիչ չունի։ Թաքնված ընտրացանկ էլ չկա գտնելու։ Երթուղին ընտրվում է փաթեթի ներսի դաշտերից, և փաթեթը կրում է հասցեներ ու պորտեր, ոչ թե այն ստեղծած գործընթացի ինքնությունը, ուստի բացառումը պետք է արտահայտվի այդ դաշտերից մեկում։ Մեկ անգամ հետևեք փաթեթին, և հասանելի տարբերակները դադարում են խորհրդավոր լինելուց։

Ինչու հաճախորդը չի կարող դա առաջարկել

Նպատակակետով երթուղայնությունը համեմատում է նպատակակետի հասցեն նախածանցերի հետ և պահում է ամենաերկար համընկնումը։ Այդ պահին յուրաքանչյուր փաթեթ նույնն է թվում, անկախ նրանից, թե ինչ է ստեղծել այն։ Աղբյուրի քաղաքականության երթուղայնությունը լայնացնում է համեմատությունը աղբյուրի հասցեի վրա, և դա այն կեռիկն է, որ օգտագործում է յուրաքանչյուր գործնական լուծում. փոխեք աղբյուրը, և մեկ այլ աղյուսակ դառնում է ընտրելի։

Պորտերը չեն օգնում։ Պորտով բացառումը պետք է գնահատվեր նպատակակետի որոնումից առաջ, և պորտն այդ որոշման մեջ ոչ մի դեր չունի։ Այն ամենը, ինչ գովազդվում է որպես պորտային բացառում, իրականում բացառում է մեկ այլ դաշտով և նկարագրում է դա անփույթ կերպով։

Իսկական հավելվածով պայմանավորված երթուղայնություն գոյություն ունի այնտեղ, որտեղ հարթակը դրա համար մեխանիզմ է ավելացրել, օրինակ՝ զտիչների կանչեր 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-ի մոտեցումը։ Փոխանակումը ծավալն է. այդ սարքի երկու ծրագիր այլևս չեն կարող տարբեր կերպ վերաբերվել։

Երկուսն էլ աղբյուրի կամ նպատակակետի քաղաքականություն են ծավալով, որը կարելի է ասել մեկ նախադասությամբ։ Ոչ մեկը հավելվածով պայմանավորված չէ, և այն ձևավորումը, որն իրեն գովազդում է որպես հավելվածով պայմանավորված, ձախողվում է առաջին անգամ, երբ ծրագիրն իր աշխատանքը հանձնում է երկրորդ գործընթացին։

Առնչվող հոդվածներ