メインコンテンツまでスキップ

Ubuntuにturnサーバーをインストール

一応インストールテストはしました。
てか他の人が入れてる手順だとturnsが動かないのですが(root権限なら動く)

turnsも動作確認してください・・・

turnsが動かないからとrootで動かしてるヤバい人もいますが本当にヤバいですね。
挙句の果てにNextcloudの公式もrootでry
coturnの公式は推奨していません。

私も初めてインストールするので間違えてるかもしれませんがね・・・
とりあえず動いてます。(緑色のチェックマークもしっかり)

ポート開放(必要なら)

turnsいらないなら5349はいらないです ufwの場合

sudo ufw allow 3478
sudo ufw allow 5349
sudo ufw allow 49152:65535/udp
sudo ufw allow 49152:65535/tcp
sudo ufw reload

iptableの場合(Oracle等)

sudo vi /etc/iptables/rules.v4

以下を追加

# TCP
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3478 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5349 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 49152:65535 -j ACCEPT
# UDP
-A INPUT -p udp -m state --state NEW -m udp --dport 3478 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 49152:65535 -j ACCEPT

適用する

sudo iptables-restore < /etc/iptables/rules.v4

必要なパッケージインストール

sudo apt -y install git build-essential libssl-dev libevent-dev libpq-dev pkg-config

apt -y install coturnはNG(危険かも)

apt -y install coturn だと古いのが入るんですよね・・・
5年前のやつとかでしたさすがにね(セキュリティリスクです)

coturnのダウンロード

フォルダは作業できればどこでも

git clone https://github.com/coturn/coturn.git
cd coturn

ビルドとインストール

sudo ./configure
sudo make
sudo make install

2025年8月のインストールは4.7.0でした

turnserver --version

ユーザー作成とフォルダ作成など

sudo useradd -r -s /bin/false turnserver
sudo mkdir -p /var/lib/turn
sudo chown turnserver: /var/lib/turn

サーバーシークレットの作成

openssl rand -hex 32


6fa59b551a4d493c1f488dae74cc5d66f3e284fe0397502a6e486e6e5e02b76c

Opensslで鍵の生成(30分以上かかるかも?)

なくても動きます(turnsいらないなら不要)
4096にしてますが2048にすればだいたい30秒以内で終わります。

sudo mkdir -p /home/turns/certs
sudo openssl dhparam -out /home/turns/certs/dhparam.pem 4096

権限も変更

sudo chown turnserver:turnserver /home/turns/certs/dhparam.pem
sudo chmod 640 /home/turns/certs/dhparam.pem

証明書のコピーと権限変更

証明書はCertbotで取得している前提です。

sudo mkdir /etc/turnserver
sudo cp /etc/letsencrypt/live/turn.momijiina.tech/fullchain.pem /etc/turnserver/
sudo cp /etc/letsencrypt/live/turn.momijiina.tech/privkey.pem /etc/turnserver/
sudo chown turnserver: /etc/turnserver/fullchain.pem /etc/turnserver/privkey.pem
sudo chmod 600 /etc/turnserver/*.pem

Coturnの設定をする

sudo vi /etc/turnserver.conf

turnsいらない人は削ってください

#↓ Diffie-Hellmanパラメータファイルの指定(不要ならコメントアウトして)
dh-file=/home/turns/certs/dhparam.pem
realm=turn.momijiina.tech
server-name=turn.momijiina.tech
#↓ サーバーのグローバルIP
external-ip= 118.xxx.xxx.156
#↓ turnsを使わないならtls系はいらいらないです
cert=/etc/turnserver/fullchain.pem
pkey=/etc/turnserver/privkey.pem
no-tlsv1
no-tlsv1_1
#↓ openssl rand -hex 32で作成した値
static-auth-secret=6fa59b551a4d493c1f488dae74cc5d66f3e284fe0397502a6e486e6e5e02b76c
listening-ip=0.0.0.0
listening-port=3478
#↓ turnsを使わないならtlsいらないです
tls-listening-port=5349
fingerprint
use-auth-secret
total-quota=0
bps-capacity=0
# ポートは範囲を少なくしてもいいですユーザー規模などによって変えてください。
min-port=49152
max-port=65535

起動用サービスの作成

sudo vi /etc/systemd/system/turnserver.service

以下を貼り付けてください
とりあえずのやつなので必要があれば変更してください。

[Unit]
Description=Coturn TURN Server
After=network.target

[Service]
Type=simple
User=turnserver
ExecStart=/usr/local/bin/turnserver -c /etc/turnserver.conf --no-cli
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target

有効化と起動

sudo systemctl daemon-reload
sudo systemctl enable turnserver --now

Nginx(証明書更新用)

cronで更新しているのでメモです。
実際httpsに転送する必要がないので443消して80だけでいいです。

server {
server_tokens off;

listen 80;
listen [::]:80;
server_name turn.momijiina.tech;
return 301 https://$host$request_uri;
}
server{
server_tokens off;

listen 443 http2;
server_name turn.momijiina.tech;

ssl_certificate /etc/letsencrypt/live/turn.momijiina.tech/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/turn.momijiina.tech/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;

location ^~ /.well-known/acme-challenge {
root /var/www/html;
}

location = /.well-known/acme-challenge/ {
return 404;
}

}

証明書更新後に自動でコピーする

証明書更新の度に手動更新はめんどくさいのでスクリプトを作成します。
注意としてまだ証明書更新時に動いたか確認とれてないので2か月後とかに問題あれば更新します

自動実行スクリプトファイル作成

sudo vi /etc/letsencrypt/renewal-hooks/deploy/coturn-copy-restart.sh

以下をコピー(ドメインは変更)

#!/bin/bash
cp /etc/letsencrypt/live/turn.momijiina.tech/fullchain.pem /etc/turnserver/
cp /etc/letsencrypt/live/turn.momijiina.tech/privkey.pem /etc/turnserver/
chown turnserver: /etc/turnserver/fullchain.pem /etc/turnserver/privkey.pem
chmod 600 /etc/turnserver/fullchain.pem /etc/turnserver/privkey.pem
systemctl restart turnserver

権限変更

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/coturn-copy-restart.sh

無料のStunサーバー

Nextcloudで設定しておくといいStunサーバーです.
Google以外でもあるので調べてみてください。

stun.nextcloud.com:443
stun.l.google.com:19302
stun1.l.google.com:19302
stun2.l.google.com:19302
stun3.l.google.com:19302
stun4.l.google.com:19302