🧩 BE
home

홈서버 구축기

Date
2024/11/06
Category
Computer Science
Tag
Network
Detail

개요

BOAZ ADV 세션으로 진행했던 LP 프로젝트가 개인적으로 가장 흥미있게 개발했던 프로젝트이기도 하고, 그만큼 언젠간 고도화해서 실사용자를 받아보고 싶은 마음이 있었다.
하지만 비용은 혼자내는것이 아니기에.. 기존 AWS 인스턴스를 활용하며 비용 때문에 서버를 내려뒀었다. 그런데 때마침 남는 노트북이 생겨서 이걸 그냥 두자니 아쉽고, 홈서버로 전환해서 온프레미스 환경을 구성해보고 싶었다. 손 덜덜 떨면서 AWS 옵션 고르던 과거의 나…

홈서버가 그렇게 좋다며

그럼 홈서버로 전환하면 뭐가 좋을까?
1.
일단 좀 멋있다. (멋진 CLI)
다들 개인 서버 하나 돌리고 사는 로망은 있으니까..
2.
비용 절감 (장기적)
남의 컴퓨터 빌려다 쓰면서 지속적으로 발생하는 비용이 당연히 없다. 근데 사실 이것도 노트북이 남아서 쓴다는게 공짜처럼 보이지만, 노트북 자체가 제일 큰 비용이긴 하다. 하지만 장기적으로는 훨씬 큰 이득이니까!
3.
자유로운 제어권
로컬 네트워크, VPN, 네트워크 속도, 보안 모두 내가 자유롭게 커스텀 할 수 있다. 네트워크 이외에도, OS나 서비스를 마음대로 최적화 할 수 있다.
4.
데이터 소유권
실 데이터 자체를 내가 가지고 있으니까 외부 유출에 대한 걱정이 없다.

좋으면 너도 해

그럼 홈서버를 쓰면 단점은 뭘까?
1.
초기 비용
위에서 말했듯, 노트북이나 데탑 같은 물리적 장비를 일단 구매하는게 가장 큰 비용이다.
2.
유지보수 부담
다 내꺼인 만큼 다 내가 건드려야한다. 네트워크 장애, 하드웨어 고장, 보안 업데이트 모두 내가 직접 해야한다.
3.
전기세 부담
안그래도 무중단 배포가 어쩌고 하는데 막상 서버가 꺼지면 안되니까.. 24시간 전기를 잡아먹긴 한다.
4.
인터넷 회선의 한계
결국 가정용 인터넷은 속도가 빠른편은 아니라, 외부 접속시에 성능 한계가 존재한다.
5.
스케일 아웃 어려움
노트북 한 대 더 사?
막상 적고보니 비용 말고는 크게 장점이 없는 것 같긴 하다. 그래도 뭐.. 돈 아끼는게 최고 아닐까?

홈서버 구축 단계

다음의 절차로 홈서버 구축을 진행했다.
1.
윈도우 OS 포맷
2.
리눅스 설치
3.
네트워크 세팅
4.
개발환경 세팅

1. 윈도우 OS 포맷

일단 기존 윈도우 OS에 들어있는 필요한 데이터를 모두 백업해두고, OS를 포맷해야한다.

2. 리눅스 설치

2.1. Ubuntu ISO 파일 다운로드

노트북의 BIOS로 진입해서 리눅스를 설치하기 위해서는 부팅 USB가 필요하다. 나는 Ubuntu Linux Server를 선택했다. 일단 오픈소스이고, 우분투 다들 많이 쓰는만큼 내부 설정이나 장애 대응에 대한 레퍼런스가 많을 것이라 생각했다. 또 GUI를 지원하는 Desktop 버전이 아닌 CLI로 구동되는 Server를 선택한건 화면 구성에 대한 리소스를 조금이라도 줄이고 싶어서 선택했다. 또 명령어가 편하기도 하고, 솔직히 Linux GUI는 조작감도 별로라 굳이? 라는 생각.

2.2. 부팅 가능한 USB 드라이브 만들기

부팅이 가능한 USB 드라이브를 만들기 위해서는 Rufus를 깔아야한다.
맥으로 하려했더니 파일이 죄다 .exe 확장자라 윈도우 환경에서 설정했다.
여기서 시작 버튼을 누르면, USB 내부 데이터를 모두 포맷한다.
이제 BIOS로 진입해서 설치한 Linux를 부팅한다. USB를 끼우고 노트북 전원을 켠 뒤, F2를 연타하면 BIOS로 진입하게 된다. F8로 부팅할 디스크를 설정할 수 있는데, 그 전에 Boot Priority를 UEFI를 우선으로 설정해주자. 안그럼 자꾸 Windows가 켜진다.
부팅하고 이것저것 설정해주면 설치가 완료된다. 나는 네트워크 연결은 우선 하지 않고 내부 자원 설정만 해주었다.

3. 네트워크 세팅

내부 네트워크 연결

우선 ip a 명령어로 어떤 네트워크를 사용할 수 있는지 확인한다.
이제 netplan 설정 파일을 수정하여 수동으로 네트워크를 설정한다.
sudo nano /etc/netplan/01-netcfg.yaml 명령어로 아래와 같이 수정한다.
network: version: 2 ethernets: eno2: dhcp4: no
YAML
복사
이후 sudo netplan apply 로 적용해주면 되는데, 그럼 Permissions for /etc/netplan/01-netcfg.yaml are too open. Netplan configuration should NOT be accessible by others 라는 주의 메시지가 발생한다.
이건 설정 파일의 권한이 너무 널널해서, 보안상 수정이 필요하다는 뜻이고,
sudo chmod 600 /etc/netplan/01-netcfg.yaml 이 명령어로 root권한만이 읽고 쓸 수 있게 해주면 된다.
이후 ip a로 확인해보면, 내 IP 주소인 192.168.35.2/24 주소를 정상적으로 받아와서, state UP 상태인 것을 볼 수 있다.
구글 DNS 서버로 핑 테스트 해봤다.

고정 IP 설정

공유기는 DHCP 서버 역할을 하고, 서버는 공유기에게 IP를 요청하는 구조인데, 재부팅하거나 네트워크 변동이 생기면 언제든지 다른 IP를 줄 수도 있다. 그럼 포트포워딩에서 설정한 내부 IP가 틀어져서 접속이 안되는 상황이 발생하게 된다.
여기서 DHCP 클라이언트 범위를 기존에 2~253 범위로 설정되어 있는걸 확인할 수 있는데, 그 사이의 IP주소를 고정하여 사용이 가능하다. 나는 37로 고정했다.
공유기 설정에서 이렇게 적용했으면, 서버에 가서 netplan을 수정해준다.
network: version: 2 ethernets: eno2: dhcp4: no addresses: - 192.168.35.37/24 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 routes: - to: 0.0.0.0/0 via: 192.168.35.1
YAML
복사
nameservers 설정은 굳이 안해줘도 된다.

포트포워딩

혼자 집에서만 작업할거라면 굳이 필요없지만, 카페에서 작업하거나 팀프로젝트 서버를 이 서버로 활용할때 팀원들의 접속을 위해서는 포트포워딩이 필요하다. ssh 22번 포트를 열어준다.
80번 포트는 나중에 웹서버로 요청받을 때, 8080으로 WAS로 넣어주기 위해 미리 설정해두었다.

도메인 구입

근데 팀원들에게 포트를 열여주면, 접속할 때 결국 내 Public IP가 노출된다. 공인 IP를 완전히 감추기 위해선 VPN이나 Cloudflare, 리버스 프록시 같은 설정을 해야하는데, 꽤나 어렵고 귀찮기 때문에 일단 도메인을 하나 구입해서 사용하기로 했다.
혹시 ooni 있나 싶어서 찾아봤는데, .site로 하나 싸게 팔고 있었다. 바로구매.
DNS 설정 이후, 구매한 도메인으로 접속을 시도해보면?

4. 개발환경 세팅

디스크 용량

시간대 설정

노트북 전원 설정

Reference