我正在尝试让 coturn 服务器在 AWS 应用程序负载均衡器后面工作。我正在使用 icetrickle 对其进行测试,如果我跳过负载均衡器并直接访问实例,coturn 似乎可以按预期工作。实例的安全组允许所有 IP(0.0.0.0/0::/0)在每个端口(0 - 65535)上进行 TCP 和 UDP 流量
这是我在转弯服务器上的配置:
vim /etc/default/coturn:
TURNSERVER_ENABLED=1
vim /etc/turnserver.conf:
external-ip={aws_public_ip}
fingerprint
user={turn_user}:{turn_password}
lt-cred-mech
realm=realm
simple-log
然后我启动服务器并用 icetrickle 检查它。
Icetrickle 响应 - stun:{aws_public_ip}:3478
Time Component Type Foundation Protocol Address Port Priority
0.002 1 host 430735571 udp 192.168.1.102 64841 126 | 30 | 255
0.100 1 srflx 842163049 udp 109.242.109.35 64841 100 | 30 | 255
0.104 Done
0.106
转动服务器日志 - tail -f /var/log/turn_15892_:
3983: session 001000000000000146: TCP socket closed remotely 172.31.18.64:4630
3983: session 001000000000000146: closed (2nd stage), user <> realm <realm> origin <>, local 172.31.13.20:3478, remote 172.31.18.64:4630, reason: TCP connection closed by client (callback)
3986: handle_udp_packet: New UDP endpoint: local addr 172.31.13.20:3478, remote addr 109.242.109.35:57844
3986: session 001000000000000147: realm <realm> user <>: incoming packet BINDING processed, success
Wireshark 日志
96848 2875.279343 192.168.1.102 3.8.87.160 STUN 62 Binding Request
96851 2875.373118 3.8.87.160 192.168.1.102 STUN 114 Binding Success Response XOR-MAPPED-ADDRESS: 109.242.109.35:57844 MAPPED-ADDRESS: 109.242.109.35:57844 RESPONSE-ORIGIN: {aws_public_ip}:3478
然后我配置了应用程序负载均衡器。它接受端口 3478(HTTP 协议)的流量,并将流量转发到端口 3478 上的实例。结果如下:
Icetrickle 响应 - stun:{aws_lb_url}:3478
Time Component Type Foundation Protocol Address Port Priority
0.001 1 host 430735571 udp 192.168.1.102 54374 126 | 30 | 255
39.861 Done
39.864
转动服务器日志 - tail -f /var/log/turn_15892_:
No new logs (only healthchecks)
Wireshark 日志
110396 3769.417283 192.168.1.102 52.56.189.26 STUN 62 Binding Request
110403 3769.511074 52.56.189.26 192.168.1.102 ICMP 90 Destination unreachable (Port unreachable)
An array of similar logs as it retries
如我所见,它试图连接到可配置的随机端口,默认配置可以跨越端口 49152 到 65535,我怀疑这是问题所在,因为我们将流量从负载均衡器转发到实例的唯一端口是端口 3478。我想知道现在服务器位于负载均衡器后面,是否应该对 coturn 配置进行微调。
任何建议/帮助都将不胜感激。
答案1
您应该转发 coturn UDP 和 TCP 端口,但我不确定应用程序是否可以做到这一点。
对于我来说,根据以下内容不清楚是否可以转发 udp 端口。 https://aws.amazon.com/elasticloadbalancing/features/#Product_comparisons 如果我理解正确的话,它说应用程序负载均衡器仅适用于 http/https。
答案2
由于 turnserver 配置在端口 3478 上,请在特定端口 3478 上为 tcp 和 udp 打开安全组,并在 elb 和实例上从源 0.0.0.0/0 打开安全组。
在服务器配置中,请将外部 IP 指定为 AWS elb ip,并且您应该提及另一个本地 IP 参数,该参数应该是服务器的私有 IP。
您提到的随机端口根本不是问题,它们用于 udp 连接,所以不必担心。
在 elb 上请配置 3600 的超时时间。
请告诉我此配置是否有效。如果不行,我可以进一步提供帮助。
谢谢。