17

我查看了 openfire 中的 STUN Server 设置并从那里声明:

“为了充当 STUN 服务器,需要同一台机器上的两个不同的公共 IP 地址,以及每个 IP 的两个不同的端口号。”

我在google上研究过,一般stun服务器需要两个公共IP,这是什么原因?

4

3 回答 3

16

为了尝试建立 P2P 连接,STUN 绑定请求和到/来自 STUN 服务的主地址(IP 和端口)的响应才是真正重要的。此请求的响应正文中返回的映射地址被传递(通过 XMPP 或其他服务)到本地客户端尝试与其建立直接通信的远程节点。

STUN 服务侦听的第二个 IP 和端口对于确定 NAT 端口映射行为和 NAT 过滤行为很有用。

通过向服务上的备用 IP:port 发出绑定请求,客户端可以发现其 NAT 是否具有与本地端口一致的映射语义。如果他为每个测试获得不同的端口映射值,客户端可以断定它位于“对称 NAT”后面——这对于 P2P 来说是最难遍历的。

通过发送带有“更改请求”属性的绑定请求,要求服务从其他 IP 或端口响应,客户端可以检测他的 NAT 是否仅根据 IP 和端口过滤来自远程主机的数据报,或者允许来自它已将出站数据报发送到的主机上的备用端口。

映射行为和过滤测试只为后续的 P2P 连接提供有限的信息。在确定主机和 Internet 之间存在对称 NAT 的情况下,一些实现可能会观察到 NAT 在每个绑定响应中具有一致的端口值增量值。(例如 STUN 服务观察到的外部端口加一)。因此,客户端可以为远程客户端提供 IP 和猜测的端口号,以尝试发送到而不是从第一个绑定请求映射回来的端口号。或者客户端可以使用此行为/过滤测试进行日志记录。或者在对称 NAT 的情况下自动分配中继。

于 2011-12-04T06:23:27.907 回答
13

因为在极少数情况下,NAT 转换的行为是目标 IP 地址的函数。这意味着,您必须“ping”两个不同的 IP 地址才能找到 NAT 的精确行为(它是否取决于目标 IP 地址?)

如果你用两个不同的端口“ping”了两次相同的服务器,那将无法正确覆盖这种情况(即,你不会覆盖所有的基础)。

PS:这两个IP地址不需要在同一台服务器上,可以是不同的服务器。

于 2011-10-04T16:18:58.897 回答
1

我猜它需要识别正在执行的 NAT 的类型 - 一些 NAT 将使用相同的源 IP 地址并通过端口号对会话 id 进行编码(我认为它称为锥形 NAT,但不确定),一些 NAT 会使用源 IP 和端口的组合对会话 ID 进行编码。STUN 服务器需要给客户端的答案因 NAT 类型而异。

于 2011-09-29T08:24:36.777 回答