webrtc не работает с публичными кандидатами за конус NAT - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь установить соединение webrtc без TURN, полагаясь только на открытых кандидатов, сгенерированных с помощью STUN. Я точно знаю, что не нахожусь за симметричным NAT (конфигурация NAT указывает, что выбрана опция «конус», и несколько серверов STUN возвращают только одного кандидата srflx). Однако соединение работает только с локальными кандидатами в "хост": оно никогда не завершается при отправке только кандидата srflx.

Например, при попытке установить соединение из двух экземпляров Firefox (61.0.1) генерируются следующие кандидаты:

Для пира 1 (хром):

//candidates : 

{
    candidate: "candidate:2901037939 1 udp 2113937151 192.168.8.10…typ host generation 0 ufrag uULA network-cost 999", 
    sdpMid: "data", 
    sdpMLineIndex: 0
}
{
    candidate: "candidate:842163049 1 udp 1677729535 37.165.113.24…rt 49634 generation 0 ufrag uULA network-cost 999", 
    sdpMid: "data", 
    sdpMLineIndex: 0
}

// offer : 
{
    type: "offer", 
    sdp: "v=0\r\no=- 3440436079674081695 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE data\r\na=msid-semantic: WMS\r\nm=application 9 DTLS/SCTP 5000\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:XbgU\r\na=ice-pwd:Ngovdg70hkv5UxqBc5ahwGK6\r\na=ice-options:trickle\r\na=fingerprint:sha-256 28:5C:BA:DA:3F:26:77:7F:CF:B8:DD:C7:2D:50:D5:1A:9B:9E:92:82:A1:BB:67:A8:A4:E2:E1:24:99:18:C4:AF\r\na=setup:actpass\r\na=mid:data\r\na=sctpmap:5000 webrtc-datachannel 1024\r\n"
}

А для пира 2 (firefox):

// candidates : 
{
  "candidate": "candidate:0 1 UDP 2122252543 192.168.8.100 60051 typ host",
  "sdpMid": "sdparta_0",
  "sdpMLineIndex": 0
}
{
  "candidate": "candidate:3 1 TCP 2105524479 192.168.8.100 9 typ host tcptype active",
  "sdpMid": "sdparta_0",
  "sdpMLineIndex": 0
}
{
  "candidate": "candidate:1 1 UDP 1686052863 37.165.113.249 30533 typ srflx raddr 192.168.8.100 rport 60051",
  "sdpMid": "sdparta_0",
  "sdpMLineIndex": 0
}

//offer :
{
    type: "answer", 
    sdp: "v=0
         o=mozilla...THIS_IS_SDPARTA-61.0.1 7989295655383581196 0 IN IP4 0.0.0.0
         s=-
         t=0 0
         a=fingerprint:sha-256 6C:22:EB:6D:E2:89:DC:31:47:11:51:37:50:CD:69:AB:0D:2B:0C:60:18:64:B4:A9:3E:91:A4:0B:65:66:0F:F3
         a=group:BUNDLE data
         a=ice-options:trickle
         a=msid-semantic:WMS *
         m=application 9 DTLS/SCTP 5000
         c=IN IP4 0.0.0.0
         a=sendrecv
         a=ice-pwd:070d6d084143c347bbf0b1fd4d90f9a5
         a=ice-ufrag:b7ff4cf2
         a=mid:data
         a=sctpmap:5000 webrtc-datachannel 256
         a=setup:active
         a=max-message-size:1073741823
         "
}

При отправке только кандидатов в HOST это работает (RTCPeerConnection.ondatachannel запускается с функциональным каналом данных), но когда я отправляю только кандидатов "SRFLX" (с удаленным публичным адресом), канал данных никогда не генерируется.

Что я должен искать, чтобы решить эту проблему, без сервера TURN?

Спасибо

...