Как настроить проброс портов (проксирование) на TrueConf Server в Linux
Проброс портов, также трансляция портов – это технология, позволяющая настроить перенаправление трафика в сети по определённым правилам между различными парами «адрес:порт». Чаще всего её применяют на маршрутизаторе, чтобы по его внешнему IP получить доступ к хостам локальной сети, например, для подключения пользователей TrueConf Server снаружи сети. Но есть множество других ситуаций, в которых данная технология будет полезна.
Рассмотрим одну из них: необходимо с машины, на которой работает веб-сервер NGINX, пробросить порты на машину с развёрнутым TrueConf Server. За счёт этого мы повысим безопасность работы сервера видеосвязи – его внутренний IP-адрес будет скрыт за прокси.
В нашем примере прокси-машина будет управляться ОС Debian 11, на которой установлены следующие версии ПО:
- NGINX – 1.22.0;
- TrueConf Server – 5.0.3;
- firewalld – 0.9.3.
Настройка прокси-сервера
Сначала настроим NGINX в качестве прокси для веб-службы TrueConf Server. В нашей конфигурации он будет проксировать трафик, приходящий на стандартные HTTP и HTTPS порты: 80 и 443 соответственно. Если вы используете другие порты (как их поменять, смотрите в документации сервера), то укажите их в соответствующих строках в настройках ниже.
Настройка выполняется путём прописывания директив в конфигурационном файле. По умолчанию он называется nginx.conf и располагается в одном из следующих каталогов:
/etc/nginx
;/usr/local/nginx/conf
;/usr/local/etc/nginx
.
Директивы должны быть расположены внутри блока server { … }. Состоит настройка из следующих шагов:
- Задайте порты, которые будут прослушиваться – 80 и 443.
1234listen 80 default_server;listen [::]:80 default_server;listen 443 ssl default_server;listen [::]:443 ssl default_server; - Укажите пути к файлу SSL-сертификата и его ключа, чтобы настроить HTTPS-соединение у NGINX (Если у вас нет сертификата, вы можете сгенерировать его самостоятельно при помощи библиотеки OpenSSL). После этого настраивать HTTPS на TrueConf Server уже не нужно — шифрование трафика будет обеспечено прокси-сервером.
HTTPS нужен для работы TrueConf Server API. Без него вы не сможете получить токен OAuth2, необходимый для работы API.12ssl_certificate /etc/example/certificate.crt;ssl_certificate_key /etc/example/cert-key.key;
- Пропишите блок
location
с конфигурацией для проксирования.1234567location / {proxy_pass https://192.168.10.1:443;proxy_ssl_verify off;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;}В директиве
proxy_pass
укажите внутренний адрес TrueConf Server в вашей локальной сети, доступный хосту с NGINX. Благодаря этой директиве трафик, приходящий на ранее заданные порты, будет перенаправляться на указанный адрес. Помимо проксирования в этом блоке настраивается передача HTTP-заголовков и отключение верификации SSL-сертификата. - Если предполагается использовать подключение по WebRTC (через браузер), то с новой строки после предыдущего блока пропишите ещё один блок location с конфигурацией для проксирования WebSocket-запросов на порт 4309. Этот порт используется для передачи сигнального (то есть управляющего) трафика между сервером видеосвязи и браузерным клиентским приложением. Это позволит не нагружать веб-сервер обработкой лишнего трафика.
1234567location /websocket/ {proxy_pass http://127.0.0.1:4309/websocket/;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;}WebSocket-запросы должны проксироваться только через HTTP. В противном случае подключиться к конференции
будет невозможно.Конфигурация прокси-сервера Nginx завершена. Чтобы внесённые изменения вступили в силу, необходимо его перезапустить. Для этого в терминале под суперпользователем выполните команду:
1nginx -s reload
Настройка файервола
Помимо рассмотренных протоколов HTTP, HTTPS и WebSocket для всех возможностей видеосвязи Труконф могут использоваться протоколы, использующие другие порты, например:
- 4307 – основной и единственный необходимый TCP-порт для передачи медиаданных между TrueConf Server и TrueConf-клиентом;
- 554 – TCP-порт для работы по RTSP-протоколу;
- 1720 – TCP-порт для установки соединения с H.323-устройствами;
- 52000–52499 – TCP-порты для согласования параметров соединения по протоколу H.323;
- 5060 – порт TCP или UDP для инициализации соединения по протоколу SIP;
- 50000–51999 – UDP-порты для передачи медиапотоков по протоколам SIP/H.323.
В этом случае перенаправления HTTP/HTTPS-трафика через веб-сервер NGINX будет недостаточно. Настроить трансляцию остальных портов можно с помощью фаервола. Для примера воспользуемся пакетом firewalld:
su -
и введя root-пароль.- Сначала необходимо его установить:
1apt install firewalld - Затем разрешите обращение к NGINX командами:
12firewall-cmd --permanent --zone="public" --add-service=httpfirewall-cmd --permanent --zone="public" --add-service=httpsРасшифровка используемых параметров:
--permanent
– позволяет добавить настройку на постоянной основе, сохранив её после перезапуска ОС или файeрвола;--zone="public"
– устанавливает, к какой зоне будет применяться настройка;--add-service
– добавляет сервис к указанной зоне.
- Выполните команды для проброса TCP и UDP портов. Они могут настраивать проброс как одного порта, так и целого диапазона. Мы для примера покажем по одной команде каждого типа: одна будет пробрасывать 554 порт (для RTSP), вторая будет пробрасывать диапазон портов 50000-51999 (для SIP/H.323):
12firewall-cmd --permanent --zone="public" --add-forward-port=port=554:proto=tcp:toport=554:toaddr=192.168.10.1firewall-cmd --permanent --zone="public" --add-forward-port=port=50000-51999:proto=udp:toport=50000-51999:toaddr=192.168.10.1Аналогичными командами выполните проброс остальных необходимых портов.Расшифровка используемых параметров:
--add-forward-port
– позволяет пробросить порт с одной машины на другую;port
– задаёт пробрасываемый порт/диапазон портов;proto
– задаёт протокол передачи данных через порт;toport
– задаёт целевой порт;toaddr
– задаёт адрес машины, на которую пробрасываем исходный порт.
- Выполните команды, которые настроят подмену адреса проксируемой машины (с установленным TrueConf Server) на адрес прокси-сервера. Тем самым мы перенаправим входящий и исходящий трафик через прокси, скрыв реальный IP сервера видеосвязи. Список портов для протоколов TCP и UDP настраивается по отдельности, например:
12firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -m multiport --dports 4307,554,1720,5060,52000:52499 -j SNAT --to-source 192.168.10.2firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p udp -m multiport --dports 5060,50000:51999 -j SNAT --to-source 192.168.10.2Расшифровка используемых параметров:
--direct
– включает direct-синтаксис, позволяющий сделать более тонкую настройку (по сути это синтаксис пакета iptables);--add-rule
– позволяет добавить правило iptables;ipv4
– указываем, что настройка производится для трафика IPv4;nat
– включаем таблицу NAT;POSTROUTING
– включаем цепочкуPOSTROUTING;0
– приоритет задаваемого правила (0 — наивысший);POSTROUTING
– задаёт адрес машины, на которую пробрасываем исходный порт.-p tcp
– задаём сетевой протокол TCP;-p upd
– задаём сетевой протокол UDP;-m multiport
– включаем использование правилом нескольких портов;--dports
– список портов, на которых правило будет действовать;-j SNAT
– задаём действие, которое будет выполняться, если пакет подходит под описанное правило;--to-source 192.168.10.2
– указываем IP-адрес, на который будем подменять исходный (в нашем случае это IP-адрес прокси).
Проверка настроек
После того как настройка произведена, перезапустите firewalld, чтобы сохранить изменения:
1 |
firewall-cmd --reload |
Затем проверьте, применились ли настройки. Для этого необходимо в терминале выполнить точно такую же команду, как для проброса порта, только заменив --add-forward-port
на -–query-forward-port
. Например, чтобы проверить, проброшен ли 554 порт, выполните следующую команду:
1 |
firewall-cmd --permanent --zone="public" --query-forward-port=port=554:proto=udp:toport=554:toaddr=192.168.10.1 |
Если в консоль вывелось слово no
– это значит, что порт не проброшен. Причиной этому может быть то, что вы не прописали ключ --permanent
в соответствующей команде. Выполните команду в терминале снова, удостоверившись, что этот ключ присутствует.
Если же в консоль вывелось слово yes
– значит настройка проброса порта на машину с TrueConf Server успешно выполнена.