WebRTC - Coturn 서버 설정

오늘처음해요·2024년 11월 18일
0

들어가기에 앞서

WebRTC 기술은 사실상 서로 다른 네트워크 환경의 사용자를 어떻게 연결할 수 있을까 / 클라이언트와 서버의 부하를 어떻게 나눌까를 주로 고민해야 하는 기술이라고 생각하면 된다.

기본적으로 3가지의 ICE candidates이 있는데

  1. Host Candidates - 같은 로컬 네트워크 환경에 있는 경우 / 로컬 IP 주소로 연결
  2. Server Reflexive Candidates - NAT 뒤에 있는 사용자와 연결이 필요한 경우. / STUN 서버를 통해 공인 IP/Port 번호를 알아냄

NAT 뒤의 사용자란?
간단하게 설명하면 공유기/와이파이 환경에서 사용하는 사용자를 연결하는 사용자이다. 공유기는 NAT를 통해 내부 네트워크와 외부 네트워크 간의 트래픽을 관리한다. 내부 네트워크의 사설 IP 주소를 공인 IP 주소로 변환하여 외부와 통신할 수 있도록 한다.

  1. Relayed Candidates - 1,2번 방식으로 연결이 안될 때 사용되며 가장 마지막의 연결 후보이다. TURN 서버를 중계하여 데이터를 전송한다.

NAT의 방식도 Cone류 방식과 Symmetric 방식으로 나누어지게 되는데, Symmetric 방식의 경우 TURN 서버 중계가 필요하다.

따라서 WebRTC로 각 사용자의 오디오/비디오를 P2P로 연결하려면 필수적으로 STUN/TURN 서버가 필요하다.


Coturn

WebRTC용 STUN/TURN 서버를 만들 때 주로 Coturn이 활용된다.
WebRTC 프로젝트에서 OpenVidu를 사용하는 경우도 있는데 여기도 Coturn이 내재되어 있다.

Docker를 통해 Coturn을 설정하는 방법을 공유드리지만 환경에 따라 추가적인 작업이 필요할 수 있다.
(WebRTC는 TLS가 필수적이고, 해당 설정은 추후에 추가하겠다.)

1. 폴더 만들기

# 폴더 만들기
mkdir coturn-server
cd coturn-server

2. docker-compose.yml 설정

vim docker-compose.yml
# docker-compose.yml 파일
services:
  coturn:
    image: coturn/coturn:latest
    container_name: coturn-server
    restart: always
    ports:
      - '3478:3478/udp'
      - '3478:3478/tcp'
      - '5349:5349/udp'
      - '5349:5349/tcp'
      - '49152-49200:49152-49200/udp'
    volumes:
      - ./turnserver.conf:/etc/turnserver.conf:ro
    command: turnserver -c /etc/turnserver.conf --verbose

포트의 범위는 일부러 작게 설정하였으니 coturn-docker참고해서 결정하면 된다.

3. turnserver.conf 설정

vim turnserver.conf
# turnserver.conf 파일

listening-port=3478
tls-listening-port=5349
listening-ip=0.0.0.0
relay-ip=0.0.0.0

# 인증 방식 설정
lt-cred-mech
fingerprint

# 실제 서버의 외부 IP로 변경하세요
external-ip=[공인 아이피]

# 사용자 인증 정보 (실제 값으로 변경하세요)
user=[ID]:[PW]
realm=[realm]
server-name=[server.name]

# 미디어 포트 범위
min-port=49152
max-port=65535

verbose

4. Coturn 실행/끄기

# coturn-server 폴더 내에서

실행 : docker-compose up -d

끄기 : docker-compose down

5. 예상 되는 문제들

0개의 댓글