我假设 work behind NAT 指的是 TURN 服务器,而不是应用程序。
这种情况可以参考coturn配置中的external-ip参数:
TURN 服务器公共/私有地址映射,如果服务器在 NAT 之后。在这种情况下,如果以“-X”形式使用 -X,则该 ip 将被报告为所有分配的中继 IP 地址。
这适用于例如 GCP 的 AWS 等 NAT 场景,其中在 coturn 可以侦听的私有 IP 地址与临时公共 IP 地址之间存在 1:1 映射。
您的应用程序只需在ice 设置中配置为使用coturn,就好像coturn 直接在公共IP 上监听一样。
例如:
listening-ip=172.10.1.1
external-ip=3.3.3.3/172.10.1.1
此外,coturn 将使用分配成功响应的XOR-RELAYED-ADDRESS 中的公共 IP 的中继传输地址响应分配请求。
端口将与专用接口上分配的端口相同。例如,如果中继分配在172.10.1.1:40032,XOR-RELAYED-ADDRESS 将包含3.3.3.3:40032。
不用说,coturn 的配置中配置的任何端口范围都需要可从应用程序访问。例如,如果min-port 是 40000,max-port 是 50000,则该 EC2 实例必须有一个允许访问 UDP 40000-50000 的安全组。
默认情况下,coturn 还充当 STUN 服务器(如果侦听多个 IP 地址,甚至完全兼容 RFC-5780)。