I need some help wrapping my head around this, perhaps I've completely misunderstood this and have gone the wrong way. Is it not possible to forward incoming RTMP streams over HAProxy to a receiving server? As in - instead of accessing an available RTMP stream on a server behind HAProxy, but send an RTMP stream through it to the said server.
I have set up a server to sit on a public IP address and receive RTMP live streams that are sent to it and another server that sits in a limited-access network, isolated from direct access from the public web (both servers see each other over VPN). Everything related to RTMP streaming is working just fine - I can send an RTMP stream to both (when connected to the same network of course) but I'm unable to configure HAProxy to forward my RTMP streams from the public facing server to the server that's isolated from the public web. I tried disabling firewalls temporary to check that was not the issue.
Servers used for reciving RTMP streams are NGINX, the HAProxy config that I tried using before abandoning the idea is as follows:
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
Some quick explanation of the config - the idea was for an RTMP stream to arrive on the public facing server on TCP port 1935, and then get forwarded over HAProxy to the other server, which is listening for RTMP streams on TCP port 2000. The result of the config above was that HAProxy would pick up the stream but then not forward anything.
Here's a log:
Apr 30 19:26:30 localhost haproxy: Proxy admin started. Apr 30 19:27:58 localhost haproxy: 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: 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: 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: 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: 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: Proxy rtmp-1935 started. Apr 30 19:34:09 localhost haproxy: Proxy admin started. Apr 30 19:34:11 localhost haproxy: 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: 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
I have already given up on this idea and reverted to just pushing RTMP streams, I figured I'd leave this here out of curiosity to see if this could be done. I'm not expecting this to be answered.