В общем, DPI-успехи некоторых телекомов сподвигли меня отказаться от Socks5 и перейти на более тяжёлые нapкотики инструменты. А конкретно, на "родной" MTProxy. Который в отличие от "носков" гоняет данные в шифрованном виде, да ещё и прикидывается HTTPS-ом. Так что с ним всё хорошо. Единственное, через него не работает API, но мне прямо сейчас это и не требуется. А если понадобится, всегда взведу тоннель.
Оная софтинка распространяется в виде исходников и Docker-контейнеров. На последнее у меня выработалась традиционная изжога и отрыжка. Тем более, что исходники собираются с офсайта по инструкции на раз-два без каких-либо хитростей и премудростей. Надо только не забыть перед началом сборки установить пакетики "libssl-dev", "zlib1g-dev" и все их зависимости.
Другое дело, что код энтого MTProxy достаточно "быдловат" (об этом чуть ниже), поэтому пускать его у себя я решился только в "песочнице" (chroot). Собственно, для всех желающих выкладываю потребное дерево библиотек, а также конфиг для systemd и скрипт обновления списка проксей. В моём примере песочница находится в папке "/usr/chroot/MTProxy".
Итак, дерево библиотек.
Passwd-файл, разумеется, обрезанный, там только "root" и "nobody". Аналогично, "group". shadow-файл пустой. Файл "proxy-multi.conf" должен по крону скачиваться раз в сутки с некого наперёд заданного URL-а; "proxy-secret" скачивается один раз. Про это всё сказано в инструкции, переписывать её сюда я не буду. Набор библиотек указан минимально необходимый, выяснен опытным путём при помощи ldd и strace.
Конфиг для systemd. Класть в "/etc/systemd/system/".
Кэп просил передать, что вместо "номер_порта" подставить свой номер порта, на котором слушать. После "-S" — пароль для подключения клиентов. Ну и внешний IP.
Скрипт для обновления списка вышестоящих проксей. Рекомендуется запускать раз в сутки. В "официальной" доке всё проще, но я добавил некоторые проверки.
Теперь о найденных косяках, и почему код этой поделки быдловат.
- Если провайдер выдаёт белый IP-адрес с маской "/32" (а так делает, например, тот же OVH), то проксику оный, понимаешь, невкусен. И за белый IPшник она его не признает. Поэтому приходится шаманить с "--nat-info". Если в вашем случае маска "/24" или шире, то можно обойтись и без подобных извращений (просто убрать этот параметр запуска).
- Если софтинка не смогла получить доступ к устройству "random / urandom", то выдаёт совершенно неинформативный отлуп вроде "secrets file is not readable" и вываливается. А дальше догадайся, мол, сама.
- Пароль для клиентов нельзя задать какой хочешь. Обязательно, блин, 32 символа в HEX-е. Только так и никак иначе. По телефону не продиктуешь и лапками с экранной клавиатуры не особо введёшь. Только как-то передавать в электронном виде и копипастить.