我已经查看了openfire中的STUN服务器设置,并从那里得到了这句话:
“为了充当STUN服务器,需要在同一台机器上使用两个不同的公共IP地址,以及每个IP的两个不同的端口号。”
我在google上进行了研究,一般来说,昏昏欲睡的服务器需要两个公共IP,原因是什么?
答案 0 :(得分:13)
为了尝试建立P2P连接,STUN绑定请求和对STUN服务的主要地址(IP和端口)的响应才是真正重要的。在此请求的响应正文中返回的映射地址(通过XMPP或其他服务)传递到本地客户端尝试与之建立直接通信的远程节点。
STUN服务侦听的第二个IP和端口对于确定NAT端口映射行为和NAT过滤行为很有用。
通过对服务上的备用IP:端口发出绑定请求,客户端可以发现其NAT是否具有本地端口的一致映射语义。如果他为每个测试获得不同的端口映射值,客户端可以断定它是“对称NAT”的背后 - 这是最难以遍历的P2P。
通过发送带有“更改请求”属性的绑定请求,该属性要求服务从其他IP或端口进行响应,客户端可以检测他的NAT是否仅根据IP和端口过滤来自远程主机的数据报,或允许对于来自主机上备用端口的数据报,它已将出站数据报发送到。
映射行为和过滤测试仅为后续P2P连接提供有限的信息。在确定主机和因特网之间的对称NAT的情况下,一些实现可以观察到NAT在每个绑定响应中具有端口值的一致增量值。 (例如,STUN服务观察到的外部端口增加1)。因此,客户端可以为远程客户端提供IP和猜测的端口号,以尝试发送而不是从第一个绑定请求映射回来的端口号。或者客户端可以使用此行为/过滤测试进行日志记录。或者在对称NAT的情况下自动分配中继。
答案 1 :(得分:11)
因为在极少数情况下,NAT转换的行为是目标IP地址的函数。意思是,你必须“ping”两个不同的IP地址才能找到NAT的精确行为(它是否取决于目标IP地址?)
如果你用两个不同的端口“ping”两次相同的服务器,那么就不能正确地覆盖这种情况(即,你不会覆盖所有的基础)。
P.S。:两个IP地址不需要在同一台服务器上,也可以是不同的服务器。
答案 2 :(得分:1)
我猜测需要识别正在执行的NAT类型 - 某些NAT将使用相同的源IP地址,并通过端口号对会话ID进行编码(我认为它称为锥形NAT但不确定),一些NAT将使用源IP和端口的组合来编码会话ID。根据NAT类型,STUN服务器需要给客户端的答案是不同的。