ReTurn Server (resiprocate) не отвечает, ошибка конфигурации?

Я установил повторный возвратный сервер на rhel7 в соответствии с этими инструкциями, а именно под номером 2: https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html

Я установил следующее:

TurnAddress = 172.31.40.178
AltStunAddress = 172.31.40.179
TurnPort = 3478
AltStunPort = 5349

Первый и второй IP-адреса настроены и могут быть пропингованы, это вывод ifconfig:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.40.178  netmask 255.255.240.0  broadcast 172.31.47.255
        inet6 fe80::45e:20ff:fe6b:6869  prefixlen 64  scopeid 0x20<link>
        ether 06:5e:20:6b:68:69  txqueuelen 1000  (Ethernet)
        RX packets 5100789  bytes 890198603 (848.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4742159  bytes 3984379336 (3.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.40.179  netmask 255.255.240.0  broadcast 172.31.47.255
        ether 06:5e:20:6b:68:69  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 460812  bytes 163626411 (156.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 460812  bytes 163626411 (156.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

и порты открыты.

Выходные данные netstat для возврата:

tcp        0      0 172.31.40.178:3478      0.0.0.0:*
LISTEN      17177/reTurnServer
tcp        0      0 172.31.40.178:5349      0.0.0.0:*
LISTEN      17177/reTurnServer
tcp6       0      0 :::3478                 :::*
LISTEN      17177/reTurnServer
tcp6       0      0 :::5349                 :::*
LISTEN      17177/reTurnServer
udp        0      0 172.31.40.179:3478      0.0.0.0:*
         17177/reTurnServer
udp        0      0 172.31.40.178:3478      0.0.0.0:*
         17177/reTurnServer
udp        0      0 172.31.40.179:3479      0.0.0.0:*
         17177/reTurnServer
udp        0      0 172.31.40.178:3479      0.0.0.0:*
         17177/reTurnServer
udp6       0      0 :::3478                 :::*
         17177/reTurnServer

Я установил хешированные пароли и использовал свое доменное имя, например. test.example.com как область.

Когда я пытаюсь подключиться к серверу терн, это не удается. Я использую следующий код для проверки соединения с правильными именем пользователя и паролем, и он всегда выводит "нет":

function checkTURNServer(turnConfig, timeout){ 

  return new Promise(function(resolve, reject){

    setTimeout(function(){
        if(promiseResolved) return;
        resolve(false);
        promiseResolved = true;
    }, timeout || 5000);

    var promiseResolved = false
      , myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection   //compatibility for firefox and chrome
      , pc = new myPeerConnection({iceServers:[turnConfig]})
      , noop = function(){};
    pc.createDataChannel("");    //create a bogus data channel
    pc.createOffer(function(sdp){
      if(sdp.sdp.indexOf('typ relay') > -1){ // sometimes sdp contains the ice candidates...
        promiseResolved = true;
        resolve(true);
      }
      pc.setLocalDescription(sdp, noop, noop);
    }, noop);    // create offer and set local description
    pc.onicecandidate = function(ice){  //listen for candidate events
      if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1))  return;
      promiseResolved = true;
      resolve(true);
    };
  });   
}

checkTURNServer({
            'url': 'turn:test.*****.com:3478',
            'credential': 'password',
            'username': 'username'
}).then(function(bool){
    console.log('is TURN server active? ', bool? 'yes':'no');
}).catch(console.error.bind(console));

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

Большое спасибо.

1 ответ

Решение

172.31.40.178 находится в диапазоне частных IP-адресов. Это означает, что вы запускаете STUN и TURN из-за NAT. Ничего страшного в этом нет, при условии, что вы позволили соответствующим образом перенаправлять порты 3478, 3479 и 5349 (UDP и TCP) на ваш сервер.

Вы оставили достаточно вопросов в своем вопросе, чтобы предположить, что ваш сервер работает на Amazon EC2. В этом случае переадресация портов настраивается группой безопасности экземпляра EC2. Для группы безопасности, связанной с этим экземпляром, включите набор входящих правил для UDP и TCP, которые разрешают порты 3478,3479 и 5349 для диапазона IP-адресов 0.0.0.0/0. Также проверьте свою группу безопасности VPC и настройку ACL для сети, но они по умолчанию обычно широко открыты.

В противном случае, если вы не находитесь на Amazon, ваш хостинг-провайдер или локальный NAT должны иметь возможность перенаправлять эти порты на IP-адрес сервера.

Кроме того, дважды проверьте, чтобы убедиться, что ваши правила IPTable, если они включены, не блокируют трафик.

Другие вопросы по тегам