基于腾讯云服务器 RockyLinux9 部署coturn stun & trun 服务器

必备知识

## 条件列表:
    1、服务器有两个公网ipv4,(双IP是stun工作的充分必要条件,了解了stun的udp打洞原理你就知道为啥了)
    2、两公网ip均直接配置在同一张网卡上(主要是降低配置难度)
    3、外部防火墙不得阻挡相关端口 3478-3479,5349-5350,49512-65535
    4、友情提示:搭这个服务,请选择 公网ipv4 直接配置到 网卡上的云服务器(还要两个ipv4哦)

## coturn相关资料
    https://wener.me/notes/service/network/coturn
    # stun协议解析
    https://blog.csdn.net/momo0853/article/details/105387675/
    https://www.cnblogs.com/bluntwu2022/p/18344821
    https://blog.csdn.net/super_code_marker/article/details/131719051

网络ip配置展示(云服务器分配两个内网ip 各自带一个公网ip)

## 大致逻辑
    1、云服务器 弹性网卡上分配手动 增加分配一个内网ip,然后再申请一个公网ip,绑定到内网ip上,见下图
    2、云服务器 /etc/rc.local 将新增的内网ip设置为开机自动配置

[root@cn-stun ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:54:00:7e:ae:bb brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
    inet 10.206.0.6/20 brd 10.206.15.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.206.0.14/20 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7e:aebb/64 scope link 
       valid_lft forever preferred_lft forever
[root@cn-stun ~]# cat /etc/rc.local | grep "ip add"
ip add add 10.206.0.14/20 dev eth0

## 附、coturn的使用wiki
    https://github.com/coturn/coturn/wiki

## 附、这里有一张比较好的图
    https://www.cnblogs.com/yjmyzz/p/how-to-install-coturn-on-ubuntu.html

file

安装coturn、生成tls加密证书(若不用tls可以不做)

# 直接dnf安装(会自动解决依赖问题,注意该方式安装的coturn不支持Prometheus采集)
    dnf install coturn coturn-utils -y
    # apt install coturn
    # 因为 turnutils_stunclient 测试命令在 coturn-utils 工具包中

# 生成tls加密证书(直接把tls证书和key生成到 coturn的配置目录)
    openssl req -x509 -newkey rsa:2048 -keyout /etc/coturn/turn_server_pkey.pem -out /etc/coturn/turn_server_cert.pem -days 99999 -nodes 

配置conturn

# 第一步:备份 并写入 新的配置文件
[root@localhost ~]# cp /etc/coturn/turnserver.conf /etc/coturn/turnserver.conf.bak

[root@localhost ~]# cat /etc/coturn/turnserver.conf
# 监听地址(在多个IP启用监听,会自动启用RFC5780)
listening-ip=10.206.0.6
listening-ip=10.206.0.14

# 监听端口
listening-port=3478
alt-listening-port=3479

# 公网ip与私网ip对应
external-ip=1.13.189.100/10.206.0.14
external-ip=146.56.218.49/10.206.0.6

# TURN 服务器用于中继的 IP
relay-ip=10.206.0.6
relay-ip=10.206.0.14

# Realm 是 TURN 认证的标识
realm=cn-stun.atstm.cc

# 配置加密证书公钥+私钥
#tls-listening-port=5349
#alt-tls-listening-port=5350
#cert=/etc/coturn/turn_server_cert.pem
#pkey=/etc/coturn/turn_server_pkey.pem

# TURN 用户名和密码(静态)
#lt-cred-mech
#user=aaa:aaa12345

# 限制使用端口范围(这是UDP的,防火墙需放行)
min-port=49152
max-port=65535

# 启用日志(verbose:DEBUG级别;simple-log:简单级别)
log-file=/var/log/turnserver.log
verbose
#simple-log
log-binding

# turn服务器带宽限制为10mbps(max-bps=0 或不设置表示限制)
#max-bps=10000000

# 强烈推荐设置
fingerprint
stale-nonce
no-multicast-peers
mobility
no-cli

# 当有多个监听ip时,会自动启用rfc5780,该选项对rfc5780相应数据的优化,不影响检测结果
response-origin-only-with-rfc5780

# 不使用tls
no-tls
no-dtls

前台启动调试、及systemd启动coturn

# 前台调试启动(注意观察输出日志信息,有没有WARNING 或者 ERROR)
    turnserver -c /etc/coturn/turnserver.conf

# 新开终端,查看3478 5349等端口是否监听(我这里没用5349)
    ss -tunlp

## systemd启动coturn服务(可以不修改 /usr/lib/systemd/system/coturn.service 中的用户和组)
    systemctl start coturn
    systemctl enable coturn

BUG、注意事项(域名必须解析到第一个IP)非常重要

## Tips:你在测试时会发现,虽然你有两个公网ip,但是仅在请求 coturn 配置中 第一行listening-ip 所对应ip时,才会成功,直接请求第二行的ip是不会成功的。
## 解决办法:将域名 cn-stun.atstm.cc  只解析到第一个ip上

## 可用如下方式测试 过程(同时可以去看 服务器端的日志情况)
    # 方式一、(使用RFC 5780)
    turnutils_stunclient -p 3478 146.56.218.49
    turnutils_stunclient -p 3478 1.13.189.100
    # 方式二、(使用RFC 5389)
    pystun3 -P 3478 -d -H 146.56.218.49
    pystun3 -P 3478 -d -H 1.13.189.100

在线测试、或者下载nat类型测试工具

# WebRTC samples Trickle ICE 测试工具地址(浏览器打开,填写自己搭建的 stun 和 turn服务器信息即可)
    https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
    # 另一个在线测试工具
    # https://www.metered.ca/turn-server-testing?ref=metered.ca

    # stun 服务器信息格式(因为stun只是提供检测nat类型功能,可以不需要验证,格式如下)
    stun:27.xx.182.88:3478
    # stun:域名:3478

    # turn 服务器信息格式(因为turn的功能是中转流量,为了安全设置了身份认证)
    turn:27.xx.182.88:5349    # 然后在下面行输入账户tom,和密码tom123456

# NatTypeTester 测试工具下载地址
    https://github.com/HMBSbige/NatTypeTester

file

附、docker方式部署coturn服务

## 网络ip配置展示
[root@localhost log]# ip a show ens18
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:f0:f2:a0 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 27.xx.182.88/27 brd 27.xx.182.95 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet 27.xx.182.87/27 brd 27.xx.182.95 scope global secondary noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::be24:11ff:fef0:f2a0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

## 第一、如何选择coturn镜像(建议选择基于alpine的,不要选择默认基于debian的)
    docker pull coturn/coturn:edge-alpine
    # docker pull coturn/coturn    # 不建议选择这个版本(因为在调参数有点不一样)

## 第二、准备加密证书
    mkdir -p /opt/devops/coturn
    openssl req -x509 -newkey rsa:2048 -keyout /opt/devops/coturn/turn_server_pkey.pem -out /opt/devops/coturn/turn_server_cert.pem -days 99999 -nodes
## 第三、准备配置文件turnserver.conf
    [root@localhost ~]# cat /opt/devops/coturn/turnserver.conf
# 监听地址(多个公网 IP)
listening-ip=106.53.107.155
listening-ip=119.91.211.26

# 监听端口
listening-port=3478
alt-listening-port=3479
tls-listening-port=5349
alt-tls-listening-port=5350

# TURN 服务器用于中继的 IP
relay-ip=106.53.107.155
relay-ip=119.91.211.26
# Realm 是 TURN 认证的标识
realm=test.211cc.cc

# 限制使用端口范围
min-port=49152
max-port=65535

pidfile=/tmp/turnserver.pid

# TLS(如不需要可注释)
cert=/etc/coturn/turn_server_cert.pem
pkey=/etc/coturn/turn_server_pkey.pem

# TURN 用户名和密码(静态)
lt-cred-mech
user=tom:tom12345

# 启用日志
log-file=/var/log/turnserver.log
verbose
log-binding

# 强烈推荐设置
fingerprint
stale-nonce
no-multicast-peers
mobility
no-cli
# 非常关键,要支持老的frc5780 不然pystun可能测不出来(貌似不对)
#rfc5780
## 第三、准备docker compose 文件
    [root@localhost ~]# cat /opt/devops/coturn/docker-compose.yaml 
services:
  coturn:
    image: coturn/coturn:edge-alpine
    container_name: coturn
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./turnserver.conf:/etc/coturn/turnserver.conf
      - ./turn_server_cert.pem:/etc/coturn/turn_server_cert.pem
      - ./turn_server_pkey.pem:/etc/coturn/turn_server_pkey.pem
      - /var/log/coturn/:/var/log/
    environment:
      TZ: Asia/Shanghai
    network_mode: host

## 第四、将上述证书、密钥、配置文件turnserver.conf 的权限都设置为777 (非常关键,因为coturn镜像的默认执行账户是普通账户)
    chmod 777 /opt/devops/coturn/*

## 第五、启动容器,并查看日志,最后功能验证参考上面
    cd /opt/devops/coturn/
    docker compose up -d
    docker logs coturn    # 查看容器启动工作日志
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1392.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2025/5/29作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录