Usmerjanje po pravilniku proti SOCKS: katera plast v resnici posreduje promet
Pot do vrat SOCKS ni seja SOCKS. Primerjajte nastavitve proxy na ravni aplikacije, adapter IP-v-proxy in usmerjena prehodna vrata po plasti, ki izvaja pretvorbo.
Dodali ste pot po pravilniku, ki pošilja promet odjemalca VPN na gostitelja, kjer na vratih 1080 teče poslušalec SOCKS. Paketi prispejo, poslušalec nič ne zabeleži in povezava visi. S potjo ni nič narobe: naslednji skok izbere, kam gre paket, in SOCKS je pogovor, ki ga mora začeti odjemalec. Primerjajte tri arhitekture, ki jih ljudje običajno mislijo, ko pošiljajo promet skozi proxy, in postalo bo jasno, kateri del v vaši nastavitvi manjka.
Usmerjanje, DNAT in SOCKS spreminjajo različne stvari
Pot po pravilniku prepiše odločitev na plasti 3. Dve vrstici zadostujeta, da se promet enega odjemalca pošlje na izbrani naslednji skok:
ip route add default via 10.50.0.2 table 101
ip rule add from 10.77.0.2 lookup 101Nato jedro izroči paket na 10.50.0.2, prvotni cilj pa ostane v glavi IP. Če je 10.50.0.2 usmerjevalnik, paket posreduje. Če je gostitelj z demonom SOCKS na 1080, paket ni naslovljen na nič, kar bi ga lahko sprejelo, in tudi DNAT na vrata 1080 ne pomaga, ker prevedeni paket še vedno nosi prvotno aplikacijsko koristno obremenitev namesto pozdrava SOCKS.
SOCKS5 se začne z bajtom različice, seznamom metod, izmenjavo overjanja in zahtevo, ki poimenuje cilj. To so aplikacijski podatki. Noben vnos usmerjanja in noben cilj netfilter jih ne ustvari, in to je primerjava v eni vrstici: usmerjanje izbere pot, SOCKS prosi strežnik, da vzpostavi drugo povezavo.
Prvi primer: aplikacija zna sama govoriti SOCKS
Ko ima program nastavitev proxy, je to najkrajša pot in ne zahteva spremembe jedra. Usmerite jo na poslušalca, navedite poverilnice, če jih strežnik zahteva, in odločite, ali se imena razrešujejo lokalno ali predajajo proxyju. Pri curl so to različne zastavice in razlika je pomembna, ko se cilj razrešuje le na strani proxyja:
curl --socks5 10.50.0.2:1080 https://docs.example.com
curl --socks5-hostname 10.50.0.2:1080 https://internal.example.comAplikacijam, ki ne upoštevajo okoljskih spremenljivk proxyja ali odpirajo surove vtičnice, na ta način ni mogoče pomagati. Brskalniki in večina orodij HTTP so v redu; odjemalec iger, poštni demon ali poljubna binarna datoteka dobavitelja običajno ni. Meja je za vsako aplikacijo in vsak protokol, zato je ta možnost odlična za testiranje in šibka kot odgovor za celoten VPN.
Drugi primer: adapter, ki pretvarja tokove IP v seje proxyja
Za programe, ki ne znajo govoriti SOCKS, se mora pretvorba zgoditi v nečem, kar konča promet IP in v njihovem imenu odpre seje proxyja. Ta adapter ima vmesnik tunela, sprejema tokove, ki jih je izbralo usmerjanje po pravilniku, izvede rokovanje SOCKS za vsakega od njih in znova sestavi odgovore. Pot usmeri promet proti njemu; adapter je tisto, kar ustvari sejo.
Preberite njegovo dokumentacijo, preden mu zaupate celotno podomrežje. Veliko adapterjev dobro prenaša TCP, UDP pa obravnava le prek združitve UDP v SOCKS5, in noben od njih ne spremeni ICMP v promet proxyja, zato uspešen ping o poti skozi proxy ne pove nič. DNS je druga past: če adapter imena razrešuje lokalno, se zapisi samo za notranjo uporabo razrešijo v napačen odgovor ali pa v nič.
Preprečevanje zank je operativni detajl, ki ugrizne. Lastne povezave adapterja do strežnika SOCKS se ne smejo usmerjati nazaj v adapter, zato njegov promet potrebuje izjemo v pravilu ali namenjen izvorni naslov. Če to storite narobe, bo seja proxyja poskusila posredovati samo sebe.
Tretji primer: gostitelj je v resnici usmerjena prehodna vrata
Včasih delujoča nastavitev ne vsebuje nobenega SOCKS. Oddaljeni gostitelj pakete posreduje ali zanje izvaja NAT, pravilo na podlagi izvora pa ga preprosto izbere kot izhod. Ta zasnova je legitimna in pojasnjuje, zakaj kopirana konfiguracija deluje v enem omrežju in v drugem ne: pravilo je enako, manjkajoči del je storitev posredovanja na drugi strani.
Trije primeri se hitro ločijo. Preverite, kaj v resnici posluša, nato poglejte prve bajte, ki prispejo do gostitelja:
ss -ltnp 'sport = :1080'
tcpdump -ni eth0 -X 'tcp port 1080'Prvi bajt koristne obremenitve pravega odjemalca SOCKS je 0x05, različica v pozdravu. Če posnetek namesto tega pokaže prvotne aplikacijske podatke, noben demon SOCKS ne bo odgovoril, ker se pogajanja niso nikoli začela. Če na 1080 nič ne posluša, je gostitelj prehodna vrata in vprašanje postane, ali posreduje in ali obstaja povratna pot.
Izberite plast s štirimi vprašanji
Ima program nastavitev proxy? Uporabite jo in se tam ustavite. Ali promet vsebuje UDP ali ICMP, ki morata preživeti? ICMP prenaša le usmerjena prehodna vrata ali vrata z NAT, UDP pa potrebuje združitev SOCKS5, ki jo podpirata oba konca. Ali mora biti pokrit vsak proces na stroju, vključno s tistimi, ki jih ne morete nastaviti? Potem potrebujete adapter, ki ima v lasti vmesnik in konča tokove. Ali lahko prevzamete tudi njegovo usmerjanje, DNS in izjeme za preprečevanje zank? Če ne, bodo preprosta vrata cenejša za upravljanje.
Eno razlikovanje je vredno ohraniti jasno. Lastna možnost socks-proxy odjemalca VPN opisuje, kako zunanja tunelska povezava doseže svoj strežnik, in ne pove nič o pretvorbi notranjih odjemalčevih tokov. Oba se v isti zahtevi nenehno zamenjujeta. Odločite se, kakšen odnos potrebujete, preden se dotaknete poti.