Ubuntu基于Docker-Compose搭建Teamspeak 3语音VoIP服务器

Teamspeak(简称TS)是一套专有的VoIP软件,用户可以经由它与其他用户进行语音对话,用户经由客户端软件连线到指定的服务器,在服务器内的频道进行通话。通常TeamSpeak的用户大多为多人连线游戏的玩家,与同队伍的玩家进行通信,并且在游戏的对战方面该软件具有很强的竞争优势。TeamSpeak 3使用基于Web或Telnet的工具来控制服务器的管理及设置,同时TeamSpeak 3支持虚拟服务器个体化,这允许最多10个虚拟服务器运行在同一个进程上。

配置命令

新建 teamspeak 用户:

1
2
3
# adduser --disabled-login teamspeak
# su teamspeak
$ cd ~

前往下载页面查看最新服务端版本,并替换之后命令中的版本号。
下载、复制并解压 TS3 服务端文件:

1
2
3
4
$ wget https://files.teamspeak-services.com/releases/server/3.10.1/teamspeak3-server_linux_amd64-3.10.1.tar.bz2
$ tar -xjvf teamspeak3-server_linux_amd64-3.10.1.tar.bz2
$ mv teamspeak3-server_linux_amd64 teamspeak3-server
$ rm -rf teamspeak3-server_linux_amd64-3.10.1.tar.bz2

同意许可条款:

1
2
$ cd teamspeak3-server
$ touch .ts3server_license_accepted

建立service开机启动文件:

1
2
$ su root
# vim /lib/systemd/system/teamspeak3.service

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Teamspeak, The most superior online voice communication solution.
Wants=network-online.target
After=syslog.target network.target network-online.target
[Service]
WorkingDirectory=/home/teamspeak/teamspeak3-server/
User=teamspeak
Group=teamspeak
Type=forking
ExecStart=/home/teamspeak/teamspeak3-server/ts3server_startscript.sh start
ExecStop=/home/teamspeak/teamspeak3-server/ts3server_startscript.sh stop
PIDFile=/home/teamspeak/teamspeak3-server/ts3server.pid
RestartSec=15
Restart=always
[Install]
WantedBy=multi-user.target

启动服务,设置开机自启,并查看状态:

1
2
3
$ systemctl start teamspeak3
$ systemctl enable teamspeak3
$ systemctl status teamspeak3

防火墙设置

iptables

1
2
3
4
5
6
iptables -A INPUT -p udp --dport 9987 -j ACCEPT
iptables -A INPUT -p udp --sport 9987 -j ACCEPT
iptables -A INPUT -p tcp --dport 30033 -j ACCEPT
iptables -A INPUT -p tcp --sport 30033 -j ACCEPT
iptables -A INPUT -p tcp --dport 10011 -j ACCEPT
iptables -A INPUT -p tcp --sport 10011 -j ACCEPT

firewalld

1
2
3
4
5
6
7
systemctl start firewalld
#确认该服务正在运行:
sudo firewall-cmd --state
firewall-cmd --zone=public --add-port=9987/udp --permanent
firewall-cmd --zone=public --add-port=10011/tcp --permanent
firewall-cmd --zone=public --add-port=30033/tcp --permanent
firewall-cmd --reload

其他设置

下面补充一些或许能够用到的命令:
Change ownership of the TeamSpeak 3 server files.

1
chown -R teamspeak:teamspeak /home/teamspeak

This makes to systemd recognize the file we just created.

1
systemctl --system daemon-reload

创建teamspeak用户并设置密码:

1
2
useradd teamspeak
passwd teamspeak

使用teamspeak用户,启动服务。

1
2
./ts3server_startscript.sh start
#注意首次启动需要保存token和apikey

汉化程序

访问该Github仓库下载打包文件即可完成客户端汉化。

Docker方式

环境配置

安装 Docker
首先,运行命令sudo apt update更新软件包索引,然后运行命令apt remove runc删除runc。最后运行curl命令导入docker仓库的GPG密钥并安装docker运行命令sudo apt install docker-ce docker-ce-cli containerd.io -y。

1
2
3
4
5
6
7
8
9
10
11
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

sudo apt-get remove docker docker.io containerd runc -y

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

当脚本运行完成时,你Ubuntu计算机已经安装Docker的最新版本。安装完成后,Docker服务也将会自动启动。您可以运行命令sudo systemctl status docker来检查Docker服务的状态来以验证Docker是否正确的安装。默认情况下,Docker从Docker Hub合并镜像。这是一项基于云的注册服务。

确认服务器已经安装 Docker 和 Docker-Compose

1
2
docker -v
docker-compose -v

配置 TeamSpeak

找到合适的目录新建目录 ts 并切换。个人习惯所有 docker 配置统一放在根目录 /data 下,具体位置没有强制要求,但是每组配置都应放在一个单独的文件夹下

1
2
mkdir /data/ts  # 创建目录
cd /data/ts # 切换当前目录

新建 docker-compose.yml 文件,粘贴以下内容并保存,文件内容如下:官方镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# docker-compose.yml

version: '3.1'
services:
teamspeak:
image: teamspeak
restart: always
ports:
- 9987:9987/udp # 语音服务
- 30033:30033 # 文件传输
- 41144:41144 # DNS域名解析(可选)
- 10011:10011 # 服务器查询 raw(可选)
# - 10022:10022 # 服务器查询 SSH(可选)
# - 10080:10080 # 网络请求 http(可选)
# - 10443:10443 # 网络请求 https(可选)
volumes:
- ./data:/var/ts3server
environment:
TS3SERVER_DB_PLUGIN: ts3db_mariadb
TS3SERVER_DB_SQLCREATEPATH: create_mariadb
TS3SERVER_DB_HOST: db
TS3SERVER_DB_USER: root
TS3SERVER_DB_PASSWORD: password # 数据库密码
TS3SERVER_DB_NAME: teamspeak
TS3SERVER_DB_WAITUNTILREADY: 30
TS3SERVER_LICENSE: accept
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: password # 数据库密码
MYSQL_DATABASE: teamspeak
volumes:
- ./data/mysql:/var/lib/mysql # 必需,否则重启镜像后数据丢失

启动服务

确认当前在 docker-compose.yml 所在的目录,如 cd /data/ts:

1
2
3
4
5
6
7
8
9
10
11
# 启动服务
docker-compose up

# 启动服务 一直运行 detach
docker-compose up -d

# 关闭服务
docker-compose down

# 重启服务
docker-compose restart

用TS客户端连接服务器,会弹出对话框要求输入token,输入token后这个账号就是管理员了。第一次启动时会弹出 Server Query 管理员账号密码 和 token,务必妥善保存。
第一次如果用 docker-compose up -d 启动,相关日志会保存在 ./data/logs 下。

开放规则

云服务器的防火墙设置页添加如下入站规则官方说明

1
2
3
4
9987 UDP
30033 TCP
41144 TCP
10011 TCP

ufw防火墙规则

正常情况安装以后应该是默认禁止状态的,输入 ufw status verbose命令可以看到如下界面:

1
2
ufw status verbose
Status: inactive

这表示防火墙没有开启,下面启用防火墙。

1
2
ufw enable
ufw default deny

运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。再次输入 ufw status verbose,可以看到如下界面:

1
2
3
4
5
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

一般的用户,只需设置如下三条命令:

1
2
3
apt install ufw
ufw enable
ufw default deny

就已经足够安全了,如果你需要开放某些服务,再使用 ufw allow命令开启,举例如下:

1
2
3
4
5
6
7
8
9
10
ufw allow | deny [service]
ufw allow 53 允许外部访问53端口(tcp/udp)

ufw allow 3690 允许外部访问3690端口(svn)

ufw allow from 192.168.1.111 允许此IP访问所有的本机端口

ufw allow proto tcp from 192.168.0.0/24 to any port 22 允许指定的IP段访问特定端口

ufw delete allow smtp 删除上面建立的某条规则,比如删除svn端口就是 ufw delete allow 3690

开启/关闭防火墙

1
ufw enable | disable

示例

1
2
3
4
5
6
7
8
9
10
11
12
#下面是ufw命令行的一些示例:
ufw enable/disable:打开/关闭ufw

ufw status:查看已经定义的ufw规则

ufw default allow/deny:外来访问默认允许/拒绝

ufw allow/deny 20:允许/拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。

sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22:允许自192.168.0.0/24的tcp封包访问本机的22端口。

ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则