klink0v (klink0v) wrote,
klink0v
klink0v

Category:

MTProxy в chroot

В общем, 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.

Скрипт для обновления списка вышестоящих проксей. Рекомендуется запускать раз в сутки. В "официальной" доке всё проще, но я добавил некоторые проверки.

Теперь о найденных косяках, и почему код этой поделки быдловат.


  1. Если провайдер выдаёт белый IP-адрес с маской "/32" (а так делает, например, тот же OVH), то проксику оный, понимаешь, невкусен. И за белый IPшник она его не признает. Поэтому приходится шаманить с "--nat-info". Если в вашем случае маска "/24" или шире, то можно обойтись и без подобных извращений (просто убрать этот параметр запуска).

  2. Если софтинка не смогла получить доступ к устройству "random / urandom", то выдаёт совершенно неинформативный отлуп вроде "secrets file is not readable" и вываливается. А дальше догадайся, мол, сама.

  3. Пароль для клиентов нельзя задать какой хочешь. Обязательно, блин, 32 символа в HEX-е. Только так и никак иначе. По телефону не продиктуешь и лапками с экранной клавиатуры не особо введёшь. Только как-то передавать в электронном виде и копипастить.

А так, вроде, работает. Прошёл уже месяц, полёт нормальный. Только сейчас вот добрался до ЖЖ чтоб написать.
Tags: debian, manual, интернетное, сети, софт, ссылки, телекомы
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments