А мы продолжаем нашу, похоже, уже постоянную рубрику "Очередные костыли для запуска всего-чего-только-можно на 443 порту" на волнах блокировок Телеграма. Теперь со вкусом MTProto!
Не так давно Telegram представил общественности официальную версию MTProto-proxy сервера, позволяющего отказаться от Socks5 прокси и начать использовать нативный для клиентов протокол MTProto. В связи с чем возникла необходимость расширить прошлый набор сервисов, уже расположенных на 443 порту.
Было обаружено новое старое решение под названием SSLH, умеющее мультиплексировать множество протоколов. MTProto-proxy в их число не входит, но перенаправлять в него трафик можно методом исключения, если ни один другой протокол не был распознан.
Рассмотрим установку и настройку в Debian 9.4.
Версия SSLH из официального репозитория слишком старая, поэтому соберём его из исходников.
Установим необходимые зависимости для сборки:
apt-get update
apt-get install libwrap0-dev libconfig-dev libpcre3-dev
Склонируем репозиторий:
git clone https://github.com/yrutschle/sslh.git
Выполним сборку и установку SSLH:
cd sslh/
make
make install
Создадим скрипт Systemd для запуска демона при старте системы:
cat <<@ > /lib/systemd/system/sslh.service
[Unit]
Description=SSL/SSH multiplexer
After=network.target
Documentation=man:sslh(8)
[Service]
EnvironmentFile=/etc/default/sslh
ExecStart=/usr/sbin/sslh --foreground $DAEMON_OPTS
KillMode=process
[Install]
WantedBy=multi-user.target
@
И, наконец, создадим файл конфигурации в /etc/default/
:
cat <<@ > /etc/default/sslh
# Default options for sslh initscript
# sourced by /etc/init.d/sslh
# Disabled by default, to force yourself
# to read the configuration:
# - /usr/share/doc/sslh/README.Debian (quick start)
# - /usr/share/doc/sslh/README, at "Configuration" section
# - sslh(8) via "man sslh" for more configuration details.
# Once configuration ready, you *must* set RUN to yes here
# and try to start sslh (standalone mode only)
RUN=yes
# binary to use: forked (sslh) or single-thread (sslh-select) version
# systemd users: don't forget to modify /lib/systemd/system/sslh.service
DAEMON=/usr/sbin/sslh
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --socks5 127.0.0.1:1080 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1195 --ssl 127.0.0.1:4433 --anyprot 127.0.0.1:8888 --pidfile /var/run/sslh.pid"
@
Мультиплексируемые в данном примере сервисы:
- Socks5 на 1080 порту
- SSH на 22
- OpenVPN на 1195
- SSL на 4433
- MTProto-proxy server на 8888
Осталось только перечитать файлы конфигурации Systemd, включить и запустить демон:
systemctl daemon-reload
systemctl enable sslh
systemctl start sslh