Usmjeravanje po politici nasuprot SOCKS: koji sloj zapravo proxira saobraćaj
Ruta do SOCKS porta nije SOCKS sesija. Uporedite postavke proxyja na razini aplikacije, adapter od IP-a do proxyja i usmjereni gateway po sloju koji vrši pretvorbu.
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 101Nakon 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.comAplikacijama 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.