System/Linux

[Linux] Linux 서버를 통해 PC방에서 Tetris 대결을 할 수 있게 하자!

Yoonsoo Park 2024. 9. 14. 15:35

*해당 포스팅은 Rocky Linux 9.4를 기반으로 한 구성  정보입니다.

*텍스트 기반의 터미널 용 테트리스(vitetris)를 설치하고, 실행하는 과정을 담은 엔지니어 노트입니다.

 

목표: Linux 서버에 터미널 용 vitetris를 설치하고, 해당 서버를 통해 PC방 내 컴퓨터에서 vitetris 네트워크 대전이 가능하도록 네트워크를 구성하라.

 

1. 네트워크 구성 

Topology

 

1) PC방 내 PC IP 설정 및 라우터 설정 (신 PC방 기준)

 

*TMI) PC방 내 PC의 IP주소는 모두 공인 IP이다. PC방에서 공인 IP를 사용하는데에는 여러 이유가 있는데, 그 이유는 다음과 같다.

  1. 일부 게임 서버는 중복된 NAT 변환을 통해 다수의 사용자가 하나의 공인 IP로 접속하면 제한을 걸거나, 접속을 거부하는 것을 방지
  2. NAT 장치는 트래픽을 처리하고 변환하는 데 추가적인 부하가 걸리게 되는데, 이는 성능 저하를 초래할 수 있기 때문에 이를 방지하여 성능을 향상
  3. 공인 IP를 할당을 통해 네트워크 트래픽을 추적하거나 문제를 해결할 때 더 명확하게 관리 가능

 

1. IP 설계

  • 부여받은 네트워크 대역: 31.47.10.128 /26
    • 전체 IP: 31.47.10.128 ~ 31.47.10.191
    • 가용 IP: 31.47.10.129 ~ 31.47.10.190
    • network addr: 31.47.10.128
    • broadcast addr: 31.47.10.191
    • gateway addr: 31.47.10.190
  • PC 방 내 PC가 4대 있다고 가정 
    • PC1: 31.47.10.130
    • PC2: 31.47.10.135
    • PC3: 31.47.10.140
    • PC4: 31.47.10.145

2. 라우터 설정 

//PC방 내부 네트워크 인터페이스 IP 설정
R1(config) # interface fa 1/0 
R1(config-if) # no sh
R1(config-if) # ip address 31.47.10.190 255.255.255.192

//ISP 라우터 쪽 인터페이스 IP 설정
R1(config) # interface serial 1/0 
R1(config-if) # no sh
R1(config-if) # ip address 112.9.12.10 255.255.255.252

//OSPF 설정(라우팅 프로토콜)
R1(config) # router ospf 1
R1(config-router) # network 112.9.12.8 0.0.0.3 area 0  *PC방 내부 네트워크 광고
R1(config-router) # network 31.47.10.128 0.0.0.63 area 0  *ISP 라우터 쪽 게이트웨이 네트워크 광고

 

2) ISP 라우터 설정

*OSPF의 Area Number를 모두 같게 해야 링크 상태 데이터베이스(Link State Database)가 공유되어 라우팅 테이블이 동기화된다.

//인터페이스 IP 설정
ISPRouter1(config) # interface serial 1/0 
ISPRouter1(config-if) # no sh
ISPRouter1(config-if) # ip address 112.9.12.1 255.255.255.252

ISPRouter1(config) # interface serial 1/1 
ISPRouter1(config-if) # no sh
ISPRouter1(config-if) # ip address 112.9.12.5 255.255.255.252

ISPRouter1(config) # interface serial 2/0 
ISPRouter1(config-if) # no sh
ISPRouter1(config-if) # ip address 112.9.12.9 255.255.255.252

ISPRouter1(config) # interface serial 2/1 
ISPRouter1(config-if) # no sh
ISPRouter1(config-if) # ip address 112.9.12.13 255.255.255.252

//OSPF 설정
ISPRouter1(config) # router ospf 1
ISPRouter1(config-router) # network 112.9.12.0 0.0.0.3 area 0
ISPRouter1(config-router) # network 112.9.12.4 0.0.0.3 area 0
ISPRouter1(config-router) # network 112.9.12.8 0.0.0.3 area 0
ISPRouter1(config-router) # network 112.9.12.12 0.0.0.3 area 0

 

 

2. 서버 구성(vitetris 설치)

1) Linux 서버 네트워크 환경 구성 

 wget을 이용해 vitetris를 설치할 수 있는 네트워크 환경을 nmtui 명령어를 이용해 구성한다.  

*nmtui: 네트워크 관리 도구(NetworkManager)의 터미널 기반 사용자 인터페이스(TUI)

 

1. nmtui 실행

[root@  ~]# nmtui

 

2. nmtui에서 네트워크 환경 설정하기 

<1. nmtui 최초 화면에서 Edit a connection으로 들어간다>
<2. Ethernet network Edit.>
<3. IP, Default Gateway, DNS 설정>
<4. Activate a connection>
<5. connection 상태를 한번 껐다 켜준다 - 네트워크 설정을 반영하기 위해서>

 

*DNS 서버가 설정돼있지 않으면 wget 명령어가 도메인 네임을 DNS 서버를 통해 IP주소로 해석할 수 없기 때문에  파일이 다운로드되지 않는다. (168.126.63.1 => KT의 공용 DNS 서버)

 

2) vitetris 설치

1. gcc 설치 

*gcc(GNU C Compiler): 리눅스용 C 언어로 작성된 소스코드를 실행파일로 만들어주는 프로그램

[root@  ~]# dnf install gcc

 

2. wget을 이용해 vitetris의 소스코드를 다운

*wget이란?

[root@  ~]# wget https://github.com/vicgeralds/vitetris/archive/refs/heads/master.zip

 

3. master.zip이라는 압축 파일이 생겼다면, 다운 받은 파일의 압축을 해제

[root@  ~]# unzip master.zip

 

4. 압축 해제된 후 생성된 vitetris-master/ 디렉토리로 이동

[root@  ~]# cd vitetris-master

 

5. configure 스크립트를 통해 소스코드 컴파일 전 환경 설정(시스템 설정 및 의존성 라이브러리 확인)

[root@  vitetris-master]# ./configure

 

6. 소스 코드 컴파일하여 실행 파일(바이너리) 생성

*해당 단계까지 완료되면 ./tetris 를 통해 tetris 실행 가능

[root@  vitetris-master]# make

 

7. 컴파일된 실행 파일을 설치

*실행 파일(tetris)를 /usr/local/bin/이나 /usr/bin/ 같은 시스템 경로에 복사(명령어처럼 사용 가능)

[root@  vitetris-master]# make install
[root@  vitetris-master]# tetris ==> Tetris 실행

 

*(컴파일 내용에 오류가 생겼을 경우)

[root@  ~]# make clean ==>  컴파일 내용 제거

 

8. (추가) Tetris 게임 서버로 사용하는 방법

[root@  vitetris-master]# make gameserver ==> 소스 코드를 컴파일
[root@  vitetris-master]# ./gameserver ==> gameserver 실행 파일 실행

 

* 게임 접근이 안된다면, Linux 서버 방화벽 확인(방화벽을 차단해야 접근이 가능하다)

systemctl status firewalld.service => 방화벽 상태 확인

systemctl start  firewalld.service => 방화벽 active

systemctl stop firewalld.service => 방화벽 inactive

<systemctl status firewalld.service>

 

vitetris Link: vitetris: Text-mode Tetris for Linux (victornils.net)

 

vitetris: Text-mode Tetris for Linux

Now on GitHub! vitetris is a terminal-based Tetris clone by Victor Nilsson Geraldsson. Gameplay is much like the early Tetris games by Nintendo. Features include: Configurable keys Highscore table Two-player mode with garbage Network play Joystick (gamepad

www.victornils.net

 

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디,

"A winner is just a loser who tried one more time", George M. Moore Jr.

 

포기하고, 좌절하고 싶을 때, 한번 더 시도하는 것이 승자가 되는 길이다.