OpenVPN over SOCKS5: matche versjon, transport og DNS
SOCKS-kjeda sviktar når proxyversjonen, transporten eller DNS-vegen ikkje stemmer. Match SOCKS5, ber TCP og hald kjeda innanfor eitt namnerom.
Éin veg ut frå denne arbeidsstasjonen er ein SOCKS-proxy, og OpenVPN bak han rapporterer tidsavbrot på tilknytinga utan noka nyttig opplysning. Nettlesaren på same maskin verkar gjennom den proxyen, påloggingsdataa er rette og porten svarar. Tre ting skil seg ofte nok ut til å sjekkast først: SOCKS-versjonen proxyen snakkar, transporten klienten valde, og staden der namneoppslaget skjer. Stadfest kvar av dei før du gir brannmuren skulda.
Match SOCKS-versjonen før brannmuren
Community-OpenVPN snakkar SOCKS5 for socks-proxy. Peik han mot ein proxy som berre tilbyr SOCKS4, og TCP-tilknytinga opnar seg og stoggar, fordi klienten ventar på svar på ei helsing den andre sida aldri tolkar. Utanfrå ser denne stogginga nøyaktig ut som ein filtrert port, og difor kjem versjonsspørsmålet før kvar einaste brannmurregel. Eitt oppslag med SOCKS-kunnskap avgjer det med éin kommando.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Ei fullført førespurnad beviser to ting samstundes: proxyen godtok SOCKS-førespurnaden og han slo opp namnet. Det trengst inga URL-ordning, fordi curl handsamar ein bar vert som HTTP, og det er nok for denne testen.
Det oppslaget utelukkar òg feilen klientloggen gøymer. Ein proxy kan tillate nettlesaren og likevel avvise VPN-målet, og då skjer avvisinga ved CONNECT, før kvar einaste VPN-autentisering. OpenVPN rapporterer berre tidsavbrot, så proxyen sitt eige svar er beviset du treng.
Transporten må vere TCP på begge sider
SOCKS5 ber ein TCP-straum her, så sjølve tunnelen treng proto tcp-client. Ein profil som framleis er sett til UDP verkar ikkje denne vegen, fordi klienten ikkje brukar UDP-tilknytingsmodusen til protokollen. Å snu profilen er ei reell endring og ikkje ein formalitet: fjernsida må lytte på TCP på same port. Deretter blir nyttelasta TCP inne i TCP, der eit tapt segment vert sendt på nytt to gonger og takta svekkjast, noko interaktive økter merkjer langt meir enn store overføringar.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Direktivet tek proxyverten, ein valfri port og ei valfri påloggingsfil. Legg dei i sjølve profilen slik at ein kopi gjer seg likt ein annan stad.
Lukk heile kjeda inne i ein container
Å gjere kjeda på verten betyr å ta over standardruta og la oppløysaren stå i ein tilstand ingen kan forklare seinare. Eit namnerom eller ein container avgrensar henne i staden, så verten held sin eigen veg medan SOCKS-hoppet og tunnelen lever saman. Ingenting reiser seg inni utan ei tunnelinnretning, rettar til å konfigurere henne og ein nåbar proxy. Ein Compose-teneste får det med cap_add: NET_ADMIN og ein bind-montert /dev/net/tun.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Det paret er smalare enn å køyre containeren privilegert, og det er heile den naudsynte einingstilgangen. Ein Tor-klient eller ein eigen proxycontainer kan skaffe lyttaren. Bind han i begge tilfelle til loopback og nå han frå namnerommet via verten i staden for å eksponere proxyen mot nettet.
Namneoppslaget er der isolasjonen sviktar
Ein tunnel som ber pakkar men likevel spør oppløysaren til verten, har ikkje isolert noko. To ting gjer isolasjonen verkeleg: namnerommet har sin eigen oppløysar, og spørjingane går gjennom proxyen eller tunnelen, aldri over det fysiske grensesnittet. Bruk to namn i testen: eitt som berre finst bak tunnelen, og eitt offentleg som bør følgje same veg.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Viss fjernnamnet vert løyst opp men det offentlege ikkje, er kjeda selektiv og ikkje øydelagd, og skilnaden fortel kva veg kvar spørjing tok. Viss begge vert løyst opp frå verten men ingen inne i containeren, låner containeren framleis oppløysaren til verten. Noter oppløysarfilen du fann, for det er innstillinga som må endrast.
Bevis kvart hopp i rekkjefølgje
Lista er kort. Ei SOCKS5-førespurnad får svar, tunnelen når lyttaren sin gjennom proxyen, og pakkar som forlèt namnerommet ber adressa fjernsida ventar. Stadfest eitt om gongen i staden for å leggje på meir konfigurasjon. Når klienten seier tilkopla og ingenting rører seg, sit brotet nesten alltid i det andre eller tredje faktumet.
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
Skriv ned kombinasjonen som virka: SOCKS-versjon, transport, oppløysar og namneromsinnstillingar. Å løyse kjeda ein gong til frå minnet kostar meir enn notatet. Hald dei fire fakta i saka og ikkje i chatten.
Ei kjede som rapporterer tilkopla og ikkje slepp noko gjennom, har som regel svikta ved hoppet du enno ikkje har bevist. Test det hoppet før du legg til eit lag til.