OpenVPN преко SOCKS5: ускладите верзију, транспорт и DNS
SOCKS ланац пада када се верзија проксија, транспорт или путања DNS не слажу. Ускладите SOCKS5, носите TCP и држите ланац у једном именском простору.
Један од излаза са ове радне станице је SOCKS прокси и OpenVPN иза њега пријављује истек времена везе без икаквих корисних појединости. Прегледач на истом рачунару ради преко тог проксија, акредитиви су тачни и порт одговара. Три ствари се разликују довољно често да се прве провере: верзија SOCKS-а коју прокси говори, транспорт који је клијент изабрао и место на коме се одвија разрешавање имена. Потврдите сваку пре него што оптужите заштитни зид.
Ускладите верзију SOCKS-а пре заштитног зида
Заједнички OpenVPN говори SOCKS5 за socks-proxy. Упутите га на прокси који нуди само SOCKS4 и TCP веза ће се отворити, а затим стати, јер клијент чека одговор на поздрав који друга страна никада не рашчлањује. Споља то стајање изгледа тачно као филтриран порт, зато питање верзије долази пре било ког правила заштитног зида. Једно преузимање са познавањем SOCKS-а решава то једном командом.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Завршен захтев доказује две ствари одједном: прокси је прихватио SOCKS захтев и разрешио је име. URL шема није потребна, јер curl третира голо име домаћина као HTTP и то је довољно за овај тест.
То преузимање такође искључује квар који дневник клијента крије. Прокси може допустити прегледач и ипак одбити одредиште VPN-а, при чему се одбијање дешава на CONNECT, пре било какве VPN аутентикације. OpenVPN пријављује само истек времена, зато је сопствени одговор проксија доказ који вам треба.
Транспорт мора бити TCP са обе стране
Овде SOCKS5 носи TCP ток, зато самом тунелу треба proto tcp-client. Профил који је још на UDP-у неће радити овим путем, јер клијент не користи режим UDP асоцијације протокола. Преокретање профила је стварна промена, а не формалност: далека страна мора слушати TCP на истој порти. Затим терет постаје TCP унутар TCP-а, где се изгубљени сегмент поново шаље два пута и темпо опада, што интерактивне сесије осећају далеко више од великих преноса.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Ова директива прима домаћина проксија, опциону порту и опциону датотеку акредитива. Ставите их у сам профил да би се копија понашала исто на другом месту.
Затворите цео ланац у један контејнер
Прављење ланца на домаћину значи заузети његову подразумевану путању и оставити разрешивач у стању које после нико не може да објасни. Именски простор или контејнер га ограничавају уместо тога, тако да домаћин чува своју путању, док SOCKS корак и тунел живе заједно. Унутра се ништа не подиже без уређаја тунела, права за његово конфигурисање и доступног проксија. Compose услуга то добија са cap_add: NET_ADMIN и bind-монтираним /dev/net/tun.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Овај пар је ужи од покретања контејнера привилеговано и то је цео потребан приступ уређају. Tor клијент или одвојен контејнер проксија може да пружи слушаоца. У оба случаја вежите га на loopback и дођите до њега из именског простора преко домаћина, уместо да излажете прокси на мрежу.
Разрешавање имена је место на коме изолација пада
Тунел који носи пакете, а притом пита разрешивач домаћина, није ништа изоловао. Две ствари чине изолацију стварном: именски простор има свој разрешивач и његови упити иду кроз прокси или тунел, никада кроз физички интерфејс. За тест користите два имена: једно које постоји само иза тунела и једно јавно које треба да иде истим путем.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Ако се далеко име разреши, а јавно не, ланац је селективан, а не покварен, и разлика каже којим је путем ишао сваки упит. Ако се оба разреше са домаћина, али ниједно унутар контејнера, контејнер још позајмљује разрешивач домаћина. Запишите пронађену датотеку разрешивача, јер управо ту поставку треба променити.
Докажите сваки корак редом
Списак је кратак. SOCKS5 захтев добија одговор, тунел стиже до свог слушаоца преко проксија и пакети који напуштају именски простор носе адресу коју далека страна очекује. Потврђујте једно по једно, уместо да нагомилате конфигурацију. Када клијент каже „повезано“, а ништа се не помера, прекид је готово увек у другој или трећој чињеници.
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
Запишите комбинацију која је успела: верзија SOCKS-а, транспорт, разрешивач и поставке именског простора. Решавање овог ланца други пут по сећању скупље је од белешке. Чувајте те четири чињенице у тикету, а не у чету.
Ланац који пријављује „повезано“ и ништа не пропушта обично се сломио на кораку који још нисте доказали. Испробајте тај корак пре него што додате још један слој.