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 і прымантаваным /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, транспарт, распазнавальнік і налады прасторы імён. Вырашаць гэты ланцуг другі раз па памяці даражэй за нататку. Трымайце гэтыя чатыры факты ў тыкеце, а не ў чаце.
Ланцуг, які паведамляе «падключана» і нічога не прапускае, звычайна зламаўся на тым кроку, які вы яшчэ не давялі. Праверце гэты крок, перш чым дадаваць яшчэ адзін пласт.