미꾸라지 SP: 중계 서버 설치

Note

문서에 오류가 있거나 건의 사항이 있으시면 메세지를 미꾸라지 포럼 (https://mudfish.net/forums/9) 에 남겨주세요.

이 문서는 미꾸라지 Server (혹은 미꾸라지 중계 서버) 를 운영하고자 하는 분들을 위한 것으로 환경 설정 및 실행 절차에 대해 기술하고 있습니다.

현재 미꾸라지 Server 는 다음과 운영체제 환경에서 돌아갈 수 있도록 설계되어 있습니다.

  • Amazon Linux - EC2 (64 bit)

    Macro instance 상에서도 무리 없이 돌아가야 합니다. :-)

  • CentOS 5.x 와 6.x (64 bit)

주의사항

Warning

미꾸라지 Server 패키지의 경우, 프로그램 설치 시 아래와 같은 내용이 자동으로 중앙 서버에 보고되게 되어 있습니다. 아래의 내용을 주의 깊게 읽으시고 동의하지 않는다면 설치를 자제해 주시기 바랍니다.

  1. /var/log/messages 파일에서 미꾸라지 관련 서버 프로그램의 Warning, Error 등등 이상 오류가 발생될 시 해당 내용이 미꾸라지 중앙 서버로 자동 전송 및 수집 됩니다. 미꾸라지 Server 프로세스와 관련된 내용만 해당됩니다.
  2. 미꾸라지 Server 프로그램을 통해 발생되는 Traffic 자료가 중앙 서버로 전송 및 수집됩니다. 사용자별 혹 서버별 traffic 산출에 사용됩니다.
  3. 주기적인 heartbeat 신호를 중앙 서버로 전달되게 됩니다. 이는 중계 서버의 alive 여부를 따져 사용자로 하여금 어떤 서버가 살아있고 죽었는지를 알수 있도록 하기 위해서입니다.
  4. 중계 서버와 미꾸라지에서 제공되는 게임 서버 (Backend 서버) 간의 RTT (Round Trip Time) 이 계산되어 중앙 서버로 전송 및 수집되게 됩니다. 이 정보는 미꾸라지 사용자가 마법사 메뉴를 통해 혹은 라우팅 테이블 설정을 위한 메뉴를 열었을 때 사용자 <-> 중계 서버 <-> 게임 서버 간의 RTT 정보를 보여주기 위해서입니다.

다운로드

미꾸라지 Server 프로그램은 미꾸라지 홈페이지 (http://sp.mudfish.net) 을 통해 배포하고 있습니다. 최신 버전의 패키지를 다운로드 받으시려면 홈페이지를 방문해 주세요.

설치하기

Warning

다음과 같은 환경에서 무리 없이 실행됩니다.

  • 실제 physical 한 서버
  • OpenVZ
  • KVM
  • Xen

패키지를 설치하기 위해서는 root 권한이 필요하며 아래와 같은 패키지가 dependency 로 설정되어 있습니다.

  • gcc

    Cache-Terminator 가 gcc 에 대한 의존성을 가지고 있습니다. 이유는 VCL (Varnish Configuration Language) 가 gcc 기반으로 작성되어 있기 때문입니다.

  • GeoIP

    Cache-Terminator 가 GeoIP 에 대한 의존성을 가지고 있으며, 설정을 통해 사용자의 IP 가 어떤 국가에서 왔는지 확인을 하기 위해 사용될 수 있습니다.

    Note

    만약 CentOS 5.x 상에서, yum install GeoIP 시도 시 패키지를 찾을 수 없다고 나온다면 yum repository 중 “extras” repository 가 활성화되어 있는지 확인 바랍니다.

    만약 CentOS 6.x 상에서, yum install GeoIP 시 패키지를 찾을 수 없다면 EPEL(Extra Packages for Enterprise Linux) yum repository 를 설치하셔야 합니다. 아래와 같은 명령을 통해 설치하셔서 다시 한번 더 해보시기 바랍니다.

    # cd /tmp/
    # wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    # rpm -ivh epel-release-6-8.noarch.rpm
    

위 두 패키지를 yum 명령어를 통해 우선 설치합니다.

# yum install gcc GeoIP
Loaded plugins: priorities, security, update-motd, upgrade-helper
amzn-main                                                | 2.1 kB     00:00
amzn-updates                                             | 2.3 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package GeoIP.x86_64 0:1.4.8-1.5.amzn1 will be installed
---> Package gcc.noarch 0:4.6.2-1.8.amzn1 will be installed
--> Processing Dependency: gcc46 = 4.6.2 for package: gcc-4.6.2-1.8.amzn1.noarch
--> Running transaction check
---> Package gcc46.x86_64 0:4.6.2-2.65.amzn1 will be installed
--> Processing Dependency: cpp46 = 4.6.2-2.65.amzn1 for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: libgcc46 = 4.6.2 for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: binutils >= 2.20.51.0.2-12 for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: libgomp >= 4.6.2-2.65.amzn1 for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: libmpfr.so.1()(64bit) for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: libmpc.so.2()(64bit) for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Processing Dependency: libgomp.so.1()(64bit) for package: gcc46-4.6.2-2.65.amzn1.x86_64
--> Running transaction check
---> Package binutils.x86_64 0:2.20.51.0.7-8.29.amzn1 will be installed
---> Package cpp46.x86_64 0:4.6.2-2.65.amzn1 will be installed
---> Package glibc-devel.x86_64 0:2.12-1.80.42.amzn1 will be installed
--> Processing Dependency: glibc-headers = 2.12-1.80.42.amzn1 for package: glibc-devel-2.12-1.80.42.amzn1.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.12-1.80.42.amzn1.x86_64
---> Package libgcc46.x86_64 0:4.6.2-2.65.amzn1 will be installed
---> Package libgomp.x86_64 0:4.7.2-2.69.amzn1 will be installed
---> Package libmpc.x86_64 0:0.8.2-1.4.amzn1 will be installed
---> Package mpfr.x86_64 0:2.4.2-1.7.amzn1 will be installed
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.12-1.80.42.amzn1 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.12-1.80.42.amzn1.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.80.42.amzn1.x86_64
--> Running transaction check
---> Package kernel-headers.x86_64 0:3.2.39-6.88.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package           Arch      Version                      Repository       Size
================================================================================
Installing:
 GeoIP             x86_64    1.4.8-1.5.amzn1              amzn-main       783 k
 gcc               noarch    4.6.2-1.8.amzn1              amzn-main       2.7 k
Installing for dependencies:
 binutils          x86_64    2.20.51.0.7-8.29.amzn1       amzn-main       3.6 M
 cpp46             x86_64    4.6.2-2.65.amzn1             amzn-main       4.8 M
 gcc46             x86_64    4.6.2-2.65.amzn1             amzn-main        14 M
 glibc-devel       x86_64    2.12-1.80.42.amzn1           amzn-main       1.0 M
 glibc-headers     x86_64    2.12-1.80.42.amzn1           amzn-main       648 k
 kernel-headers    x86_64    3.2.39-6.88.amzn1            amzn-updates    847 k
 libgcc46          x86_64    4.6.2-2.65.amzn1             amzn-main        98 k
 libgomp           x86_64    4.7.2-2.69.amzn1             amzn-updates    113 k
 libmpc            x86_64    0.8.2-1.4.amzn1              amzn-main        49 k
 mpfr              x86_64    2.4.2-1.7.amzn1              amzn-main       182 k

Transaction Summary
================================================================================
Install      12 Package(s)

Total download size: 26 M
Installed size: 50 M
Is this ok [y/N]: y
Downloading Packages:
(1/12): GeoIP-1.4.8-1.5.amzn1.x86_64.rpm                 | 783 kB     00:00
(2/12): binutils-2.20.51.0.7-8.29.amzn1.x86_64.rpm       | 3.6 MB     00:00
(3/12): cpp46-4.6.2-2.65.amzn1.x86_64.rpm                | 4.8 MB     00:00
(4/12): gcc-4.6.2-1.8.amzn1.noarch.rpm                   | 2.7 kB     00:00
(5/12): gcc46-4.6.2-2.65.amzn1.x86_64.rpm                |  14 MB     00:00
(6/12): glibc-devel-2.12-1.80.42.amzn1.x86_64.rpm        | 1.0 MB     00:00
(7/12): glibc-headers-2.12-1.80.42.amzn1.x86_64.rpm      | 648 kB     00:00
(8/12): kernel-headers-3.2.39-6.88.amzn1.x86_64.rpm      | 847 kB     00:00
(9/12): libgcc46-4.6.2-2.65.amzn1.x86_64.rpm             |  98 kB     00:00
(10/12): libgomp-4.7.2-2.69.amzn1.x86_64.rpm             | 113 kB     00:00
(11/12): libmpc-0.8.2-1.4.amzn1.x86_64.rpm               |  49 kB     00:00
(12/12): mpfr-2.4.2-1.7.amzn1.x86_64.rpm                 | 182 kB     00:00
--------------------------------------------------------------------------------
Total                                            15 MB/s |  26 MB     00:01
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : mpfr-2.4.2-1.7.amzn1.x86_64                                 1/12
  Installing : libmpc-0.8.2-1.4.amzn1.x86_64                               2/12
  Installing : cpp46-4.6.2-2.65.amzn1.x86_64                               3/12
  Installing : kernel-headers-3.2.39-6.88.amzn1.x86_64                     4/12
  Installing : glibc-headers-2.12-1.80.42.amzn1.x86_64                     5/12
  Installing : glibc-devel-2.12-1.80.42.amzn1.x86_64                       6/12
  Installing : libgcc46-4.6.2-2.65.amzn1.x86_64                            7/12
  Installing : libgomp-4.7.2-2.69.amzn1.x86_64                             8/12
  Installing : binutils-2.20.51.0.7-8.29.amzn1.x86_64                      9/12
  Installing : gcc46-4.6.2-2.65.amzn1.x86_64                              10/12
  Installing : gcc-4.6.2-1.8.amzn1.noarch                                 11/12
  Installing : GeoIP-1.4.8-1.5.amzn1.x86_64                               12/12
  Verifying  : binutils-2.20.51.0.7-8.29.amzn1.x86_64                      1/12
  Verifying  : glibc-headers-2.12-1.80.42.amzn1.x86_64                     2/12
  Verifying  : GeoIP-1.4.8-1.5.amzn1.x86_64                                3/12
  Verifying  : libmpc-0.8.2-1.4.amzn1.x86_64                               4/12
  Verifying  : gcc46-4.6.2-2.65.amzn1.x86_64                               5/12
  Verifying  : gcc-4.6.2-1.8.amzn1.noarch                                  6/12
  Verifying  : libgomp-4.7.2-2.69.amzn1.x86_64                             7/12
  Verifying  : libgcc46-4.6.2-2.65.amzn1.x86_64                            8/12
  Verifying  : mpfr-2.4.2-1.7.amzn1.x86_64                                 9/12
  Verifying  : cpp46-4.6.2-2.65.amzn1.x86_64                              10/12
  Verifying  : glibc-devel-2.12-1.80.42.amzn1.x86_64                      11/12
  Verifying  : kernel-headers-3.2.39-6.88.amzn1.x86_64                    12/12

Installed:
  GeoIP.x86_64 0:1.4.8-1.5.amzn1          gcc.noarch 0:4.6.2-1.8.amzn1

Dependency Installed:
  binutils.x86_64 0:2.20.51.0.7-8.29.amzn1
  cpp46.x86_64 0:4.6.2-2.65.amzn1
  gcc46.x86_64 0:4.6.2-2.65.amzn1
  glibc-devel.x86_64 0:2.12-1.80.42.amzn1
  glibc-headers.x86_64 0:2.12-1.80.42.amzn1
  kernel-headers.x86_64 0:3.2.39-6.88.amzn1
  libgcc46.x86_64 0:4.6.2-2.65.amzn1
  libgomp.x86_64 0:4.7.2-2.69.amzn1
  libmpc.x86_64 0:0.8.2-1.4.amzn1
  mpfr.x86_64 0:2.4.2-1.7.amzn1

Complete!
#

설치가 완료되었다면 이제 mudfish-server RPM 패키지를 설치합니다.

# rpm -ivh mudfish-server-1.0.0-0.x86_64.rpm
Preparing...                ########################################### [100%]
   1:mudfish-server         ########################################### [100%]

패키지의 설치는 완료되었습니다. 이제 미꾸라지 사용자가 이 중계 서버에 접속할 수 있도록 방화벽 설정을 하셔야 합니다.

방화벽 설정

미꾸라지 Server 가 정상 작동되기 위해서는 반드시 아래의 방화벽 정책이 필요합니다.

  • TCP/UDP 10007 와 10008 포트

    10007 포트와 10008 포트는 서버 데몬이 외부로부터 트래픽을 받기 위해 listening 하고 있는 포트들로써 반드시 TCP 와 UDP 모두 open 되어 있어야 합니다.

  • ICMP

    미꾸라지 중계 서버로 등록이 되는 순간부터 미꾸라지 사용자들은 해당 중계 서버로 RTT (Round Trip Time) 값을 체크하기 위해 ICMP echo 메세지를 보내게 됩니다. (사용자의 설정에 따라 UDP 혹은 TCP 프로토콜이 사용될 수 있습니다만, default 는 ICMP 입니다.) 그렇기 때문에 만약 ICMP 프로토콜이 open 되어 있지 않다면 사용자들은 RTT 계산을 할 수 없게 됩니다.

이제 방화벽이 설정되었다면 시스템을 설정할 차례입니다.

시스템 설정

시스템 설정은 두 부분으로 나누어집니다. 첫 번째는 NAT 설정이며, 두 번째는 IP forwarding 설정입니다.

아래의 명령어를 통해서 시스템을 설정할 수 있습니다. 명령을 실행하면서 오류가 발생한다면 포럼을 통해 문의 바랍니다.

# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -s 10.252.0.0/14
# /sbin/sysctl net.ipv4.ip_forward=1

만약 미꾸라지 Server v1.0.4 혹은 이상의 버전을 사용하고 계신다면 아래와 같이 추가적으로 sysctl 명령을 실행시켜 주셔야 합니다.

# /sbin/sysctl net.ipv4.icmp_echo_ignore_all=1

Note

만약 어떠한 이유로 시스템이 재부팅이 되게 되면 위에서 설정한 내용들이 초기화 된다는 사실 을 알아 두셔야 합니다. 만약 재부팅이 되어도 자동으로 위 내용이 세팅되길 원하신다면 위의 세팅을 모두 완료 후 아래의 명령을 이용해 정보를 시스템에 저장해 두세요.

# /etc/init.d/iptables save
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf

만약 미꾸라지 Server 가 시스템 재부팅시 자동 시작되길 원하신다면 아래의 명령으로 시스템에 등록해 두세요.

# /sbin/chkconfig --level 2345 mudfish-server on

이제 미꾸라지 Server 설정 파일들을 용도에 맞게 수정할 차례입니다.

설정파일

기본적으로 설정파일을 전혀 수정하지 않고 미꾸라지 Server 를 실행하신다면 default 로 다음과 같은 이름 및 정책으로 중앙 서버에 등록되게 됩니다.

  • name 파일이 없거나 내용이 비어 있다면 서버 이름은 중앙 서버에서 임의 지정한 이름으로 설정됩니다. 보통 Public IP 와 국가 코드가 등록됩니다.
  • owner_name 혹은 owner_email 에 대한 정보가 없다면 Unknown 으로 미꾸라지 웹 페이지에 나타날 것입니다.
  • users_allow 혹은 users_deny 에 대한 임의 설정이 없다면 기본적으로 모든 사용자의 접속을 허용하도록 ACL 정책이 설정됩니다.

Server 프로그램의 설정 파일은 항상 /etc/mudfish-server/ 디렉토리 하위에 놓이게 되어 있습니다. 각 설정 파일에 대해 설명하겠습니다.

  • /etc/mudfish-server/commercial_node

    만약 이 파일의 값이 True, 혹은 Yes 일 경우, 이 중계 서버는 유료 서버로 중앙 서버에 등록됩니다. 만약 무료 서버로 등록하실 생각이시면 이 파일을 생성하지 않거나, False 혹은 No 로 설정하시면 됩니다.

    $ cat /etc/mudfish-server/commercial_node
    Yes
    
  • /etc/mudfish-server/commercial_node_currency

    commercial_node_price_domestic 파일과 commercial_node_price_international 파일에 기술될 G 당 traffic 비용에 대한 통화를 기록합니다. 등록 가능한 통화는 아래의 목록과 같습니다.

    • KRW
    • USD

    유료 서버로 등록된 경우에 대해서만 유효합니다.

    $ cat /etc/mudfish-server/commercial_node_currency
    USD
    
  • /etc/mudfish-server/commercial_node_price_domestic

    이 중계 서버를 통해 국내로 전송되는 트래픽에 대해 Giga 당 traffic 비용을 나타냅니다. 소수점 밑으로의 가격이 허용되기 때문에 0.0123 와 같이 적으셔도 됩니다.

    유료 서버로 등록된 경우에 대해서만 유효합니다.

    $ cat /etc/mudfish-server/commercial_node_price_domestic
    0.0012
    
  • /etc/mudfish-server/commercial_node_price_international

    이 중계 서버를 통해 국외로 전송되는 트래픽에 대해 Giga 당 traffic 비용을 나타냅니다. 소수점 밑으로의 가격이 허용되기 때문에 0.0123 와 같이 적으셔도 됩니다.

    유료 서버로 등록된 경우에 대해서만 유효합니다.

    $ cat /etc/mudfish-server/commercial_node_price_international
    0.0015
    
  • /etc/mudfish-server/country

    자동 생성되는 파일입니다. 현재 중계 서버의 Public IP 에 대한 국가 코드가 저장됩니다.

    이 국가 코드는 GeoIP 정보를 기반으로 산출됩니다.

  • /etc/mudfish-server/name

    현재 이 중계 서버가 미꾸라지 중앙 서버에 등록될 때 사용될 서버 이름을 나타냅니다. 오직 영문자 (대소문자) 및 숫자 그리고 몇 개의 기호만 허용되며 나머지 문자들은 서버 측에서 _ 문자로 강제 치환되게 됩니다.

    Note

    GeoIP database 기반의 위치 코드 (영문자 2 자) 항상 이름 앞단에 붙게 되는 점 이해 바랍니다. 미꾸라지 사용자가 해당 중계 서버의 위치를 구분하지 못하는 문제를 개선하기 위한 조치입니다.

    $ cat /etc/mudfish-server/name
    US West (Weongyo's server)
    

    만약 이름을 변경하길 원하신다면 미꾸라지 Server 를 이름 변경 후 재시작 하시면 됩니다.

  • /etc/mudfish-server/owner_name

    Note

    미꾸라지 Server v1.0.2 이상부터 이용 가능합니다.

    현재 이 중계 서버를 운영하는 운영자의 이름 혹은 단체의 이름을 적는 파일입니다. 만약 설정하지 않는 다면 Unknown 으로 사용자에게 보여집니다.

  • /etc/mudfish-server/owner_email

    Note

    미꾸라지 Server v1.0.2 이상부터 이용 가능합니다.

    현재 이 중계 서버를 운영하는 운영자의 EMAIL 연락처 혹은 단체의 연락처를 적는 파일입니다. 사용자 혹은 미꾸라지 운영자가 개별 중계 서버 운영자에게 연락하기 위한 수단으로 사용될 수 있습니다.

  • /etc/mudfish-server/public_ip

    자동 생성 파일입니다. 미꾸라지 중앙 서버에서 보았을 때 현재 이 중계 서버의 Public IP 가 저장됩니다.

  • /etc/mudfish-server/users_allow

    만약 중계 서버를 허용한 사용자만 사용할 수 있도록 정책을 수립하기를 원하신다면 이 파일에 허용할 사용자의 미꾸라지 ID 를 적어주시면 됩니다. 그 외의 모든 사용자는 접근할 수 없게 됩니다. 한 줄에 한 ID 를 적으셔야 합니다.

    users_allow 와 users_deny 파일 모두에 미꾸라지 ID 가 동시에 올 수 없습니다.

    $ cat /etc/mudfish-server/users_allow
    weongyo
    userid1
    mijung
    
  • /etc/mudfish-server/users_deny

    만약 중계 서버를 이 파일에 나열된 사용자를 제외한 모든 사용자에게 허용하고자 한다면 이 파일에 거부할 사용자의 미꾸라지 ID 를 적으시면 됩니다.

    users_allow 와 users_deny 파일 모두에 ID 가 동시에 올 수 없습니다.

  • /etc/mudfish-server/type

    기본으로 S 문자가 들어가 있으며, 수정하실 일이 없을 겁니다. S 는 Static 의 약자로 고정 중계 서버를 표시할 때 사용됩니다. M 이 사용될 때가 있는데, 중앙 서버를 나타날 때 사용됩니다.

  • /etc/mudfish-server/v2_tapip

    자동 생성되는 파일입니다. 현재 이 중계 서버가 부여받은 Private IP 주소 대역에 관한 정보를 가지고 있습니다.

  • /etc/mudfish-server/varnishd_listen_address

    자동 생성되는 파일입니다. 내부적으로 SOCKS v4 와 v5, HTTP proxy 지원을 위해 Cache-Terminator 프로그램이 사용되는데, 이에 대한 listening address 를 세팅하는 파일입니다.

  • /etc/mudfish-server/version

    현재 사용할 미꾸라지 Server 의 버전을 가리킵니다. 미꾸라지 Server 패키지의 경우 /opt/mudfish-server/<version>/ 디렉토리에 version 별로 별도 디렉토리에 설치되게 되는데, 이 파일의 내용을 보고 어떤 버전을 사용할지 결정하게 됩니다.

실행하기

/etc/mudfish-server/ 디렉토리 아래의 설정 파일들을 모두 제대로 설정을 하였다면 아래와 같은 방법으로 미꾸라지 데몬 프로그램들을 실행할 수 있습니다.

# /etc/init.d/mudfish-server start

실행 과정에서 문제가 발생할 경우 보통 /var/log/messages 파일을 확인하시면 오류 메세지를 확인하실 수 있습니다.

이제 실행이 제대로 되었다면, 현재 서버가 제대로 미꾸라지 중앙 서버와 연동하여 등록되었는지 확인하셔야 합니다. 가장 손쉬운 방법은 아래의 링크에 들어가서 등록한 이름의 중계 서버가 존재하는지 체크하는 방법입니다.

중지하기

서버 데몬 전체를 중지하기 위해서는 아래의 명령을 실행하시면 됩니다.

# /etc/init.d/mudfish-server stop

반드시 종료 후 ps 명령어를 이용하여 프로세스 이름이 mud 로 시작되는 것이 남아 있는지 확인하시고, varnishd 프로세스 또한 실행되고 있는지 확인하시기 바랍니다.