如何将我的 IP 重定向到域名 -Coturn

如何将我的 IP 重定向到域名 -Coturn

我们在以下环境中运行 coturn:

  1. 具有公有和私有接口的公有子网上的 EC2
  2. coturn 通过 AWS ECS 在 Docker 中运行

值得注意的是,我们在此实例前面没有负载均衡器或 NAT 网关。我们已打开安全组以允许所有 IP 的所有端口。

当我通过 Trickle ICE 测试我们的实例时,我得到以下结果:

0.072   srflx   3   udp x.x.x.x         52931   100 | 32287 | 255       
0.077   relay   5   udp 10.53.34.156    65525   5   | 32285 | 255       
0.089   srflx   3   udp x.x.x.x         65047   100 | 32287 | 254       
0.097   relay   5   udp 10.53.34.156    65501   5   | 32285 | 254   

x.x.x.x我的公共 IP 在哪里?但是,端点relay是我们 Docker 容器内的私有 IP。我对 ICE 的理解是,这应该是一个公共接口,以便客户端可以将其用于 TURN 会话。

以下是我们的启动配置和启动命令:

0: (1): INFO: log file opened: /var/log/turn_1_2024-04-22.log
0: (1): INFO: System cpu num is 2
0: (1): INFO: System enable num is 1
0: (1): INFO: Listener address to use: 0.0.0.0
0: (1): INFO: Relay address to use: 0.0.0.0
0: (1): INFO: Coturn Version Coturn-4.6.2 'Gorst'
0: (1): INFO: Max number of open files/sockets allowed for this process: 1048576
0: (1): INFO: Due to the open files/sockets limitation, max supported number of TURN Sessions possible is: 524000 (approximately)
0: (1): INFO: 

==== Show him the instruments, Practical Frost: ====

0: (1): INFO: OpenSSL compile-time version: OpenSSL 3.1.4 24 Oct 2023 (0x30100040)
0: (1): INFO: TLS 1.3 supported
0: (1): INFO: DTLS 1.2 supported
0: (1): INFO: TURN/STUN ALPN supported
0: (1): INFO: Third-party authorization (oAuth) supported
0: (1): INFO: GCM (AEAD) supported
0: (1): INFO: SQLite supported, default database location is /var/lib/coturn/turndb
0: (1): INFO: Redis supported
0: (1): INFO: PostgreSQL supported
0: (1): INFO: MySQL supported
0: (1): INFO: MongoDB supported
0: (1): INFO: Default Net Engine version: 3 (UDP thread per CPU core)
0: (1): INFO: Domain name: 
0: (1): INFO: Default realm: gearbox.com
0: (1): ERROR: CONFIG: Empty cli-password, and so telnet cli interface is disabled! Please set a non empty cli-password!
0: (1): INFO: Certificate file found: /etc/coturn/cert.pem
0: (1): INFO: Private key file found: /etc/coturn/private-key.pem
0: (1): INFO: TLS cipher suite: ALL:!COMPLEMENTOFDEFAULT:!eNULL:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
0: (1): INFO: DTLS cipher suite: ALL:!COMPLEMENTOFDEFAULT:!eNULL:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
0: (1): INFO: pid file created: /var/run/turnserver.pid
0: (1): INFO: IO method: epoll (with changelist)
0: (1): INFO: RFC5780 disabled! /NAT behavior discovery/
0: (1): INFO: Wait for relay ports initialization...
0: (1): INFO:   relay 0.0.0.0 initialization...
0: (1): INFO:   relay 0.0.0.0 initialization done
0: (1): INFO: Relay ports initialization done
0: (1): INFO: Total General servers: 2
0: (14): DEBUG: turn server id=1 created
0: (13): DEBUG: turn server id=0 created
0: (1): INFO: Total auth threads: 3
0: (15): INFO: SQLite DB connection success: /var/lib/turn/turndb
0: (1): INFO: prometheus collector disabled, not started

我们的启动命令:

sudo docker run -d -v /root/config/turnserver.conf:/etc/coturn/turnserver.conf \
                   -v /root/ssl/private-key.pem:/etc/coturn/private-key.pem \
                   -v /root/ssl/cert.pem:/etc/coturn/cert.pem \
                   --mount type=tmpfs,destination=/var/lib/coturn \
                   --network=host \
                   -p 3478-3479:3478-3479 -p 3478-3479:3478-3479/udp \
                   -p 443:443 -p 443:443/udp \
                   -p 65500-65535:65500-65535/udp \
                   -e DETECT_EXTERNAL_IP=yes \
                   -e DETECT_RELAY_IP=yes \
                   coturn-gbx \
                   --min-port=65500 \
                   --max-port=65535 \
                   --no-multicast-peers \
                   --no-tlsv1 --no-tlsv1_1 \
                   --realm=company.com

问题:我们的中继端点应该公开吗?如果是,我们这里做错了什么?

答案1

是的,为了使 Coturn 有效地作为 TURN 服务器运行,尤其是在用于支持 WebRTC 应用程序时,中继端点可以通过公共 IP 地址访问。

根据您的描述和设置,我会仔细检查以下内容以确保中继端点使用公共 IP:

外部 IP 检测:您提到使用环境变量 DETECT_EXTERNAL_IP=yes。有时,由于网络配置或 Docker 的网络模式存在一些异常,自动检测可能无法按预期工作。您可能需要在 Coturn 配置或启动命令中明确设置外部 IP。

配置设置:仔细检查外部 IP 是否在 turnserver.conf 文件中或作为命令行参数正确配置。

安全组和网络 ACL:仔细检查您的 AWS EC2 安全组和网络 ACL 是否已配置为允许在必要端口上传入和传出流量。由于您使用范围广泛的端口(TURN 使用 3478-3479,中继使用 65500-65535),因此需要根据需要对 TCP 和 UDP 流量开放这些端口。

显式 IP 配置:如果自动检测不配合,请考虑将 Coturn 配置中的监听 IP 地址和中继 IP 地址明确设置为 EC2 实例的公共 IP。

根据 OP,这是您的 Docker 命令的修改版本,具有明确的外部 IP 设置(用实际 IP 地址替换):

sudo docker run -d -v /root/config/turnserver.conf:/etc/coturn/turnserver.conf \
                -v /root/ssl/private-key.pem:/etc/coturn/private-key.pem \
                -v /root/ssl/cert.pem:/etc/coturn/cert.pem \
                --mount type=tmpfs,destination=/var/lib/coturn \
                --network=host \
                -p 3478-3479:3478-3479 -p 3478-3479:3478-3479/udp \
                -p 443:443 -p 443:443/udp \
                -p 65500-65535:65500-65535/udp \
                -e DETECT_EXTERNAL_IP=no \
                -e DETECT_RELAY_IP=no \
                coturn-gbx \
                --external-ip=<your-public-ip>/<your-private-ip> \
                --min-port=65500 \
                --max-port=65535 \
                --no-multicast-peers \
                --no-tlsv1 --no-tlsv1_1 \
                --realm=company.com
```

相关内容