OpenVPN dros SOCKS5: cyfatebwch fersiwn, cludiant a DNS
Mae cadwyn SOCKS yn methu pan fo fersiwn y proxy, y cludiant neu'r llwybr DNS yn anghytuno. Defnyddiwch SOCKS5, cludwch TCP, a chadwch y gadwyn o fewn namespace.
Un llwybr allan o'r gwaithfan hon yw proxy SOCKS, ac mae OpenVPN y tu ôl iddo yn adrodd goramser cysylltu heb unrhyw beth defnyddiol ynghlwm. Mae porwr ar yr un peiriant yn gweithio trwy'r proxy hwnnw, mae'r manylion mewngofnodi'n gywir, ac mae'r porth yn ateb. Mae tri pheth yn amrywio'n ddigon aml i'w gwirio gyntaf: y fersiwn SOCKS y mae'r proxy yn ei siarad, y cludiant a ddewisodd y cleient, a ble mae datrys enwau'n digwydd. Cadarnhewch bob un cyn penderfynu mai'r wal dân sy'n euog.
Cyfatebwch fersiwn SOCKS cyn y wal dân
Mae OpenVPN cymunedol yn siarad SOCKS5 ar gyfer socks-proxy. Pwyntiwch ef at proxy nad yw ond yn cynnig SOCKS4, ac mae'r cysylltiad TCP yn agor, yna'n aros, oherwydd mae'r cleient yn aros am ateb i gyfarchiad nad yw'r pen arall byth yn ei ddadansoddi. O'r tu allan, mae'r aros hwnnw'n edrych yn union fel porth wedi'i hidlo, a dyna pam mae cwestiwn y fersiwn yn dod cyn unrhyw reol wal dân. Mae cais SOCKS yn datrys hyn mewn un gorchymyn.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Mae cais wedi'i gwblhau yn profi dau beth ar unwaith: derbyniodd y proxy'r cais SOCKS ac fe ddatrysodd yr enw. Nid oes angen cynllun URL, oherwydd mae curl yn trin gwesteiwr noeth fel HTTP, sy'n ddigon ar gyfer y prawf hwn.
Mae'r cais hwnnw hefyd yn diystyru'r methiant y mae log y cleient yn ei guddio. Gall proxy ganiatáu'r porwr ac eto gwrthod cyrchfan y VPN, ac yn yr achos hwnnw mae'r gwrthodiad yn digwydd yn CONNECT, cyn unrhyw uwchadnabyddiaeth VPN. Dim ond goramser y mae OpenVPN yn ei adrodd, felly ateb y proxy ei hun yw'r dystiolaeth sydd ei hangen arnoch.
Rhaid i'r cludiant fod yn TCP ar y ddwy ochr
Mae SOCKS5 yn cludo ffrwd TCP yma, felly mae angen proto tcp-client ar y twnnel ei hun. Ni fydd proffil sydd o hyd ar UDP yn gweithio trwy'r llwybr hwn, oherwydd nid yw'r cleient yn defnyddio modd cysylltiad UDP y protocol. Mae troi'r proffil yn newid go iawn yn hytrach na ffurfioldeb: rhaid i'r pen pellaf fod yn gwrando ar TCP ar yr un porth. Daw'r llwyth yn TCP y tu mewn i TCP, lle mae segment coll yn cael ei ail-drosglwyddo ddwywaith ac mae'r cyflymder yn dirywio, rhywbeth y mae sesiynau rhyngweithiol yn ei sylwi'n llawer mwy na throsglwyddiadau mawr.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Mae'r gyfarwyddeb yn cymryd gwesteiwr y proxy, porth dewisol a ffeil hybrydau dewisol. Rhowch y rhain yn y proffil ei hun fel bod copi'n ymddwyn yn union yr un fath mewn man arall.
Cyfyngwch y gadwyn gyfan i un cynhwysydd
Gwneud y gadwyn ar y gwesteiwr yn golygu cymryd ei lwybr diofyn a gadael y datryswr mewn cyflwr na all neb ei esbonio'n ddiweddarach. Mae namespace neu gynhwysydd yn ei gwmpasu yn lle hynny, felly mae'r gwesteiwr yn cadw ei lwybr ei hun tra bod naid SOCKS a'r twnnel yn byw gyda'i gilydd. Nid oes unrhyw beth yn codi y tu mewn iddo heb ddyfais twnnel, yr hawliau i ffurfweddu'r ddyfais honno, a proxy y gellir ei gyrraedd. Mae gwasanaeth Compose yn cael hynny gyda cap_add: NET_ADMIN a /dev/net/tun wedi'i fowntio'n bind.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Mae'r pâr hwnnw'n gulach na rhedeg y cynhwysydd gyda phreintiau, a dyma'r cyfan o'r mynediad i ddyfeisiau sydd ei angen. Gall cleient Tor neu gynhwysydd proxy ar wahân ddarparu'r gwrandäwr. Ym mhob achos, rhwymwch ef i loopback, a'i gyrraedd o'r namespace trwy'r gwesteiwr yn lle datgelu'r proxy i'r rhwydwaith.
Datrys enwau yw lle mae'r ynysu'n methu
Nid yw twnnel sy'n cludo pecynnau tra'n gofyn i ddatryswr y gwesteiwr wedi ynysu dim byd. Mae dau beth yn gwneud yr ynysu'n real: mae gan y namespace ddatryswr ei hun, ac mae ei ymholiadau'n teithio trwy'r proxy neu'r twnnel, byth dros y rhyngwyneb ffisegol. Defnyddiwch ddau enw ar gyfer y prawf: un nad yw'n bodoli ond y tu ôl i'r twnnel, ac un cyhoeddus a ddylai ddilyn yr un llwybr.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Os yw'r enw pell yn datrys ac nad yw'r un cyhoeddus yn gwneud, mae'r gadwyn yn ddetholus yn hytrach na wedi torri, ac mae'r gwahaniaeth yn dweud wrthych pa lwybr a gymerodd pob ymholiad. Os yw'r ddau yn datrys o'r gwesteiwr ond nid yw'r un yn datrys y tu mewn i'r cynhwysydd, mae'r cynhwysydd yn dal i fenthyca datryswr y gwesteiwr. Cofnodwch y ffeil datryswr a welsom, oherwydd dyna'r gosodiad y mae'n rhaid ei newid.
Profwch bob naid yn eu trefn
Mae'r rhestr yn fyr. Mae cais SOCKS5 yn cael ateb, mae'r twnnel yn cyrraedd ei wrandäwr trwy'r proxy, ac mae pecynnau sy'n gadael y namespace yn cario'r cyfeiriad y mae'r pen pell yn ei ddisgwyl. Cadarnhewch bob un ar y tro yn lle ychwanegu mwy o ffurfweddiad. Pan fydd y cleient yn dweud ei fod wedi cysylltu ac nad oes unrhyw beth yn symud, mae'r toriad bron bob amser yn yr ail neu'r drydedd ffaith.
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
Nodwch yr union gyfuniad a weithiodd: fersiwn SOCKS, cludiant, datryswr a gosodiadau namespace. Mae datrys y gadwyn hon eilwaith o'r cof yn costio mwy na'r nodyn. Cadwch y pedair ffaith hynny yn y tocyn yn hytrach nag mewn edefyn sgwrs.
Mae cadwyn sy'n adrodd cysylltiad ac nad yw'n pasio dim byd fel arfer wedi methu yn y naid nad ydych wedi'i phrofi eto. Profwch y naid honno cyn ychwanegu haen arall.