Dodali ste rutu po politici koja šalje saobraćaj VPN klijenta na host na kojem na portu 1080 radi SOCKS slušalac. Paketi stižu, slušalac ništa ne bilježi, a veza visi. S rutom nije ništa pogrešno: sljedeći skok bira kuda paket ide, a SOCKS je razgovor koji klijent mora započeti. Uporedite tri arhitekture koje ljudi obično podrazumijevaju kada šalju saobraćaj kroz proxy i postat će jasno koji dio vašoj postavci nedostaje.

Usmjeravanje, DNAT i SOCKS mijenjaju različite stvari

Ruta po politici prepisuje odluku na sloju 3. Dvije linije dovoljne su da saobraćaj jednog klijenta pošalju na odabrani sljedeći skok:

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

Nakon toga jezgro predaje paket na 10.50.0.2, a izvorno odredište ostaje u IP zaglavlju. Ako je 10.50.0.2 usmjerivač, on prosljeđuje paket. Ako je to host s SOCKS daemonom na 1080, paket nije adresiran na ništa što ga može prihvatiti, a ni DNAT na port 1080 ne pomaže, jer prevedeni paket i dalje nosi izvorni korisni teret aplikacije umjesto SOCKS pozdrava.

SOCKS5 počinje bajtom verzije, popisom metoda, razmjenom autentifikacije i zahtjevom koji imenuje odredište. To su podaci aplikacije. Nijedan zapis usmjeravanja ni netfilter cilj to ne generira, i to je poređenje u jednoj liniji: usmjeravanje bira put, a SOCKS traži od servera da uspostavi drugu vezu.

Prvi slučaj: aplikacija sama zna govoriti SOCKS

Kada program ima postavku proxyja, to je najkraći put i ne zahtijeva promjenu u jezgru. Usmjerite ga na slušalac, dostavite akreditive ako ih server zatraži i odlučite hoće li se imena razrješavati lokalno ili prosljeđivati proxyju. Kod curl-a to su različite zastavice, a razlika je važna kada se odredište razrješava samo sa strane proxyja:

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

Aplikacijama koje ignoriraju proxy environment varijable ili otvaraju sirove sockete ne može se pomoći na ovaj način. Preglednici i većina HTTP alata su u redu; klijent igre, mail daemon ili proizvoljna vendor binarna datoteka obično nisu. Granica je po aplikaciji i po protokolu, zato je ova opcija izvrsna za testiranje i slaba kao odgovor za cijeli VPN.

Drugi slučaj: adapter koji pretvara IP tokove u proxy sesije

Za programe koji ne znaju govoriti SOCKS, pretvorba se mora dogoditi u nečemu što prekida IP saobraćaj i otvara proxy sesije u njihovo ime. Ta komponenta posjeduje tunelsko sučelje, prihvata tokove koje je odabralo usmjeravanje po politici, obavlja SOCKS handshake za svaki od njih i ponovno sastavlja odgovore. Ruta usmjerava saobraćaj na nju; adapter je ono što stvara sesiju.

Pročitajte njegovu dokumentaciju prije nego mu povjerite cijelu podmrežu. Mnogi adapteri dobro nose TCP i UDP obrađuju samo kroz SOCKS5 UDP asocijaciju, i nijedan od njih ne pretvara ICMP u proxy saobraćaj, pa uspješan ping ne govori ništa o putu kroz proxy. DNS je druga zamka: ako adapter razrješava imena lokalno, zapisi samo za internu upotrebu razrješavaju se u pogrešan odgovor ili u ništa.

Sprječavanje petlji je operativni detalj koji boli. Vlastite veze adaptera prema SOCKS serveru ne smiju se usmjeravati natrag u adapter, pa njegov saobraćaj treba izuzetak u pravilu ili namjensku izvornu adresu. Pogriješite li to, proxy sesija pokušat će proxirati samu sebe.

Treći slučaj: host je zapravo usmjereni gateway

Ponekad radna postavka ne sadrži nikakav SOCKS. Udaljeni host prosljeđuje pakete ili im radi NAT, a pravilo zasnovano na izvoru jednostavno ga bira kao izlaz. Taj je dizajn legitiman i objašnjava zašto kopirana konfiguracija radi na jednoj mreži, a na drugoj ne: pravilo je identično, a nedostaje usluga prosljeđivanja na drugoj strani.

Tri slučaja razdvajaju se brzo. Provjerite što zapravo sluša, a zatim pogledajte prve bajtove koji stižu do hosta:

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

Prvi bajt korisnog tereta pravog SOCKS klijenta je 0x05, verzija u pozdravu. Ako snimka umjesto toga pokazuje izvorne podatke aplikacije, nijedan SOCKS daemon neće odgovoriti, jer pregovori nikada nisu počeli. Ako na 1080 ništa ne sluša, host je gateway i pitanje postaje prosljeđuje li i postoji li povratni put.

Odaberite sloj s četiri pitanja

Ima li program postavku proxyja? Iskoristite je i stanite tu. Uključuje li saobraćaj UDP ili ICMP koji moraju preživjeti? Samo usmjereni ili NAT gateway nosi ICMP, a UDP treba SOCKS5 asocijaciju koju podržavaju obje strane. Mora li biti pokriven svaki proces na računalu, uključujući one koje ne možete konfigurirati? Tada vam treba adapter koji posjeduje sučelje i prekida tokove. Možete li preuzeti i njegovo usmjeravanje, DNS i izuzetke za sprječavanje petlji? Ako ne, obični gateway koštat će manje za rad.

Jednu razliku vrijedi držati ravno. Vlastita opcija socks-proxy VPN klijenta opisuje kako vanjska tunelska veza dolazi do svog servera i ne govori ništa o pretvorbi unutarnjih klijentskih tokova. To dvoje se stalno brka u istom ticketu. Odlučite koja vam je veza potrebna prije nego dotaknete rutu.

Povezani članci