OpenVPN preko SOCKS5: uskladite verziju, transport i DNS
SOCKS lanac pada kada se verzija proxyja, transport ili putanja DNS ne slažu. Uskladite SOCKS5, nosite TCP i držite lanac u jednom imenskom prostoru.
Jedan od izlaza s ove radne stanice je SOCKS proxy i OpenVPN iza njega prijavljuje istek vremena veze bez ikakvih korisnih pojedinosti. Preglednik na istom računalu radi preko tog proxyja, akreditivi su točni i port odgovara. Tri stvari se razlikuju dovoljno često da se prve provjere: verzija SOCKS-a koju proxy govori, transport koji je klijent odabrao i mjesto na kojem se odvija razrješavanje imena. Potvrdite svaku prije nego što optužite zaštitni zid.
Uskladite verziju SOCKS-a prije zaštitnog zida
Zajednički OpenVPN govori SOCKS5 za socks-proxy. Uputite ga na proxy koji nudi samo SOCKS4 i TCP veza će se otvoriti, a zatim stati, jer klijent čeka odgovor na pozdrav koji druga strana nikada ne raščlanjuje. Izvana to stajanje izgleda točno kao filtrirani port, zato pitanje verzije dolazi prije bilo kojeg pravila zaštitnog zida. Jedno dohvaćanje s poznavanjem SOCKS-a rješava to jednom naredbom.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Završen zahtjev dokazuje dvije stvari odjednom: proxy je prihvatio SOCKS zahtjev i razriješio je ime. URL shema nije potrebna, jer curl tretira golo ime hosta kao HTTP i to je dovoljno za ovaj test.
To dohvaćanje također isključuje kvar koji dnevnik klijenta skriva. Proxy može dopustiti preglednik i ipak odbiti odredište VPN-a, pri čemu se odbijanje događa na CONNECT, prije bilo kakve VPN autentifikacije. OpenVPN prijavljuje samo istek vremena, zato je vlastiti odgovor proxyja dokaz koji vam treba.
Transport mora biti TCP s obje strane
Ovdje SOCKS5 nosi TCP tok, zato sam tunel treba proto tcp-client. Profil koji je još na UDP-u neće raditi ovim putem, jer klijent ne koristi način UDP asocijacije protokola. Preokretanje profila stvarna je promjena, a ne formalnost: daleka strana mora slušati TCP na istom portu. Zatim teret postaje TCP unutar TCP-a, gdje se izgubljeni segment ponovno šalje dvaput i tempo opada, što interaktivne sesije osjećaju daleko više od velikih prijenosa.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Ova direktiva prima host proxyja, opcionalni port i opcionalnu datoteku akreditiva. Stavite ih u sam profil da bi se kopija ponašala isto na drugom mjestu.
Zatvorite cijeli lanac u jedan kontejner
Radenje lanca na hostu znači zauzeti njegovu zadanu rutu i ostaviti razrješivač u stanju koje poslije nitko ne može objasniti. Imenski prostor ili kontejner ga ograničavaju umjesto toga, pa host čuva svoju putanju, dok SOCKS korak i tunel žive zajedno. Unutra se ništa ne diže bez tunelskog uređaja, prava za njegovo konfiguriranje i dostupnog proxyja. Compose usluga to dobiva s cap_add: NET_ADMIN i bind-montiranim /dev/net/tun.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Taj je par uži od pokretanja kontejnera s punim ovlastima i to je cijeli potrebni pristup uređaju. Tor klijent ili zaseban kontejner proxyja može pružiti slušatelja. U oba slučaja vežite ga na loopback i dođite do njega iz imenskog prostora preko hosta, umjesto da proxy izlažete mreži.
Razrješavanje imena je mjesto na kojem izolacija pada
Tunel koji nosi pakete, a pritom pita razrješivač hosta, ništa nije izolirao. Dvije stvari čine izolaciju stvarnom: imenski prostor ima vlastiti razrješivač i njegovi upiti idu kroz proxy ili tunel, nikada kroz fizičko sučelje. Za test koristite dva imena: jedno koje postoji samo iza tunela i jedno javno koje bi trebalo ići istim putem.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Ako se daleko ime razriješi, a javno ne, lanac je selektivan, a ne pokvaren, i razlika govori kojim je putem išao svaki upit. Ako se oba razriješe s hosta, ali nijedno unutar kontejnera, kontejner još posuđuje razrješivač hosta. Zapišite pronađenu datoteku razrješivača, jer upravo tu postavku treba promijeniti.
Dokažite svaki korak redom
Popis je kratak. SOCKS5 zahtjev dobiva odgovor, tunel stiže do svog slušatelja preko proxyja i paketi koji napuštaju imenski prostor nose adresu koju daleka strana očekuje. Potvrđujte jedno po jedno, umjesto da nagomilavate konfiguraciju. Kada klijent kaže „povezano“, a ništa se ne miče, prekid je gotovo uvijek u drugoj ili trećoj činjenici.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
docker compose exec vpn ip route get 203.0.113.10
docker compose exec vpn getent hosts internal.lab.example
Zapišite kombinaciju koja je uspjela: verzija SOCKS-a, transport, razrješivač i postavke imenskog prostora. Rješavanje ovog lanca drugi put po sjećanju skuplje je od bilješke. Čuvajte te četiri činjenice u ticketu, a ne u chatu.
Lanac koji prijavljuje „povezano“ i ništa ne propušta obično se slomio na koraku koji još niste dokazali. Isprobajte taj korak prije nego što dodate još jedan sloj.