0

https://github.com/coturn/coturn/blob/c4477bfddd2cd51de1ad37032ca88330f3c44ed6/docker/coturn/turnserver.conf#L100

在 turnserver.conf 中,如果外部 IP 仅用于 aws,我会看到“对于 Amazon EC2 用户”的世界?我让stun服务器运行在k8s集群中,然后用nodeport服务暴露到公网,但是stun返回的srflx是网关地址,不是我设置的external-ip。我的 k8s 集群运行在阿里云上。希望有人能帮我解决这个问题,谢谢!!!</p>

4

1 回答 1

1

AWS EC2 实例在大多数情况下运行在 NAT 之后。即使您已1.2.3.4通过 AWS 控制台分配了公共 IP 地址(例如 ),该实例也只知道其所在的私有网络,并且不知道分配给它的公共 IP 地址。也就是说,实例认为它的 IP 地址是172.31.5.6操作系统在启动时发现的。端口转发使某些 TCP 和 UDP 端口能够从公共 IP 地址转发到运行 EC2 实例的私有 IP 地址。

对于在 AWS EC2 实例上运行的大多数服务,这通常不是问题。STUN 在完全“2 IP 地址和 2 端口模式”下运行,如果客户端想要进行 NAT 行为和过滤测试,服务器需要将其备用 IP 地址通告回客户端。但是 STUN 服务器将172.31.5.7其作为备用 IP 发回是不正确的——客户端无法访问该 IP,因为它是私有的。

同样对于 TURN,当端口分配发生时,服务器需要将 EC2 实例的公共 IP 地址发送回分配它的客户端。如果客户端请求一个 TURN 端口与另一个对等方共享 - 仅用于 TURN 服务器发回,那将会很糟糕172.31.5.6

因此,对于托管在 NAT 后面的 STUN 或 TURN 服务器,需要一组命令行参数或配置参数来告诉服务器它的“真实”IP 地址是什么。STUN/TURN 软件将使用这些 IP 地址将响应发送回客户端。

于 2019-05-18T07:05:42.790 回答