iceConnectionState отключен (при использовании через Интернет)

Этот вопрос задавали раньше, но я пока не нашел ответа. У меня в основном та же проблема, что описана здесь и здесь.

Я пытаюсь установить соединение webRTC с помощью PeerJS. Он безупречно работает в локальной сети, но я не могу заставить его работать через Интернет. Я использую coturn в качестве сервера TURN, но пока это не решило проблему. Консоль Chromium выводит на экран следующее:

PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Received remote stream
peer.js:1476 PeerJS:  Receiving stream MediaStream
peer.js:1476 PeerJS:  Created answer.
peer.js:1476 PeerJS:  Set localDescription: answer for: client1
3peer.js:1476 PeerJS:  Received ICE candidates for: client1
3peer.js:1476 PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1
peer.js:1476 PeerJS:  Cleaning up PeerConnection to client1
2peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1

Одноранговый объект, который я использую, выглядит так:

var peer = new Peer(
    GetURLParameter('id'),
    { key: peerKey, debug: peerDebug},
    {config:
        { 'iceServers': [
            { url: 'stun:[server ip here]:3478'},
            { url: 'turn:[server ip here]:3478'}
        ]}
    }
);

coturn при запуске Turnserver с помощью turnserver -L [ip-адрес сервера] выводит следующее:

0: Relay address to use: [server ip here]
0: pid file created: /var/run/turnserver.pid
0: IO method (main listener thread): epoll (with changelist)
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
0: Wait for relay ports initialization...
0:   relay [server ip here] initialization...
0:   relay [server ip here] initialization done
0: Relay ports initialization done
0: IO method (general relay thread): epoll (with changelist)
0: turn server id=0 created
0: IPv4. UDP listener opened on: [server ip here]:3478
0: IPv4. TCP listener opened on : [server ip here]:3478
0: Total UDP servers: 1
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)

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

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

У кого-нибудь есть идея, как заставить эту вещь работать? Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ. Оказалось, что мой JSON для конфигурации TURN был беспорядочным. Мой новый одноранговый объект теперь выглядит так:

var peer = new Peer(
    GetURLParameter('id'), {
        key: peerKey,
        debug: peerDebug,
        config: {
            'iceServers': [
                { url: 'stun:[server ip]:3478'},
                { url: 'turn:[server ip]:3478'}
            ]
        }
    }
);

Это дает мне гораздо больше отзывов о сервере TURN (так что я думаю, что иду в правильном направлении), но, тем не менее, проблема сохраняется.


РЕДАКТИРОВАТЬ2: Это становится довольно странным. Кажется, это какая-то проблема совместимости между браузерами. Используя инструмент тестирования сервера TURN, предложенный mido, я получаю в Firefox другие результаты, чем в Chromium. Я собираюсь использовать Chromium, потому что его режим киоска очень пригодится для моего приложения. Но вернемся к серверу очереди. В Firefox при использовании учетных записей пользователей все работает нормально: Результат тестовой страницы github:

0.004   1   host    0   UDP 192.168.178.28  39919   126 | 32512 | 255
0.005   2   host    0   UDP 192.168.178.28  56123   126 | 32512 | 254
0.076   1   srflx   1   UDP 178.39.74.108   39919   100 | 32543 | 255
0.077   1   relay   2   UDP [Server IP ]    52147   5 | 32543 | 255
0.098   2   srflx   1   UDP 178.39.74.108   56123   100 | 32543 | 254
0.099   2   relay   2   UDP [Server IP ]    60002   5 | 32543 | 254
0.099   Done

Однако, разрешая анонимный доступ к серверу TURN и пытаясь войти без имени пользователя и пароля, ничего не происходит.

Другая история в Chromium: при вводе имени пользователя и пароля происходит следующее:

0.002   1   host    138421141   udp 192.168.178.28  42343   126 | 30 | 255
0.002   2   host    138421141   udp 192.168.178.28  49001   126 | 30 | 254
0.028   1   srflx   842163049   udp 178.39.74.108   42343   100 | 30 | 255
0.049   2   srflx   842163049   udp 178.39.74.108   49001   100 | 30 | 254

... пока терминал на сервере TURN снова и снова распечатывает сообщение об ошибке 401. Мне кажется, что учетные данные никогда не доходят до сервера при использовании хрома. В сообщении об ошибке 401 указано пустое имя пользователя.

Я действительно мог бы использовать Chromium для этого. Кто-нибудь знает, как заставить это работать?


person DinuTheHuman    schedule 19.06.2016    source источник
comment
для начала, где вы размещаете свой сервер поворота, есть ли у него общедоступный IP-адрес?   -  person mido    schedule 20.06.2016
comment
Я использую виртуальный сервер на базе Ubuntu (они называют его каплей) на digitalocean.com. Я могу пинговать его отсюда, так что, думаю, да, у него публичный ip.   -  person DinuTheHuman    schedule 20.06.2016
comment
можете ли вы проверить, работает ли TURN независимо, проверьте эту ссылку, и обычно, в свою очередь, люди предоставляют пароль для имени пользователя, они отсутствуют в вашей конфигурации TURN   -  person mido    schedule 20.06.2016
comment
Вы переключали сети? Peerjs плохо работает, когда вы переключаете сети.   -  person Akil    schedule 21.06.2016
comment
Спасибо за ссылку, мидо. Я проведу несколько тестов и сообщу о результатах. Похоже на полезный инструмент. @Akil: Что ты имеешь в виду под переключением сетей (честно говоря, я не очень хорошо разбираюсь в том, что делаю ...)? Я привязываю, чтобы установить соединение от моего DSL-соединения дома к Raspberry Pi по 4G / LTS-соединению. Спасибо за вашу помощь, софар!   -  person DinuTheHuman    schedule 22.06.2016
comment
Я спрашивал, использовали ли вы сначала одну сеть, а затем изменили сеть на 3G и т. Д. С Wi-Fi.   -  person Akil    schedule 22.06.2016
comment
Ах, теперь я понял. Я сделал это первым, но остановился, когда у меня возникли конфликты с повторным использованием одного и того же идентификатора узла. Я не переключал сети в недавних тестах.   -  person DinuTheHuman    schedule 23.06.2016
comment
Я провел обширное тестирование с помощью инструмента mido, при условии, что получаю разные результаты в разных браузерах. Подробнее см. EDIT2 в моем вопросе.   -  person DinuTheHuman    schedule 27.06.2016


Ответы (1)


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

person Jeet Swami    schedule 20.06.2016
comment
Во время тестирования я отключил брандмауэр на сервере, вызвав ufw disable. Я думаю, это должно позаботиться о брандмауэре. Но спасибо за подсказку. - person DinuTheHuman; 22.06.2016
comment
То же самое, даже если брандмауэр отключен. - person Daniel Cheung; 13.10.2020