Ubuntu中搭建ICE服务器(Coturn)

1. WebRTC的P2P穿透

WebRTC的P2P穿透部分是由libjingle实现的.

步骤顺序大概是这样的:

  1. 尝试直连.
  2. 通过STUN服务器进行穿透
  3. 无法穿透则通过TURN服务器中转

STUN服务器比较简单. 网上也有很多公开的STUN服务器可以用于测试,例如: stun.ideasip.com

在WebRTC的P2P应用中,使用公开的STUN服务器时,有时响应比较慢,这就需要自己搭一个ICE服务器即可。ICE服务器包含STUN和TURN两部分,实际上只需要TURN服务器就可以解决P2P的穿透问题。

Coturn是在原来的TurnServer上增加了一些高级特性. (这是作者的描述, 两个项目是同一个作者. 作者更推荐使用Coturn).

  • coturn 支持tcp, udp, tls, dtls 连接.
  • coturn 支持linux bsd solaris mac os. 暂不支持windows (未来会支持)

2. 安装Coturn

2.1 安装依赖组件

使用下面相关命令安装Coturn依赖的相关库文件

sudo apt-get install libssl-dev
sudo apt-get install libevent-dev
sudo apt-get install libpq-dev
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
sudo apt-get install
### coturn 服务器搭建教程与配置指南 #### 准备工作 在开始之前,确保已准备好一台 Linux 主机,并具备管理员权限。推荐的操作系统包括 Ubuntu 或 CentOS。 #### 安装依赖项 为了成功编译并安装 coturn,需先安装必要的开发工具和库文件。以下是基于 Ubuntu 的示例命令: ```bash sudo apt update && sudo apt install -y build-essential libssl-dev libevent-dev uuid-dev python3-pip ``` #### 下载源码 从官方仓库获取最新版本的 coturn 源代码。可以使用以下 Git 命令克隆存储库: ```bash git clone https://github.com/coturn/coturn.git cd coturn ``` #### 编译与安装 进入下载好的目录后,执行以下步骤完成编译过程: ```bash ./configure --prefix=/usr/local/coturn \ --sysconfdir=/etc/coturn \ --localstatedir=/var/lib/coturn \ --with-user=turnserver \ --with-group=turnserver \ --enable-static-linking=yes \ --disable-rpath-hack=no make sudo make install ``` 上述脚本会将程序安装至 `/usr/local/coturn` 路径下[^1]。 #### 配置文件说明 coturn 使用 `turnserver.conf` 文件作为主要配置依据。默认情况下,此文件位于 `/etc/turnserver.conf` 中。如果未找到,则可以通过 `-c` 参数指定自定义位置。下面是一个基础配置模板: ```plaintext listening-ip=<公网IP> relay-ip=<内部网络IP> external-ip=<外部可见IP>/<实际NAT映射地址> lt-cred-mech use-auth-secret static-auth-secret=<共享密钥> realm=<域名或描述字符串> cert=/path/to/tls_cert.pem pkey=/path/to/private_key.pem min-port=49152 max-port=65535 fingerprint no-tcp-relay verbose log-file=/var/log/turn.log ``` 每行代表不同的功能选项解释如下: - **listening-ip**: 设置监听 IP 地址; - **relay-ip**: 明确转发数据包所使用的本地接口地址; - **external-ip**: 当存在 NAT 设备时告知客户端其外网出口信息; - **lt-cred-mech**, **use-auth-secret**, **static-auth-secret**: 开启长期凭证机制并通过固定字符串验证身份; - **realm**: 标识所属域名称; - **cert/pkey**: 提供 TLS 加密所需的证书链及其私钥材料; - **min/max port range**: 自定义 UDP 孔洞分配区间范围; - **fingerprint/no-tcp-relay**: 添加 SDP FINGERPRINT 扩展字段以及关闭 TCP relay 功能以减少复杂度; - **verbose/log-file**: 记录调试日志以便后续排查问题。 #### 启动服务 当一切准备就绪之后,可通过以下指令启动 turnserver 进程: ```bash /usr/local/coturn/bin/turnserver -c /etc/turnserver.conf ``` 或者将其注册为 systemd service 单元管理更加方便可靠。创建一个新的单元文件 `/lib/systemd/system/coturn.service` 并写入相关内容: ```ini [Unit] Description=COTURN STUN/TURN Server After=network.target syslog.target nss-lookup.target [Service] Type=simple User=nobody Group=nogroup ExecStart=/usr/local/coturn/bin/turnserver -c /etc/turnserver.conf Restart=on-failure [Install] WantedBy=multi-user.target ``` 最后重新加载守护进程配置并激活新添加的服务即可: ```bash sudo systemctl daemon-reload sudo systemctl enable --now coturn ``` #### 测试连接性 确认服务器正常运作的方法之一就是利用浏览器开发者控制台发起 WebRTC Peer Connection 请求。按照先前提到的方式构建 ICE Servers 列表传给构造函数实例化对象[^4]: ```javascript const iceConfiguration = { iceServers: [ { urls: 'turn:<your-public-domain>:<port>', username: '<shared-secret>', credential: '<generated-token>' } ] }; let pc = new RTCPeerConnection(iceConfiguration); pc.createDataChannel('test'); await pc.setLocalDescription(await pc.createOffer()); console.log(pc.localDescription.candidate); ``` 以上即完成了整个 Coturn TURN server 的部署流程概述。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值