首页 文章

什么时候需要TURN?对称NAT和端口限制NAT

提问于
浏览
3

我偶然发现:“唯一需要TURN的时候是其中一个对等体在对称NAT后面而另一个对等体在对称NAT或端口限制NAT之后 . ”那么对称NAT后面的对等体怎么能连接另一个后面,例如全锥形NAT?

例如,让对称NAT后面的对等体为A,而完全锥形NAT后面的对等体为B.调用过程应该是这样的:

  • A从STUN(无TURN)服务器发现其本地地址和端口(Al:Alp)映射到服务器自反值(As:Asp),这应该只在A和STUN服务器之间有意义,因为它是对称NAT . (对?)

  • 类似地,B发现它的Bl:Blp被映射到Bs:Bsp .

  • A发送INVITE中的SIP INVITE和SDP部分告诉使用As:Asp接收媒体 .

  • B回复200 OK,使用Bs:Bsp接收媒体 .

  • 媒体启动,A发送到B.注意,因为它's symmetric NAT, a new port will be created by NAT, so the packet will be As:Asp' - > Bs:Bsp(其中Asp ' is the newly created port). The NAT in B' s侧将传递数据包(因为它's full cone) and B will get A'的媒体 .

  • 从SIP / SDP,B知道使用As:Asp将媒体发送到A,这将被丢弃在A的对称NAT中,对吧?

请检查我是否正确理解了这些步骤 . 那么A(在对称NAT后面)如何与B进行通信(在完整锥形或地址限制锥体后面)?

谢谢 .

1 回答

  • 4

    正如您所理解的那样,在您的用例中仅使用STUN两端将最终进行单向音频呼叫:A能够向B发送音频 .

    您知道如果A可以发送到B,那么反向路径也是可用的 .

    以下是B的情况:

    * RTP packets are sent to As:Asp
    * RTP packets are received from As:Asp'
    * B can read the origin of RTP packets with "recvfrom"
    

    B的一种非常简单的方法是比较来自SDP的IP:PORT和来自RTP分组的IP:PORT' . 除了它引入的安全问题之外,如果B切换到IP:PORT',A将从B接收RTP并且您最终进行双向音频呼叫:这种技术被许多软件使用并且经常被称为“对称RTP” .

    同样,这不是一种合规的方式 . 它可能会引入ALG问题,只有在发件人使用相同的套接字进行发送和接收时才有效 . (99%的用例) . 它也被认为是一个安全问题,因为“中间人”可能会向您发送RTP数据包,您将开始与他交谈......

    rfc6336定义的ICE正在提供解决方案 . STUN连接检查将通过RTP路径进行交换 . B将收到一个STUN连接检查,该检查应该来自As:Asp但来自As:Asp ': the STUN connectivity check is authenticated as coming from A. This new 388212 (see ICE for definition) should be added to the list of possible candidate (a new RTP path) and will be validated/authenticated by both A and B again. In theory, it'再次通过信令协议进行交换 . (在实践中,即使没有再次交换新候选人,它也可以工作......)

    因此,使用ICE,将学习,验证,确认和使用RTP路径As:Asp' - Bs:Bsp!

相关问题