TURN 서버 구축하기 (feat.wls, docker, eturnal, vm)

강정우·2024년 5월 31일
0

Dev_Ops

목록 보기
17/20
post-thumbnail

window server 에 wls 설치

wls 란?

WSL (Windows Subsystem for Linux)을 사용하면 Windows PC의 기본 파일 시스템과 리소스에 접근할 수 있으면서도, Linux 명령줄 환경과 도구를 사용할 수 있다.
이것은 Windows와 Linux 간의 강력한 통합을 제공하며, 사용자는 두 운영 체제의 장점을 결합하여 활용할 수 있다.

  1. 파일 시스템 접근: WSL을 통해 Windows 파일 시스템에 접근하고, Windows에서 생성한 파일을 Linux 환경에서 직접 읽고 수정할 수 있다.
    반대로, Windows에서도 WSL의 Linux 파일 시스템에 접근할 수 있다.

  2. 시스템 리소스 공유: WSL은 Windows와 동일한 시스템 리소스를 사용한다. 예를 들어, CPU, 메모리, 네트워크 인터페이스 등 말이다. 이것은 WSL이 가상 머신처럼 별도의 리소스 할당을 받는 것이 아니라, 호스트 OS의 리소스를 공유한다는 것을 의미한다. 따라서 훨씬 좋은 성능으로 Linux 환경 개발이 가능하다.

  3. 별도의 시스템 환경: WSL은 Linux 명령줄 환경을 제공하지만, 이는 별도의 Linux 배포판을 실행한다는 것을 의미한다.
    즉, Linux 명령줄을 사용하는 것이지만, 실제로는 Windows 내에서 Linux 배포판을 실행하고 있는 것이다. 이 때문에, Linux 특정 시스템 호출이나, 특정 Linux 기능 (WSL 1에서는 일부 제한적)을 사용할 수 있다.

  4. WSL 2와 가상화: WSL 2는 가볍게 가상화된 환경을 사용하여 Linux 커널을 실행한다. 이는 WSL 1과 비교했을 때, 더 나은 성능과 Linux 시스템 호출의 완전한 호환성을 제공한다. WSL 2는 Windows와 Linux 간의 경계를 더욱 흐리게 만들지만, 여전히 내부적으로는 가상 머신 기술을 사용하여 구현된다.

결론적으로, WSL을 사용하면 Windows PC에서 Linux 명령줄 환경과 도구를 사용할 수 있지만, 이것은 Windows와 Linux의 시스템과 리소스를 공유하면서도, 실제로는 별도의 Linux 시스템 환경을 제공한다는 것을 의미합니다.

powershell 을 열고 아래 명령어를 입력해주면 알아서 "wls 2 설정" ~ "ubuntu LTS 버전 설치" 까지 알아서 다 해준다.

wsl --install

wls2 고정 IP 할당

허나 wls 2 의 문제는 변동 IP 이다. 따라서 고정 IP 를 할당할 수 있도록 해보자. 원글

  • 정확하게는 ip를 고정시켜주는게 아니라 스케줄러에 등록하여 매 부팅마다 wsl2의 ip를 가져온 뒤 내부 포워딩만 다시 해주는 스크립트이다.
  1. WSL 2 머신의 IP 주소 가져 오기
  2. 이전 포트 전달 규칙 제거
  3. 포트 전달 규칙 추가
  4. 이전에 추가 한 방화벽 규칙 제거
  5. 새로운 방화벽 규칙 추가
$remoteport = bash.exe -c "ip addr show eth0 | grep 'inet ' | awk '{print `$2}' | cut -d'/' -f1"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
  $remoteport = $matches[0];
} else{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]
#All the ports you want to forward separated by coma
$ports=@(9000); # 여기에 본인이 원하는 포트들 선언

#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";

#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

위 스크립트에서 $ports 만 본인이 원하는 포트 번호로 할당해주면 된다. 만약 여러개를 설정하고 싶다면 그냥 , 로 이어주면 된다. @(80, 443)

vi /etc/ssh/sshd_config

Port의 값을 변경한다. SSH 기본 포트는 22인데, 이는 윈도우에서 이미 사용 중인 포트이기 때문에 WSL에서는 다른 값으로 바꿔줘야 한다. 적당히 2222로 했다.

PasswordAuthentication의 값을 yes로 바꿔준다. 패스워드 인증을 사용하도록 설정하는 것이다.

저장 후 SSH 서버를 재시작해준다.

sudo service ssh --full-restart

공피 포트 2222 라면 사피 포트 2222 로 들어오도록 설정 또 2222 번 포트 방화벽 허용 설정


wls 에 coturn 설치

사실 coturn 설치하는 것은 굉장히 쉽다.

coturn 설치

// 패키지 설치를 위한 업데이트
sudo apt update

// coturn 설치
sudo apt-get install coturn

// 설정파일 nano
sudo vim /etc/default/coturn

// 설정파일 nano
sudo vi /etc/turnserver.conf

이때, 기본 설정 파일을 살리고 싶다면 cp 로 복사해두면 된다.

sudo cp turnserver.conf ./turnserver.conf.copy

turnserver.conf 설정

위에서 복사해둔 복사본이 있기 때문에 그냥 안에 내용물 전부 밀고 아래 내용을 복붙해도 무관하다.

listening-port=3478 주석 해제
external-ip = <본인 공인 IP>/<본인 사설 IP> 
min-port , maxport, verbose 주석 해제 
fingerprint ---> 들어왔던 유저는 지문 유지 주석해제

it-cred-mech --->인증방식 주석해제
기본 유저 설정 

user=username1:password1 주석 해제 후 원하는 내용으로 변경

서비스 재시작 및 서비스 잘 돌아가는지 확인

// 서비스 재시작
sudo service coturn restart

// 현재 LISTEN 중인 포트 확인 
netstat -nap | grep LISTEN

혹은 window 니까 docker desktop 으로 진행해도 될듯 싶었으나

docker 로 coturn 설치

다음으로 아래 명령어를 통해 설치 및 실행을 해주면 된다.

docker run -d -p 3478:3478 -p 3478:3478/udp -p 5349:5349 -p 5349:5349/udp -p 49152-65535:49152-65535/udp coturn/coturn

하지만 아무리 공식문서를 보고 진행해도 turn 서버가 원하는대로 동작하지 않았다.

reference

wls 설치
linux 수동 설치
윈도우 데스크톱 도커 설치
44bits blog
forest71 blog
wls 고정 ip 할당

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글