*해당 포스팅은 Rocky Linux 9.4를 기반으로 한 구성 정보입니다.
*텍스트 기반의 터미널 용 테트리스(vitetris)를 설치하고, 실행하는 과정을 담은 엔지니어 노트입니다.
목표: Linux 서버에 터미널 용 vitetris를 설치하고, 해당 서버를 통해 PC방 내 컴퓨터에서 vitetris 네트워크 대전이 가능하도록 네트워크를 구성하라.
1. 네트워크 구성
1) PC방 내 PC IP 설정 및 라우터 설정 (신 PC방 기준)
*TMI) PC방 내 PC의 IP주소는 모두 공인 IP이다. PC방에서 공인 IP를 사용하는데에는 여러 이유가 있는데, 그 이유는 다음과 같다.
- 일부 게임 서버는 중복된 NAT 변환을 통해 다수의 사용자가 하나의 공인 IP로 접속하면 제한을 걸거나, 접속을 거부하는 것을 방지
- NAT 장치는 트래픽을 처리하고 변환하는 데 추가적인 부하가 걸리게 되는데, 이는 성능 저하를 초래할 수 있기 때문에 이를 방지하여 성능을 향상
- 공인 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에서 네트워크 환경 설정하기
*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
vitetris Link: vitetris: Text-mode Tetris for Linux (victornils.net)
힘들지만 오늘도 해낸 나를 위한 한 마디,
"A winner is just a loser who tried one more time", George M. Moore Jr.
포기하고, 좌절하고 싶을 때, 한번 더 시도하는 것이 승자가 되는 길이다.
'System > Linux' 카테고리의 다른 글
[Linux] 도대체 프로세스가 뭐야?(프로세스 관리 명령어) (0) | 2024.09.19 |
---|---|
[Linux] 파일 소유권 & 권한 / 특수 권한 (0) | 2024.09.19 |
[Linux] 하드 링크 & 심볼릭 링크 / 파일 관리 명령어 (0) | 2024.09.12 |
[Linux] Rocky Linux에 Apache Web Service Demon 패키지 설치하기 (0) | 2024.09.12 |
[Linux] 디렉토리 구조 & 관리 명령어 / 절대 경로 & 상대 경로 (4) | 2024.09.11 |