Или как запустить программы одновременно на одном порту. Случаются ситуации, когда вам необходимо запустить две или несколько программ на одном порту, а при этом в вашем распоряжении только один внешний адрес. Для примера представим, что у вас на сервере установлен 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
.