OpenVPN yfir SOCKS5: samræmdu útgáfu, flutning og DNS
SOCKS-keðja bregst þegar útgáfa proxysins, flutningurinn eða DNS-slóðin stemma ekki. Notaðu SOCKS5, berðu TCP og haltu keðjunni inni í namespace.
Ein leið út úr þessari vinnustöð er SOCKS-proxy, og OpenVPN bak við hann tilkynnir tengistímaútganga án nokkurra gagnlegra upplýsinga. Vafri á sömu vél virkar í gegnum þetta proxy, skilríkin eru rétt og portið svarar. Þrjú atriði eru nógu oft frábrugðin til að skoða þau fyrst: SOCKS-útgáfan sem proxyið talar, flutningurinn sem biðlarinn valdi og hvar nafnaupplausnin fer fram. Staðfestu hvert þeirra áður en þú ákveður að eldveggurinn sé sekur.
Samræmdu SOCKS-útgáfuna fyrir eldvegginn
Samfélags-OpenVPN talar SOCKS5 fyrir socks-proxy. Beindu því að proxy sem býður aðeins SOCKS4, og TCP-tengingin opnast, stöðvast svo, því biðlarinn bíður svars við kveðju sem hin hliðin þáttar aldrei. Að utan lítur þessi stöðvun nákvæmlega út eins og sigtað port, og þess vegna kemur útgáfuspurningin á undan hverri eldveggsreglu. SOCKS-vitandi beiðni leysir það með einni skipun.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Lokið beiðni sannar tvennt í einu: proxyið samþykkti SOCKS-beiðnina og það leysti nafnið. Ekkert URL-skilríki er nauðsynlegt, því curl meðhöndlar bert hýsil sem HTTP, sem nægir fyrir þetta próf.
Þessi beiðni útilokar líka bilunina sem biðlaraskráin hylur. Proxy getur leyft vafrann og samt hafnað VPN-áfangastaðnum, og þá verður höfnunin við CONNECT, fyrir hverja VPN-auðkenningu. OpenVPN tilkynnir aðeins tímaútganga, svo svar proxysins sjálfs er sönnunin sem þú þarft.
Flutningurinn verður að vera TCP á báðum hliðum
SOCKS5 ber TCP-strauma hér, svo göngin sjálf þurfa proto tcp-client. Prófíll sem er enn stilltur á UDP virkar ekki í gegnum þessa leið, því biðlarinn notar ekki UDP-tengimáta samskiptareglunnar. Að skipta prófílnum er raunveruleg breyting en ekki formsatriði: hin hliðin verður að hlusta á TCP á sama porti. Farmsemin verður þá TCP inni í TCP, þar sem týndur hluti er endursendur tvisvar og hraðinn versnar, eitthvað sem gagnvirkar lotur taka eftir mun meira en stórar millifærslur.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Fyrirmælið tekur hýsil proxysins, valfrjálst port og valfrjálsa skilríkjaskrá. Settu þau í prófílinn sjálfan svo afrit hagi sér eins annars staðar.
Lokaðu allri keðjunni inni í einum gámi
Að gera keðjuna á hýsilnum þýðir að taka yfir sjálfgefna leið hans og skilja uppleysandann eftir í ástandi sem enginn getur útskýrt síðar. Namespace eða gámur afmarkar hana í staðinn, svo hýsillinn heldur sinni eigin leið á meðan SOCKS-stökkið og göngin lifa saman. Þar inni rís ekkert án gangnatækis, réttindanna til að stilla það tæki og aðgengilegs proxys. Compose-þjónusta fær það með cap_add: NET_ADMIN og bind-mótuðu /dev/net/tun.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Þetta par er þrengra en að keyra gáminn með forréttindum, og það er allur nauðsynlegur tækjaaðgangur. Tor-biðlari eða sérstakur proxygámur getur séð um hlustandann. Í báðum tilvikum skaltu binda hann við loopback og ná í hann úr namespace í gegnum hýsilinn í stað þess að afhjúpa proxyið fyrir netinu.
Nafnaupplausn er þar sem einangrunin bregst
Göng sem bera pakka en spyrja uppleysanda hýsilsins hafa ekkert einangrað. Tvö atriði gera einangrunina raunverulega: namespace hefur sinn eigin uppleysanda, og fyrirspurnir þess fara í gegnum proxyið eða göngin, aldrei yfir líkamlega tengið. Notaðu tvö nöfn fyrir prófið: eitt sem er aðeins til bak við göngin, og eitt opinbert sem ætti að fylgja sömu leið.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Ef nafnið hinum megin leysist og hið opinbera ekki, er keðjan sértæk en ekki brotin, og munurinn segir þér hvaða leið hver fyrirspurn fór. Ef bæði leysast frá hýsilnum en ekkert inni í gáminum, er gámurinn enn að fá uppleysanda hýsilsins að láni. Skráðu uppleysandaskrána sem þú fannst, því það er stillingin sem þarf að breyta.
Sannaðu hvert stökk í röð
Listinn er stuttur. SOCKS5-beiðni fær svar, göngin ná hlustandanum í gegnum proxyið, og pakkar sem yfirgefa namespace bera heimilisfangið sem hin hliðin á von á. Staðfestu hvert fyrir sig í stað þess að hrúga á fleiri stillingum. Þegar biðlarinn segir tengt og ekkert hreyfist er brotið næstum alltaf í annarri eða þriðju staðreyndinni.
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
Skráðu samsetninguna sem virkaði: SOCKS-útgáfa, flutningur, uppleysandi og namespace-stillingar. Að leysa þessa keðju í annað sinn úr minni kostar meira en glósan. Hafðu þessar fjórar staðreyndir í miðanum en ekki í spjallþræði.
Keðja sem tilkynnir tengingu og hleypir engu í gegn hefur venjulega brugðist á stökkinu sem þú hefur ekki sannað enn. Prófaðu það stökk áður en þú bætir við annarri laginu.