Установка TURN-сервера в Ubuntu для WebRTC

Как я могу установить сервер TURN на свой ubuntu 12.04? Вы можете поделиться учебником? Я прочитал это руководство: Реализация нашего собственного сервера STUN / TURN для WebRTC Приложение. Но чего я не понимаю, так это как я могу установить собственный сервер TURN на свой ubuntu 12.04?

В настоящее время я использую что-то вроде следующего кода для создания RTCPeerConnection

const pc_config = {"iceServers": [{"url": "stun:stun.l.google.com:19302"},
  {"url":"turn:my_username@<turn_server_ip_address>", "credential":"my_password"}]};

const pc_new = new webkitRTCPeerConnection(pc_config);

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

Когда я хочу установить сервер поворота, я получаю

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package resiprocate-turn-server

Я использовал apt-get install resiprocate-turn-server. Я также использовал этот https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html учебное пособие.


person Dvlpr    schedule 28.08.2014    source источник
comment
это показывает минимальные усилия при попытке установить простой сервер поворота ....   -  person Benjamin Trent    schedule 01.09.2014


Ответы (5)


его легко установить на Linux-машины, в отличие от других операционных систем.

простой способ:

sudo apt-get install coturn

Если вы скажете «нет», мне нужна последняя передовая технология, вы можете загрузить исходный код с их страницы загрузок в установке самостоятельно, например:

sudo -i     # ignore if you already in admin mode
apt-get update && apt-get install libssl-dev libevent-dev libhiredis-dev make -y    # install the dependencies
wget -O turn.tar.gz http://turnserver.open-sys.org/downloads/v4.5.0.3/turnserver-4.5.0.3.tar.gz     # Download the source tar
tar -zxvf turn.tar.gz     # unzip
cd turnserver-*
./configure
make && make install 

пример команды для запуска сервера TURN:

sudo turnserver -a -o -v -n  --no-dtls --no-tls -u test:test -r "someRealm"

описание команды:

  • -a - Использовать механизм долгосрочных учетных данных
  • -o - запустить серверный процесс как демон
  • -v - «Умеренный» подробный режим.
  • -n - нет файла конфигурации
  • --no-dtls - Не запускать слушателей DTLS
  • --no-tls - не запускать слушателей TLS
  • -u - учетные данные пользователя, которые будут использоваться
  • -r - область по умолчанию, которая будет использоваться, требуется TURN REST API

проверьте эту wiki для получения дополнительных сведений и конфигураций.

теперь вы можете использовать сервер TURN в своем приложении WebRTC как:

var peerConnectionConfig = {
  iceServers: [{
    urls: YOUR_IP:3478,
    username: 'test',
    password: 'test'
  }]
}
person mido    schedule 18.05.2016
comment
Можно ли работать с TCP? Или это только работа для UDP. - person sureshkumar; 03.06.2017
comment
да, можно работать только с TCP, но боюсь, что производительность может быть плохой - person mido; 05.06.2017
comment
Спасибо за отличное решение. Я получаю эту ошибку в mozilla firefox uncaught exception: buildPeerConnection failed, call not completed Я использую easyRTC. Вы можете мне помочь? - person Hassaan; 04.05.2018
comment
Чтобы пропустить проблему с IPv6, введите IP-адрес сервера. У меня это сработало как шарм: turnserver -L <Your IP> -a -o -f -n --no-dtls --no-tls -u username:password -r yourdomain.com - person Khalil Laleh; 10.01.2019
comment
Я следил за этим процессом в одном из моих экземпляров EC2 и обнаружил, что сервер TURN работает нормально. Но в другом экземпляре EC2 я тоже выполнил эти шаги, но он не работает при тестировании через webrtc.github.io/samples/src/content/peerconnection/trickle-ice Здесь я должен упомянуть, что оба EC2 работают на Ubuntu 16.04, и все входящие и исходящие порты или конфигурация одинаковы. Не понимаю. Может ли кто-нибудь подсказать, как я могу разобраться в проблеме? Я попытался удалить и переустановить, но ничего не работает. - person Mushfiqur Rahman; 25.01.2019
comment
Я хочу включить поддержку SSL-сертификатов с помощью этой команды. Не могли бы вы помочь мне с этим? - person Hassaan; 21.03.2019
comment
Он по-прежнему возвращает 401 несанкционированную ошибку, он работает! Любая идея? - person ishan shah; 07.04.2020

На своем сервере ubuntu установите, настройте и запустите упакованную версию coturn. Для базовой настройки выполните

# set up
sudo apt-get install --assume-yes coturn

# configure & run
USERNAME="some-username"
PASSWORD="some-password"
PORT=3478

# -n: use only commandline parameters, no config file
sudo turnserver \
    -n \
    --verbose \
    --lt-cred-mech \
    --user $USERNAME:$PASSWORD \
    --realm "someRealm" \
    --no-dtls \
    --no-tls \
    --listening-port $PORT

Добавьте --daemon, чтобы он работал в фоновом режиме. См. Список на https://github.com/coturn/coturn/wiki/turnserver. параметров turnserver и просмотрите их пример конфигурационного файла, если вы хотите использовать его с -c CONFIGFILE вместо использования -n и передачи всех параметров в командной строке, как я сделал выше.

Чтобы проверить, что это работает, в Google Chrome, находясь на любой странице с безопасным источником (например, stackoverflow.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);
    };
  });   
}

const USERNAME="some-username"
const PASSWORD="some-password"
const PORT=3478
const IP="10.11.0.115" // you will have to change this

console.log('TURN server reachable on TCP?', await checkTURNServer( {
    url: `turn:${IP}:${PORT}?transport=tcp`,
    username: USERNAME,
    credential: PASSWORD,
}))

console.log('TURN server reachable on UDP?', await checkTURNServer( {
    url: `turn:${IP}:${PORT}?transport=udp`,
    username: USERNAME,
    credential: PASSWORD,
}))

Ты должен получить

TURN server reachable on TCP? true
TURN server reachable on UDP? true
person masterxilo    schedule 19.09.2018
comment
У меня сработало, спасибо :-). Боковое примечание: если ваш сервер отображается как недоступный, проверьте, не блокирует ли брандмауэр вашего сервера порт. - person Kira; 30.03.2020
comment
Требуется обновление, не работает на firefox. TurnConfig теперь принимает urls arary вместо url: urls: [turn:${IP}:${PORT}?transport=tcp] - person songz; 04.10.2020

Думаю, руководство несколько устарело.

Взгляните на этот TURN-сервер Google с открытым исходным кодом.
Действительно простой в установке и очень хорошо работает.
https://code.google.com/p/rfc5766-turn-server/

person 9dan    schedule 28.08.2014
comment
Теперь это наследие - person Ali Bahrami; 17.06.2019

Эта ссылка предоставит всю информацию об установке и настройке сервера TURN.

https://www.webrtc-experiment.com/docs/TURN-server-installation-guide.html

У парня очень хороший репозиторий для демонстраций WebRtc.

person Mhadonis    schedule 20.07.2018

Включите установку сервера

изменить пакет в соответствии с вашим сервером

wget http://turnserver.open-sys.org/downloads/v3.2.4.4/turnserver-3.2.4.4-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

tar -zxvf turnserver-3.2.4.4-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz

wget http://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

tar -zxvf libevent-2.0.21-stable.tar.gz

cd libevent-2.0.21-stable/

./configure

make && make install

dpkg -i rfc5766-turn-server_3.2.4.4-1_amd64.deb

cd /etc/

vi turnserver.conf

Добавьте следующее, чтобы включить server.conf

listening-device=eth0
listening-ip=YOUR_IP_HERE
listening-port=3478
userdb=turnuserdb.conf
relay-device=eth0
realm=YOUR_REALM_IP_HERE
lt-cred-mech
log-file=/var/log/turnserver.log

Добавьте имя пользователя и пароль в turnuserdb.conf

 vi turnuserdb.conf

в следующем формате

testuser:pass0wrd

Чтобы запустить Turn Server:

sh /data/start_turn_server.sh

Чтобы добавить нового пользователя поворота:

sh /data/ addTurnUser.sh

Чтобы узнать, работает ли Turn Server:

ps aux | grep –I turn

Приведенная выше команда должна перечислить некоторые процессы как сервер поворота, если сервер TURN работает правильно.

person Chathura Wijesinghe    schedule 14.07.2018