Назад | Перейти на главную страницу

Отправка прямого потока TCP RTMP через HAProxy

Мне нужна помощь, чтобы осознать это, возможно, я совершенно неправильно это понял и пошел неправильным путем. Возможно ли перенаправить входящие потоки RTMP через HAProxy на принимающий сервер? Как в - вместо доступа к доступному потоку RTMP на сервере за HAProxy, но отправьте поток RTMP через него на указанный сервер.

Я настроил сервер, который будет находиться на общедоступном IP-адресе и получать потоки реального времени RTMP, которые отправляются на него, и другой сервер, который находится в сети с ограниченным доступом, изолированной от прямого доступа из общедоступной сети (оба сервера видят друг друга поверх VPN). Все, что связано с потоковой передачей RTMP, работает нормально - я могу отправить поток RTMP обоим (конечно, при подключении к одной сети), но я не могу настроить HAProxy для пересылки моих потоков RTMP с общедоступного сервера на сервер, который изолирован от общедоступной сети. Я попытался временно отключить брандмауэры, чтобы убедиться, что проблема не в этом.

Серверы, используемые для приема потоков RTMP, - это NGINX, конфигурация HAProxy, которую я пробовал использовать, прежде чем отказаться от этой идеи, выглядит следующим образом:

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     1024
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    log                     global
    option                  tcplog
    option                  dontlognull
    retries                 6
    timeout queue           1m
    timeout connect         15s
    timeout client          1m
    timeout server          30s
    timeout check           10s
    maxconn                 256

listen rtmp-1935
    bind :1935
    mode tcp
    balance roundrobin
    server stream01 10.100.10.80:2000
    server stream02 10.100.10.80:2000

Краткое объяснение конфигурации - идея заключалась в том, чтобы поток RTMP приходил на общедоступный сервер через TCP-порт 1935, а затем перенаправлялся через HAProxy на другой сервер, который прослушивает потоки RTMP на TCP-порту 2000. Результат Конфигурация выше заключалась в том, что HAProxy будет принимать поток, но затем ничего не пересылать.

Вот журнал:

Apr 30 19:26:30 localhost haproxy[15972]: Proxy admin started.
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.164] admin admin/<STATS> 0/0/5 14887 LR 1/1/0/0/0 0/0
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.170] admin admin/<STATS> 0/0/361 14949 LR 1/1/0/0/0 0/0
Apr 30 19:27:58 localhost haproxy[15973]: 10.100.10.60:19398 [30/Apr/2018:19:27:58.531] admin admin/<NOSRV> -1/-1/288 212 SC 0/0/0/0/0 0/0
Apr 30 19:33:52 localhost haproxy[15973]: 10.100.10.60:19423 [30/Apr/2018:19:33:52.795] admin admin/<STATS> 0/0/6 15001 LR 1/1/0/0/0 0/0
Apr 30 19:33:53 localhost haproxy[15973]: 10.100.10.60:19423 [30/Apr/2018:19:33:52.801] admin admin/<NOSRV> -1/-1/333 212 SC 0/0/0/0/0 0/0
Apr 30 19:34:09 localhost haproxy[16211]: Proxy rtmp-1935 started.
Apr 30 19:34:09 localhost haproxy[16211]: Proxy admin started.
Apr 30 19:34:11 localhost haproxy[16212]: 10.100.10.60:19425 [30/Apr/2018:19:34:11.965] admin admin/<STATS> 0/0/7 14817 LR 1/1/0/0/0 0/0
Apr 30 19:34:12 localhost haproxy[16212]: 10.100.10.60:19425 [30/Apr/2018:19:34:11.973] admin admin/<NOSRV> -1/-1/355 212 SC 0/0/0/0/0 0/0

Я уже отказался от этой идеи и вернулся к простой отправке потоков RTMP, я решил оставить это здесь из любопытства, чтобы посмотреть, можно ли это сделать. Я не жду ответа.

Я вернулся и изучил это. Возникли проблемы, когда HAProxy не мог подключиться к удаленному серверу. Этот опубликованный ответ решил мою проблему: Отказано в разрешении на проверку работоспособности Haproxy. Оказывается, я не настраивал свой SE Linux для разрешения исходящих соединений HA Proxy (что странно, потому что я могу поклясться, что у меня был SE Linux и все брандмауэры ненадолго отключены, когда я тестировал его в последний раз, и он все еще не удался).

Это должно было работать нормально. Я сделал это.

Согласно вашим журналам, ваш состояние сеанса при отключении является SC.

S: сеанс TCP был неожиданно прерван сервером или сервер явно отказался от него.

C: прокси ожидал установления ПОДКЛЮЧЕНИЯ на сервере. В лучшем случае сервер мог заметить попытку подключения.

Все указывает на то, что ваш внутренний сервер вообще не принимает TCP-соединения через порт 2000. Тестирование подключения от HAProxy с telnet или nc должно было вернуть Connection refused.