OpenVPN iwwer SOCKS5: Versioun, Transport an DNS ofgläichen
Eng SOCKS-Kette schléit fehl, wann d'Proxy-Versioun, den Transport oder den DNS-Wee net iwwereneestëmmen. SOCKS5 passend wielen, TCP droen an d'Kette bannent engem Namespace halen.
Ee Wee aus dëser Workstation ass e SOCKS-Proxy, an OpenVPN hannendrun mellt eng Verbindungstimeout ouni eppes Brauchbares. E Browser op der selwechter Maschinn funktionéiert iwwer dee Proxy, d'Zougangsdaten si richteg, an de Port äntwert. Dräi Saachen ënnerscheede sech dacks genuch, fir se als éischt ze kontrolléieren: d'SOCKS-Versioun, déi de Proxy schwätzt, den Transport, deen de Client gewielt huet, an wou d'Nimmopliesung geschitt. Bestätegt jiddweree dovun, éier Dir decidéiert, datt d'Firewall schold ass.
D'SOCKS-Versioun virun der Firewall ofgläichen
Community-OpenVPN schwätzt SOCKS5 fir socks-proxy. Riicht et op e Proxy, deen nëmmen SOCKS4 ubitt, an d'TCP-Verbindung geet op, dann hänkt se, well de Client op eng Äntwert op eng Begréissung waart, déi déi aner Säit ni parst. Vun dobausse gesäit dat Hänken genee wéi e gefilterte Port aus, dofir kënnt d'Versiounsfro virun all Firewallregel. En SOCKS-fähegen Abruff kläert dat mat engem eenzegen Uerder.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Eng ofgeschloss Ufro beweist zwou Saachen op eemol: de Proxy huet d'SOCKS-Ufro ugeholl, an en huet den Numm opgeléist. Kee URL-Schema ass néideg, well curl e blosse Host als HTTP behandelt, wat fir dësen Test duergeet.
Dee Abruff schléisst och de Feeler aus, deen de Client-Log verstoppt. E Proxy kann de Browser erlaben an d'VPN-Zil awer refuséieren, an an deem Fall geschitt d'Refus beim CONNECT, virun all VPN-Authentifikatioun. OpenVPN mellt nëmmen eng Timeout, dofir ass d'Äntwert vum Proxy selwer de Beweis, deen Dir braucht.
Den Transport muss op béide Säiten TCP sinn
SOCKS5 dréit hei en TCP-Stroum, dofir brauch den Tunnel selwer proto tcp-client. E Profil, dee nach op UDP steet, funktionéiert net iwwer dëse Wee, well de Client de UDP-Associatiounsmodus vum Protokoll net benotzt. De Profil ëmzestellen ass eng richteg Ännerung an keng Formalitéit: déi aner Säit muss op demselwechten Port op TCP lauschteren. D'Notzlaascht gëtt dann TCP an TCP, wou e verluerene Segment zweemol nei geschéckt gëtt an den Tempo erofgeet, wat interaktiv Sessiounen vill méi bemierken wéi grouss Iwwerdroungen.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
D'Direktiv hëlt de Proxyhost, en optionale Port an eng optional Datei mat Zougangsdaten. Setzt se an de Profil selwer, sou datt eng Kopie soss anzwousch identesch verhält.
Behält déi ganz Kette an engem eenzegen Container
D'Kette um Host ze maachen heescht, seng Standardroute z'iwwerhuelen an de Resolver an engem Zoustand ze loossen, deen duerno kee kann erklären. En Namespace oder e Container begrenzt se amplaz, sou datt den Host säin eegene Wee behält, wärend de SOCKS-Hop an den Tunnel zesummen liewen. Bannen ass näischt uewen ouni en Tunnelapparat, d'Rechter fir deen Apparat ze konfiguréieren an en erreechbare Proxy. Eng Compose-Service kritt dat mat cap_add: NET_ADMIN an engem bind-gemounteten /dev/net/tun.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Dat Paar ass enker wéi de Container privilegéiert ze lafen, an et ass de ganzen noutwennegen Apparat-Zougang. En Tor-Client oder en separate Proxy-Container kann de Lauschterer stellen. Bind en an engem Fall un Loopback, a erreech en aus dem Namespace iwwer den Host, amplaz de Proxy dem Netzwierk auszesetzen.
D'Nimmopliesung ass de Punkt, wou d'Isolatioun versot
En Tunnel, deen Paketen dréit an dobäi de Resolver vum Host freet, huet näischt isoléiert. Zwou Saache maachen d'Isolatioun richteg: den Namespace huet en eegene Resolver, an seng Ufroe reesen duerch de Proxy oder den Tunnel, ni iwwer déi physesch Interface. Benotzt zwou Nimm fir den Test: eng, déi nëmmen hannert dem Tunnel existéiert, an eng ëffentlech, déi dee selwechte Wee sollt goen.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Wann den Numm vun der anerer Säit sech opléist an den ëffentlechen net, ass d'Kette selektiv an net futti, an den Ënnerscheed seet Iech, wéi ee Wee all Ufro geholl huet. Wa béid vum Host aus opléisen, awer keen am Container, léint de Container nach ëmmer de Resolver vum Host. Notéiert d'Resolver-Datei, déi Dir fonnt hutt, well dat ass d'Astellung, déi geännert muss ginn.
Beweist all Hop an der Reihenfolge
D'Lëscht ass kuerz. Eng SOCKS5-Ufro kritt eng Äntwert, den Tunnel erreecht säi Lauschterer iwwer de Proxy, a Pakete, déi den Namespace verloossen, droen d'Adress, déi déi aner Säit erwaart. Bestätegt jiddwereen eenzeln, amplaz méi Konfiguratioun opzestellen. Wann de Client seet verbonnen an näischt beweegt, sëtzt de Broch bal ëmmer an der zweeter oder drëtter Tatsaach.
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
Schreift d'Kombinatioun op, déi funktionéiert huet: SOCKS-Versioun, Transport, Resolver an Namespace-Astellungen. Dës Kette en zweet Kéier aus dem Gedächtnis ze léisen kascht méi wéi d'Notiz. Halt déi véier Tatsaachen am Ticket, net an engem Chat-Thread.
Eng Kette, déi verbonnen mellt an näischt duerchléisst, ass meeschtens bei deem Hop gescheitert, deen Dir nach net bewisen hutt. Test deen Hop, éier Dir nach eng Schicht bäisetzt.