Pridali ste trasu podľa politiky, ktorá posiela prevádzku klienta VPN na hostiteľa, kde na porte 1080 beží SOCKS poslucháč. Pakety prichádzajú, poslucháč nič nezaznamenáva a spojenie visí. S trasou nie je nič zlé: ďalší skok vyberá, kam paket ide, a SOCKS je konverzácia, ktorú musí začať klient. Porovnajte tri architektúry, ktoré ľudia zvyčajne majú na mysli, keď posielajú prevádzku cez proxy, a bude jasné, ktorá časť vo vašom nastavení chýba.

Smerovanie, DNAT a SOCKS menia rôzne veci

Trasa podľa politiky prepisuje rozhodnutie na vrstve 3. Dva riadky stačia na to, aby sa prevádzka jedného klienta poslala na zvolený ďalší skok:

ip route add default via 10.50.0.2 table 101
ip rule add from 10.77.0.2 lookup 101

Potom jadro odovzdá paket na 10.50.0.2 a pôvodný cieľ zostáva v IP hlavičke. Ak je 10.50.0.2 smerovač, paket prepošle. Ak je to hostiteľ so SOCKS démonom na 1080, paket nie je adresovaný ničomu, čo by ho mohlo prijať, a ani DNAT na port 1080 nepomôže, pretože preložený paket stále nesie pôvodnú aplikačnú záťaž namiesto SOCKS pozdravu.

SOCKS5 začína bajtom verzie, zoznamom metód, výmenou autentifikácie a žiadosťou, ktorá pomenúva cieľ. To sú aplikačné dáta. Žiadny záznam smerovania ani cieľ netfilter ich negeneruje, a to je porovnanie v jednom riadku: smerovanie vyberá cestu, SOCKS žiada server, aby vytvoril druhé spojenie.

Prvý prípad: aplikácia vie hovoriť SOCKS sama

Keď má program nastavenie proxy, je to najkratšia cesta a nevyžaduje zmenu jadra. Nasmerujte ho na poslucháča, poskytnite prihlasovacie údaje, ak ich server žiada, a rozhodnite, či sa názvy prekladajú lokálne alebo sa odovzdávajú proxy. Pri curl sú to rôzne prepínače a rozdiel je dôležitý, keď sa cieľ prekladá len na strane proxy:

curl --socks5 10.50.0.2:1080 https://docs.example.com
curl --socks5-hostname 10.50.0.2:1080 https://internal.example.com

Aplikáciám, ktoré ignorujú premenné prostredia proxy alebo otvárajú surové sockety, sa takto pomôcť nedá. Prehliadače a väčšina HTTP nástrojov sú v poriadku; herný klient, poštový démon alebo ľubovoľný binárny súbor dodávateľa zvyčajne nie. Hranica je pre každú aplikáciu a každý protokol, preto je táto možnosť vynikajúca na testovanie a slabá ako odpoveď pre celé VPN.

Druhý prípad: adaptér, ktorý premieňa IP toky na proxy relácie

Pre programy, ktoré nevedia hovoriť SOCKS, sa konverzia musí udiať v niečom, čo ukončuje IP prevádzku a otvára proxy relácie v ich mene. Tento komponent vlastní tunelové rozhranie, prijíma toky, ktoré vybralo smerovanie podľa politík, vykonáva SOCKS handshake pre každý z nich a znovu zostavuje odpovede. Trasa naň prevádzku nasmeruje; adaptér je to, čo reláciu vytvára.

Prečítajte si jeho dokumentáciu, skôr než mu zveríte celú podsiev. Mnohé adaptéry dobre prenášajú TCP a UDP spracúvajú len cez SOCKS5 UDP asociáciu a žiadny z nich nemení ICMP na proxy prevádzku, takže úspešný ping o ceste cez proxy nič nehovorí. DNS je druhá pasca: ak adaptér prekladá názvy lokálne, záznamy len pre interné použitie sa preložia na nesprávnu odpoveď, alebo vôbec na nič.

Prevencia slučiek je prevádzkový detail, ktorý hryzie. Vlastné spojenia adaptéra na server SOCKS sa nesmú smerovať späť do adaptéra, takže jeho prevádzka potrebuje výnimku v pravidle alebo vyhradenú zdrojovú adresu. Urobte to zle a proxy relácia sa bude snažiť proxovať sama seba.

Tretí prípad: hostiteľ je v skutočnosti smerovaná brána

Niekedy funkčná konfigurácia neobsahuje žiadne SOCKS. Vzdialený hostiteľ pakety preposiela alebo na ne aplikuje NAT a pravidlo založené na zdroji ho jednoducho vyberie ako výstup. Taký návrh je legitímny a vysvetľuje, prečo kopírovaná konfigurácia funguje v jednej sieti a v inej zlyháva: pravidlo je identické, chýbajúcou časťou je služba preposielania na druhej strane.

Tri prípady sa rýchlo oddelia. Skontrolujte, čo skutočne počúva, a potom sa pozrite na prvé bajty, ktoré sa dostanú k hostiteľovi:

ss -ltnp 'sport = :1080'
tcpdump -ni eth0 -X 'tcp port 1080'

Prvý bajt užitočného zaťaženia skutočného klienta SOCKS je 0x05, verzia v pozdrave. Ak záznam ukazuje namiesto toho pôvodné aplikačné dáta, žiadny SOCKS démon neodpovie, pretože vyjednávanie sa nikdy nezačalo. Ak na 1080 nič nepočúva, hostiteľ je brána a otázkou sa stáva, či preposiela a či existuje spiatočná cesta.

Vyberte vrstvu pomocou štyroch otázok

Má program nastavenie proxy? Použite ho a tam skončite. Obsahuje prevádzka UDP alebo ICMP, ktoré musia prežiť? ICMP prenáša iba smerovaná brána alebo brána s NAT a UDP potrebuje asociáciu SOCKS5, ktorú podporujú obe strany. Musí byť pokrytý každý proces na stroji, vrátane tých, ktoré nemôžete nastaviť? Potom potrebujete adaptér, ktorý vlastní rozhranie a ukončuje toky. Môžete prevziať aj jeho smerovanie, DNS a výnimky na prevenciu slučiek? Ak nie, obyčajná brána bude stáť na prevádzku menej.

Jedno rozlíšenie sa oplatí udržať jasné. Vlastná voľba socks-proxy klienta VPN opisuje, ako sa vonkajšie tunelové spojenie dostane na svoj server, a nič nehovorí o konverzii vnútorných klientskych tokov. Obe sa v tom istom tikete neustále zamieňajú. Rozhodnite sa, aký vzťah potrebujete, skôr než sa dotknete trasy.

Súvisiace články