Бір бағдарлама кәдімгі қосылымды пайдалануы керек, ал қалғанының бәрі туннельде қалады, және клиентте бұған қосқыш жоқ. Жасырын мәзір де табылмайды. Маршрут пакеттің ішіндегі өрістерден таңдалады, ал пакет мекенжайлар мен порттарды тасымалдайды, оны жасаған процестің жеке басын емес, сондықтан шығару осы өрістердің бірінде көрсетілуі керек. Пакетті бір рет бақылаңыз, сонда қолжетімді нұсқалар жұмбақ болудан қояды.

Неліктен клиент мұны ұсына алмайды

Мақсатты маршруттау мақсат мекенжайын префикстермен салыстырады және ең ұзын сәйкестікті сақтайды. Сол сәтте әр пакет бірдей көрінеді, оны не жасаса да. Көз саясатының маршруттауы салыстыруды көз мекенжайына дейін кеңейтеді, және бұл кез келген практикалық шешім қолданатын ілгек: көзді өзгертіңіз, сонда басқа кесте қолайлы болады.

Порттар көмектеспейді. Порт бойынша шығаруды мақсатты іздеуден бұрын бағалау керек еді, ал порттың бұл шешімде ешқандай рөлі жоқ. Портқа негізделген шығару ретінде жарнамаланатынның бәрі шын мәнінде басқа өріс бойынша шығарады және мұны былтырғыша сипаттайды.

Шынайы қолданба бойынша маршруттау платформа ол үшін механизм қосқан жерде бар, мысалы Windows-тағы сүзгі шақырулары немесе Android-тағы VPN қызметін байланыстыру. Жұмыс үстеліндегі 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 тәсілін бұзған көмекші процестерді де. Айырбас — ауқым: сол құрылғыдағы екі бағдарламаны енді әртүрлі өңдеуге болмайды.

Екеуі де бір сөйлеммен айтуға болатын ауқымы бар көз немесе мақсат саясаттары. Ешқайсысы қолданба бойынша емес, және өзін қолданба бойынша деп жарнамалайтын дизайн бағдарлама өз жұмысын екінші процеске тапсырған алғашқы кезде сәтсіз болады.

Қатысты мақалалар