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