Маршрутизация WebRTC с использованием TURN без предоставления IP-адреса партнерам

Я ищу способ реализовать взаимодействие клиента с клиентом, чтобы одноранговые узлы не знали IP-адреса друг друга. Использование WebRTC с TURN (смотря на coturn) было бы идеальным для клиентов, уже поддерживающих протокол. Но, читая из спецификации TURN, он заявляет:

клиент ДОЛЖЕН включать атрибут XOR-PEER-ADDRESS и атрибут DATA. Атрибут XOR-PEER-ADDRESS содержит транспортный адрес узла, на который должны быть отправлены данные.

Таким образом, кажется, что протокол диктует наличие равноправного IP. Оптимально для меня этот атрибут может быть предоставленным (анонимным) ключом, который я мог бы сопоставить с IP на сервере TURN в таблице маршрутизации. Обновление таблицы маршрутизации будет обрабатываться сервером сигнализации.

Есть ли что-то подобное, поддерживающее такую ​​функциональность, или я должен сам планировать написание клиентов и функциональности TURN? В моем случае весь трафик, конечно, будет направляться через сервер TURN.

1 ответ

Решение

Пользователь coTURN и установить iceTransportPolicy возможность relay (глухой all), то peerConnection будет генерировать только relay candidates(TURN),
Таким образом, медиа будет течь только через сервер TURN.
А коллеги не будут знать IP удаленных пользователей (Reflex/Host).

Создать peerConnection как fllowing

var iceServers = [{"urls":["turn:TURN_IP:3478?transport=udp"],"username":"TURN_USERNAME","credential":"TURN_PASWD"}];
var config = {"iceServers": iceServers, "iceTransportPolicy": "relay"};
var constraints = [{"DtlsSrtpKeyAgreement": true}];
pc = new RTCPeerConnection(config, constraints);
Другие вопросы по тегам