STUN(Session Traversal Utilities for NAT)服务器在 WebRTC 等应用中用于帮助客户端获取其外部网络地址,尤其是在 NAT(Network Address Translation)环境下。使用 Docker 可以简化 STUN 服务器的部署,而通过 Nginx 反向代理并配置 HTTPS,可以提高服务器的安全性并方便用户通过域名访问。
2. 环境准备
-
一台配置了 Docker 和 Nginx 的 Linux 服务器(本文以 Ubuntu 为例)。
-
一个可用的域名(本文假设为
stun.example.com
)。 -
能够访问互联网,用于获取 SSL 证书(例如使用 Let’s Encrypt 提供的免费证书)。
Docker 镜像
首先,拉取 coturn/coturn
Docker 镜像。这个镜像包含了流行的 coturn
docker pull coturn/coturn
coturn
Docker 容器
运行容器时需要指定一些必要的配置,以便 STUN 服务器可以正常工作:
docker run -d --name coturn-stun \
-p 3478:3478/udp \
-p 3478:3478/tcp \
coturn/coturn \
turnserver \
--no-auth \
--listening-port=3478 \
--listening-ip=0.0.0.0 \
--external-ip=你的服务器公网IP \
--min-port=49160 \
--max-port=49200 \
--no-tls \
--no-dtls
参数说明:
-
-p 3478:3478/udp
和-p 3478:3478/tcp
:将容器内部的 STUN 服务端口映射到主机的 3478 端口。 -
--no-auth
:禁用认证,允许匿名 STUN 请求。 -
--listening-port=3478
:指定 STUN 服务的监听端口(默认 3478)。 -
--listening-ip=0.0.0.0
:监听所有网络接口的连接请求。 -
--external-ip=你的服务器公网IP
:指定服务器的外部 IP 地址,帮助客户端获取正确的外部 IP。 -
--no-tls
和--no-dtls
:禁用 TLS 和 DTLS,因为我们将通过 Nginx 来处理 HTTPS。
4. 配置 Nginx 反向代理
4.1 安装 Nginx
如果你尚未安装 Nginx,可以通过以下命令安装:
sudo apt-get update
sudo apt-get install nginx
4.2 获取 SSL 证书
使用 Certbot 来获取 Let’s Encrypt 提供的免费 SSL 证书。
安装 Certbot 和 Nginx 插件
sudo apt-get install certbot python3-certbot-nginx
获取证书
运行以下命令为你的域名获取 SSL 证书:
sudo certbot --nginx -d stun.example.com
Certbot 将自动为 Nginx 配置 SSL,并设置证书的自动续期。
4.3 配置 Nginx 反向代理
在 Certbot 配置完成后,你可以检查 /etc/nginx/sites-available/stun.example.com
文件,确保 Nginx 正确代理到 Docker 中的 STUN 服务器。
编辑配置文件:
sudo nano /etc/nginx/sites-available/stun.example.com
配置文件内容如下:
server {
listen 80;
server_name stun.example.com;
return 301 https://$host$request_uri; # 强制重定向到 HTTPS
}
server {
listen 443 ssl;
server_name stun.example.com;
ssl_certificate /etc/letsencrypt/live/stun.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stun.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
location / {
proxy_pass http://localhost:3478;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4.4 重新加载 Nginx 配置
应用更改并重新加载 Nginx 配置:
sudo nginx -t
sudo systemctl reload nginx
5. 验证 STUN 服务器
配置完成后,你可以使用 stunclient
或类似工具来验证 STUN 服务器是否正常工作:
stunclient stun.example.com:443
如果 stunclient
返回了客户端的外部 IP 地址,说明配置成功。
6. 总结
通过以上步骤,我们使用 coturn/coturn