본문 바로가기
Infra

[WebRTC] CentOS TurnServer 설치

by GOMJ 2024. 10. 5.

STUN은 NAT의 Public IP주소를 통해 클라이언트간 연결할 수 있도록 중계하는 역할을 한다.

 

하지만 공인 IP주소가 변경된 경우 STUN에 업데이트 되지 않거나, 수집한 NAT정보와 매핑에 실패하여 잘못된 정보를 전달하여 정상적인 연결에 실패하게 될 수 있다고 한다.

 

이를 해결하기 위해 TURN을 사용할 수 있다.

 

TURN은 데이터를 중계해주기 때문에 Public IP가 변경돼도 중계서버인 TURN을 통해 데이터 통신이 가능하게 한다.

 

TURN 서버는 하나의 Public IP를 가지고 이를 통해 클라이언트간 직접적으로 미디어를 릴레이하게 된다.

 

개념은 여기까지 정리하고 CentOS에서 설치법을 알아보자.

 

우분투 같은 경우 명령어 한줄이면 turnserver를 설치 해주지만 CentOS 같은 경우 dependency부터 해서 설치를 해줘야 한다.

 

sudo yum install -y make gcc cc gcc-c++ wget openssl-devel libevent libevent-devel # 의존성 설치

mkdir /root/turn # 설치할 경로 생성
cd /root/turn # 이동
wget https://coturn.net/turnserver/v4.5.1.3/turnserver-4.5.1.3.tar.gz # source파일 다운로드

tar -xvzf 4.5.1.3.tar.gz # 압축해제

cd turnserver-4.5.1.3

./configure --prefix=/usr/local/turnserver # turn 설치 경로 지정
sudo make # cmake 실행
sudo make install

# 환경 변수 세팅
sudo vim ~/.bashrc
# 맨 아래 추가
export turnserver_home=/usr/local/turnserver
export PATH=$PATH:$turnserver_home/bin

# turnserver 세팅 파일 생성
sudo vim /etc/turnserver.conf


# 세팅파일에 아래내용 복사

# Listener IP address of relay server. Multiple listeners can be specified.
# If no IP(s) specified in the config file or in the command line options,
# then all IPv4 and IPv6 system IPs will be used for listening.
listening-ip=0.0.0.0

# External IP-Address of the TURN server
external-ip=IP_ADDRESS

# TURN listener port for UDP and TCP (Default: 3478).
listening-port=3478

# 443 for TURN over TLS, which can bypass firewalls
tls-listening-port=443

# host domain name.
realm=mycompany.org

# Path to the SSL certificate and private key.
# Certificate file.
cert=/usr/local/etc/turn_server_cert.pem

# Private key file.
pkey=/usr/local/etc/turn_server_pkey.pem

# Lower and upper bounds of the UDP relay endpoints:
# Further ports that are open for communication
min-port=10000
max-port=20000

# This allows TURN credentials to be accounted for a specific user id.
# If you don't have a suitable id, the timestamp alone can be used.
# This option is just turning on secret-based authentication.
# The actual value of the secret is defined by option static-auth-secret,
use-auth-secret

static-auth-secret=<YOUR_SECRET>

# Option to set the log file name.
# By default, the turnserver tries to open a log file in
# /var/log, /var/tmp, /tmp and current directories directories
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Do not allow an TLS/DTLS version of protocol
no-tlsv1
no-tlsv1_1
no-tlsv1_2

 

실행 방법은 총 2가지가 있다.

 

  1. 직접 ip, port를 설정해서 실행
turnserver -v -r extranet-ip:port -a -o -c /etc/turnserver.conf
  1. unit을 생성해서 실행
sudo vim /etc/systemd/system/turnserver.service


#내용
Description=turnserver Service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/turnserver -c /etc/turnserver.conf
Restart=on-abort


[Install]
WantedBy=multi-user.target



#실행
sudo systemctl start turnserver

 

실행이 완료되면 다음과 같이 서버 상태 확인이 가능하다.

 

● turnserver.service
     Loaded: loaded (/etc/systemd/system/turnserver.service; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2022-11-08 01:55:37 UTC; 8s ago
   Main PID: 16193 (turnserver)
      Tasks: 7 (limit: 4440)
     Memory: 12.4M
        CPU: 27ms
     CGroup: /system.slice/turnserver.service
             └─16193 /usr/local/bin/turnserver -c /etc/turnserver.conf