오늘은 WebRTC 나 VoIP 같은 분야에서 쓰이는 STUN 서버 패키지인 STUNTMAN 을 

PC 리눅스 서버에 설치하는 과정을 쓰려고 합니다. 

인터넷 참조는 다음을 참조 하시면 편합니다. 

(**) STUNTMAN Open source STUN server software
http://www.stunprotocol.org/
(**) github - STUNTMAN Open source STUN server software
https://github.com/jselbie/stunserver
설치 과정은 다음과 같은 두개의 리눅스 머신에서 진행하려 합니다. 

하나는 공인 IP 를 가진 서버와 또 하나는 사설 IP 를 가진 서버에서 진행합니다. 
공인 IP 를 갖는 서버는 STUNTMAN 패키지의 STUN 서버 데몬이 동작하여 STUN 서비스를 제공할 서버이고 
사설 IP 를 가진 서버는 STUN 서버가 정상적으로 동작하는 지에 대하여 시험할 서버입니다.
STURN 서비스를 제공할 서버의 정보는 다음과 같습니다. 

뭐 이 서버 IP 는 공개되도 상관없으니 일단 IP 부분은 그대로 공개하겠습니다. 

그렇다고 이 IP 서버를 해킹은 하지 마셨으면 합니다. 제발~~~

IP : 211.50.237.118 
OS 패키지 : 우분투 14.04.1 LTS
HW : HP Proliant DL380p G8 

사전에 설치된 도커 환경으로 동작시킬 예정입니다. 

STURN 프로그램이 동작하기 위해서 시험 과정의 의존성 및 기타 문제를 회피하기 위해서 입니다. 
우선 다음과 같은 식으로 원격지 공인 IP 로 접근합니다. 

$ ssh 사용자@211.50.237.118 
다음과 같은 도커 설치를 확인합니다.

$ docker version
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2.1
Git commit (server): 990021a

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               b39b81afc8ca        12 weeks ago        188.3 MB
STUN 서비스 적용 서버에서 Docker 이미지를 다음과 같은 과정을 통해 만듭니다. 

먼저 작업 디렉토리를 만듭니다.
$ cd ~
$ mkdir stuntman
$ cd stuntman
다음과 같이 소스를 받습니다.

$ wget http://www.stunprotocol.org/stunserver-1.2.7.tgz
$ tar zxf stunserver-1.2.7.tgz
다음과 같은 Dockerfile 파일을 작성합니다.
=====[Dockerfile]==============================================================
FROM ubuntu:14.04
MAINTAINER David You <frog@falinux.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update
RUN apt-get update && apt-get install -y g++ make libboost-dev libssl-dev

ADD ./stunserver /stunserver
WORKDIR /stunserver
RUN make 
EXPOSE 3478

CMD     ["/stunserver/stunserver"]
===========================================================================
도커 이미지를 빌드 합니다.
$ cd ~/stuntman
$ docker build --tag stunserver:1.2 ./

빌드된 이미지를 확인합니다.
~/stuntman$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
stunserver          1.2                 c74dfd846636        About a minute ago   479.2 MB
 :
 
다음과 같은 빌드 환경을 실행 스크립트를 만듭니다.

=====[stunserver.sh]=============================================================
#!/bin/bash
docker run --name="stunserver" -d -p 3478:3478/udp -p 3478:3478/tcp  stunserver:1.2 
==========================================================================

이 파일의 실행 권한을 다음과 같이 바꿉니다.
$ chmod 755 stunserver.sh
다른 사람들도 이용이 가능하도록 다음에 복사합니다. 

$ sudo cp -a stunserver.sh /usr/bin/

실행 시킵니다.

$ stunserver.sh

STUN 클라이언트 시험 용 로컬 서버에서 Docker 이미지를 만들기 위해 다음과 같이 진행합니다. 

먼저 작업 디렉토리를 만듭니다.

$ cd ~
$ mkdir stuntman
$ cd stuntman
행행
다음과 같이 소스를 받습니다. 

$ wget http://www.stunprotocol.org/stunserver-1.2.7.tgz
$ tar zxf stunserver-1.2.7.tgz

다음과 같은 Dockerfile 파일을 작성합니다.

=====[Dockerfile]============================================================
FROM ubuntu:14.04
MAINTAINER David You <frog@falinux.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update
RUN apt-get update && apt-get install -y g++ make libboost-dev libssl-dev

ADD ./stunserver /stunserver
WORKDIR /stunserver
RUN make 
CMD     ["bash"]
==========================================================================

이미지를 빌드 합니다. 

$ cd ~/stuntman
$ docker build --tag stunclient:1.2 ./

빌드된 이미지를 확인합니다. 

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
stunclient          1.2                 ebc51ba4784f        15 seconds ago      466 MB
 :

다음과 같이 실행합니다. 

$ docker run --name="stunclient" --rm -i -t stunclient:1.2 
root@d94550489573:/stunserver#

다음과 같이 서버를 시험합니다. 

# ./stunclient --verbosity 2 211.50.237.118 
Resolved 211.50.237.118 to 211.50.237.118:0
config.fBehaviorTest = false
config.fFilteringTest = false
config.timeoutSeconds = 0
config.uMaxAttempts = 0
config.addrServer = 211.50.237.118:3478
socketconfig.addrLocal = 0.0.0.0:0
Sending message to 211.50.237.118:3478
Got response (56 bytes) from 211.50.237.118:3478 on interface 172.17.0.5:60364
Binding test: success
Local address: 172.17.0.5:60364
Mapped address: 121.134.169.166:60364

현재 다음과 같이 STUN 서버를 통하여 현재 클라이언트 스템 정보를 얻어 왔다는 것을 확인 할 수 있습니다. 

공인 IP 는 121.134.169.166 이다. 
로컬 IP 는 172.17.0.5 이다. 

도움이 되시길...