我查看了openfire中的STUN服务器设置,并从中得到以下声明:
"为了作为STUN服务器,需要在同一台计算机上拥有两个不同的公共IP地址和每个IP的两个不同端口号。"
我在Google上进行了研究,一般情况下STUN服务器需要两个公共IP地址,这是什么原因呢?
为尝试建立P2P连接,与STUN服务的主要地址(IP和端口)进行的STUN绑定请求和响应是最重要的。在此请求的响应正文中返回的映射地址将被传递(通过XMPP或其他服务)到本地客户端试图直接通信的远程节点。
STUN服务侦听的第二个IP和端口有助于确定NAT端口映射行为和NAT过滤行为。
通过向服务的备用IP:端口发送绑定请求,客户端可以发现他的NAT是否具有一致的本地端口映射语义。如果他在每个测试中都获得不同的端口映射值,则客户端可以得出结论,它位于"对称NAT"后面-这是最难以穿越P2P的。
通过发送一个带有"更改请求"属性的绑定请求,请求服务从另一个IP或端口响应,客户端可以检测他的NAT是仅基于IP和端口过滤来自远程主机的数据报,还是允许来自已向其发送出站数据报的主机的替代端口的数据报。
映射行为和过滤测试仅提供了有限的信息,用于后续的P2P连接。在确定主机与Internet之间存在对称NAT的情况下,某些实现可能会观察到NAT在每个绑定响应中具有端口值的一致递增值。(例如,由STUN服务观察到的外部端口递增1)。因此,客户端可以提供一个IP和猜测的端口号,供远程客户端尝试发送,而不是从第一个绑定请求中映射回来的端口。或者客户端可能会使用此行为/过滤测试进行日志记录。或者在对称NAT的情况下自动分配中继。
由于在一些罕见的情况下,NAT转换的行为是目标IP地址的一个函数。这意味着,您必须'ping'两个不同的IP地址,才能找到NAT的精确行为(是否取决于目标IP地址?)
如果您使用两个不同的端口向同一台服务器'ping'两次,则不能正确地覆盖此情况(即,您将没有涵盖所有情况)。
P.S .:这两个IP地址不需要在同一台服务器上,它们可以是不同的服务器。