Установка MTProto Telegram прокси из исходников на Centos 7

  • Tutorial

simply run 'make'


Всем привет. Обойдусь без лишних прелюдий — многие ждали официального релиза, и вот — дождались. На хабре уже есть парочка статей как установить MTProxy из докера.

А вот с установкой из исходников многие обломались — после simply run 'make' выдаются ошибки. Как установить MTProxy из исходников без ошибок на Centos 7 — под катом

Загружаем исходники


cd ~
git clone https://github.com/TelegramMessenger/MTProxy

Проверяем версию openssl


openssl version

Скорей всего вывод будет вроде:

OpenSSL 1.0.2k-fips  26 Jan 2017

Обновляем openssl до 1.1.0


Гайд взят отсюда

Устанавливаем вспомогательные тулзы

sudo yum install libtool perl-core zlib-devel -y

Скачиваем исходники версии 1.1.0

curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.tar.gz

Распаковываем и переходим в папку

tar -zxvf OpenSSL_1_1_0g.tar.gz
cd openssl-OpenSSL_1_1_0g

Собираем и устанавливаем

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make
make test
sudo make install

Добавляем новую версию в PATH:

Создаем файл

sudo vi /etc/profile.d/openssl.sh

Содержимое:

# /etc/profile.d/openssl.sh
pathmunge /usr/local/openssl/bin

>Перезагружаем shell

Создаем файл

sudo vi /etc/ld.so.conf.d/openssl-1.1.0g.conf

Содержимое:

# /etc/ld.so/conf.d/openssl-1.1.0g.conf
/usr/local/openssl/lib

Применяем

sudo ldconfig -v

Проверяем версию openssl


openssl version

OpenSSL 1.1.0h  27 Mar 2018

Открываем Makefile и добавляем
CFLAGS: -I/usr/local/openssl/include
LDFLAGS: -L /usr/local/openssl/lib

CFLAGS = -I/usr/local/openssl/include -m64 -O3 -std=gnu11 -Wall -mpclmul -march=core2 -mfpmath=sse -mssse3 -fno-strict-aliasing -fno-strict-overflow -fwrapv -DAES=1 -DCOMMIT=\"${COMMIT}\" -D_GNU_SOURCE=1 -D_FILE_OFFSET_BITS=64
LDFLAGS = -L /usr/local/openssl/lib -m64 -ggdb -rdynamic -lm -lrt -lcrypto -lz -lpthread -lcrypto

Сохраняем

И только теперь simply make.

make clean
make

Дальше согласно readme

Всем успехов, надеюсь помог

Мой прокси на дедике(интересно бы было нагрузочное тестирование провести)
t.me/proxy?server=mtp.proxy.mediatube.xyz&port=443&secret=f3f0a2df006d4b4913cc7fd77cc77ffa

VDS в России и Нидерландах

Наш канал в Telegram
Чат для вопросов
VDS.SH / DEDIC.SH
32.66
VDS и серверы нужно покупать только у нас :)
Support the author
Share post

Comments 23

    0
    Спасибо за статью.

    Подскажите, на десктопном клиенте есть возможность настроить соединение чрез MTProto?
    +4
    ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
    make
    make test
    sudo make install

    На rpm-based дистрибутиве? Srsly?
    Взять spec с ближайшей версии srpm, собрать rpm, при ошибках поправить spec, не?
      0
      Не. Это же слишком просто и слишком правильно :).
      Ну и классика же: «Лёгким движением make install...»
      0
      Для Debian 9:

      sudo apt-get install git curl build-essential libssl-dev libz-dev
      git clone https://github.com/TelegramMessenger/MTProxy.git
      cd MTProxy/
      make
      


      Результат будет в папке MTProxy/objs/bin

      Чтобы хостить на портах < 1024 перед запуском нужно ещё это сделать:

      sudo apt-get install libcap2-bin
      sudo setcap CAP_NET_BIND_SERVICE=+eip "полный путь бинарника mtproto-proxy"
      

        –1
        Спасибо! У меня был настроенный 3proxy, отлично и стабильно работающий.
        Вчера тоже ткнулся с MTProto на CentOS7 — и фиг. Попробую сегодня эту инструкцию.
          0
          Может быть вы сделаете PR на гитхаб с правкой документации?
            +1
            Ставил на Ubuntu 16.04 LTE, напоролся на ту же проблему. Выяснил, что дело в версии openssl. Не стал разбираться со сборкой openssl 1.1 из исходников, опыта возни с линуксами не хватило, зато где-то нашел, что указанные «недостающие» функции EVP_MD_CTX_new и EVP_MD_CTX_free были и в openssl 1.0.2, но назывались там, соответственно, EVP_MD_CTX_create и EVP_MD_CTX_destroy.

            Короткая пробежка по исходникам поиском и заменой (по 2 вхождения каждой функции в common/sha256.c и common/sha1.c, и одно в net/net-msg.c) привела к тому, что прокси прекрасно собрался и работает на «штатной» openssl 1.0.2g.

            На гитхабе тем временем уже есть чей то пуллреквест, который делает примерно то же самое (алиасит _new и _free через дефайны в _create и _destroy).
              0
              Собрал из исходников openssl 1.1h на Ubuntu 16.04.4, добавил в makefile нужные параметры.
              Стало собиратся лучше чем раньше. Но всё равно с ошибкой. Ругается так:
              objs/lib/libkdb.a(sha256.o): In function `sha256_starts':
              sha256.c:(.text+0x5): undefined reference to `EVP_MD_CTX_init'
              objs/lib/libkdb.a(sha1.o): In function `sha1_starts':
              sha1.c:(.text+0x5): undefined reference to `EVP_MD_CTX_init'
              objs/lib/libkdb.a(aesni256.o): In function `tg_ssl_aes_ctr128_crypt':
              aesni256.c:(.text+0x4d0): undefined reference to `AES_ctr128_encrypt'
              collect2: error: ld returned 1 exit status
              Makefile:86: recipe for target 'objs/bin/mtproto-proxy' failed
              make: *** [objs/bin/mtproto-proxy] Error 1

              Возможно я что-то криво собрал или криво подключил. Не знаю теперь куда копать.
              +1
              под ubuntu 18.04 собирается само :), и это радует так как оно появляется на vps
                0
                Получилось ли у кого то подключить промо канал?
                +5
                Добавлю, что можно добавить mtproto в автозапуск, используя Systemd.

                nano /lib/systemd/system/mtproxyd.service
                

                [Unit]
                Description=MTproxy service
                After=network.target
                StartLimitIntervalSec=0
                
                
                [Service]
                Type=simple
                Restart=always
                RestartSec=1
                User=setup_user  # Юзер должен иметь права к mtproto-proxy, proxy-secret и proxy-multi.conf
                ExecStart=/path_to_1/mtproto-proxy -u nobody -p 8888 -H 443 -S you_secret --aes-pwd /path_to_2/proxy-secret /path_to_3/proxy-multi.conf -M 1
                # path_to_1, path_to_2, path_to_3 зависит от того, как вы устанавливали
                
                [Install]
                WantedBy=multi-user.target
                

                systemctl daemon-reload
                systemctl start mtproxyd
                systemctl status mtproxyd
                systemctl enable mtproxyd


                А ещё можно настроить sslh: habr.com/post/412779
                  +1
                  Ещё можно сделать setcap 'cap_net_bind_service=+ep' /path_to_1/mtproto-proxy, чтобы пользователь setup_user смог открыть порт 443
                  0
                  За статью спасибо. /s Но как бы Хабр не заблокировали за пособничество пособникам пособников террористов. /s
                    0
                    на 32 битах не собралось, на 64 и со старой openssl норм (gentoo OpenSSL 1.0.2o)
                    теперь это надо в tor завернуть?
                      0
                      Собралось успешно на Ubuntu 16.04 после обновления openssl.
                      Юнит-файл для systemd создал, теперь возник такой вопрос: а нужно ли перезапускать сам mtproto-proxy для того чтобы он перечитал обновленный proxy-multi.conf?
                      0
                        0
                        Подскажите, в чем может быть дело? Собирается MTproxy без ошибок, но не появляется бинарника mtproto-proxy?

                        Only users with full accounts can post comments. Log in, please.