Мультиплексирование соединений

Дата: 06.04.2016Метки:

Или как запустить программы одновременно на одном порту. Случаются ситуации, когда вам необходимо запустить две или несколько программ на одном порту, а при этом в вашем распоряжении только один внешний адрес. Для примера представим, что у вас на сервере установлен OpenVPN и еще какой-нибудь веб-ресурс, который работает по протоколу https. Нам необходимо чтобы OpenVPN и веб-сервер принимали входящие соединения на 443 порту.

Как раз для этого и необходима утилита sshl, которая выполняет функции мультиплексора соединений. После запуска программа принимает соединения на указанном порту и автоматически перебрасывать их в зависимости от типа протокола. Поддерживается широкий спектр протоколов, среди которых http, https, ssh, OpenVPN, tinc и xmpp.

Для установки sshl в Debian или Ubuntu достаточно выполнить команду:

apt-get install sshl

Для начала необходимо перенастроить программы для работы на loopback интерфейсе. Настройте OpenVPN на 1194 порт, а веб-сервер запустите на 443 порту. Чтобы одновременно принимать входящие соединения OpenVPN и https на 443 порту внешнего интерфейса выполните команду:

sshl --user nobody --listen external_ip:443 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443

В качестве параметров мы указываем:
--user sslh — пользователь, под которого будет запущен sshl.
--listen external_ip:443 — внешний адрес и порт.
--openvpn 127.0.0.1:1194 — адрес и порт для проброса OpenVPN.
--ssl 127.0.0.1:443 — адрес и порт для проброса https.

Для запуска sshl в режиме службы откройте файл:

nano /etc/default/sslh

И приведите его содержимое к следующему виду:

RUN=yes
STARTTIME=2
DAEMON_OPTS="--user nobody -p external_ip:443 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443 -P /var/run/sslh.pid"

Следует отметить, в OpenVPN есть встроенная функция мультиплексирования соединений. В настройках OpenVPN нужно использовать опцию port-share:

proto tcp
port 443
port-share 127.0.0.1 8443

Затем нужно запустить веб-сервер на интерфейсе 127.0.0.1:8443.