Streaming : failed to connect to the server - dual stack IPv4 and IPv6 doesn't supported

kallsu

New Member
Hi,

Problem:
I am here to refresh the theme of the "failed to connect to the server" when you try to stream ( at least on Facebook, Twitch or Youtube ).

Context:

Operative System
Code:
$> cat /etc/debian_version
10.9

Interface Configuration
Code:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.24  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 2001:fb1:ec:40f1:a8a3:64e0:fef5:defb  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::d4b9:c538:51b1:3e27  prefixlen 64  scopeid 0x20<link>
        ether 84:a6:c8:77:33:82  txqueuelen 1000  (Ethernet)

Routing table
Code:
~$> ip -4 r s
default via 192.168.10.1 dev wlp2s0 proto dhcp metric 600
default dev enp14s0 scope link metric 1002 linkdown 
169.254.0.0/16 dev enp14s0 proto kernel scope link src 169.254.9.47 linkdown 
192.168.10.0/24 dev wlp2s0 proto kernel scope link src 192.168.10.24 metric 600 

~$> ip -6 r s
::1 dev lo proto kernel metric 256 pref medium
2001:fb1:ec:40f1::/64 dev wlp2s0 proto ra metric 600 pref medium
fe80::/64 dev wlp2s0 proto kernel metric 600 pref medium
default via fe80::1 dev wlp2s0 proto ra metric 600 pref medium

DNS server
Code:
~$> cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.10.1
nameserver 2001:fb0:100::207:29
nameserver 2001:fb0:100::207:49

Tests
Code:
~$> ping google.com
PING google.com(kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e)) 56 data bytes
64 bytes from kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e): icmp_seq=1 ttl=109 time=30.2 ms
64 bytes from kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e): icmp_seq=2 ttl=109 time=34.5 ms
64 bytes from kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e): icmp_seq=3 ttl=109 time=34.5 ms
64 bytes from kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e): icmp_seq=4 ttl=109 time=32.3 ms
64 bytes from kul08s10-in-x0e.1e100.net (2404:6800:4001:80e::200e): icmp_seq=5 ttl=109 time=33.2 ms

~$> ping -6 google.com
PING google.com(kul08s09-in-x0e.1e100.net (2404:6800:4001:806::200e)) 56 data bytes
64 bytes from kul08s09-in-x0e.1e100.net (2404:6800:4001:806::200e): icmp_seq=1 ttl=111 time=28.6 ms
64 bytes from kul08s09-in-x0e.1e100.net (2404:6800:4001:806::200e): icmp_seq=2 ttl=111 time=32.7 ms
64 bytes from kul08s09-in-x0e.1e100.net (2404:6800:4001:806::200e): icmp_seq=3 ttl=111 time=55.4 ms

Of course, I tried to go under Settings -> Advanced Settings -> Bind to IP

I tried every permutation, and the result was the same.

Solution

I have to disable the IPv6 and the dual stack. It is a bit hard for newbie and intermediate, so prepare yourself ...

1. Configure your Router to bind the DHCP from lease the IPs from a certain range 192.168.10.50/24, excluding the 192.168.10.23/24 that was mine
2. Configure static IP address on your PC, in Debian

Code:
~$> vim /etc/network/interfaces

auto eth0
iface eth0 inet static
        address 192.168.10.23/24
        gateway 192.168.10.1/24

Debian WIki here

3. Add manually the DNS to your configuration

Code:
~$> vim /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver <put one near to you>

Exclude in any way the DNS of your Internet provider especially if they are using a Windows DNS Server.

> Why ?
> It will be more slow (at least mine) than Google or other Public DNS and when there is the resolution of the name, the protocol acts as "multicast" : request to all, and have at least a quorum of 2 with a timeout.
> Here we are on streaming, so less latency we have better is.

4. Routing

Code:
~$> route add defaut gw 192.168.10.1 dev eth0

5. Troubleshooting ( configuration validation )

5.1 Ping google.com. If it works, than IT WORKS !
5.2 Refresh the routing table typing `route` command ( can wait a bit of time )
5.3 Ping your DNS IP. If it works repeat the test to ping google.com, than IT WORKS! otherwise or the default route is not configured or your router doesn't forward connections from IP outside the DHCP range
5.4 Open OBS and restore the selection of the Bind by IP to "Default"

Now should works.

If it doesn't you have to resolve the problem at connection layer and not on the software layer.

I hope to be helpful !

For the OBS-Developer:
1. Add a new option on the layout to say "Default IPv4" or "Default IPv6"
2. If point 1 is not possible, you have to resolve the issue on the code, realizing a network checker and exclude one stack per time. Unfortunately I don't know too much the C or C++ projects to show you where you can copy this module.

Thanks
 
Top