얼마전부터 여러 이유를 바탕으로 직접 집에 홈서버를 구축하게 되었다. 이번 포스트에서는 어째서 홈서버를 구축하였는지, 그리고 어떻게 구축하였는지에 대해 설명하려 한다.
홈서버 구축의 이유
솔직히 말하자면, 이미 우리가 살고있는 시대에는 서버를 구축하는 것, 더 나아가서 그저 컴퓨터 한 대를 빌리는 행위 자체가 클릭 몇번으로도 가능한 시대이다. AWS, GCP, Oracle Cloud 같은 메인스트림부터 Vercel, Heroku 같은 Paas 플랫폼까지, 개발자에게 주어지는 선택지는 너무나도 많다.하지만 내가 클라우드를 사용하지 않고 직접 서버를 구축하는 이유는 몇가지가 있다.
요즘 네트워크와 운영체제와 관련하여 개인적으로 학습을 하고있는데, 홈서버를 구축해보는게 꽤나 도움이 될 것 같다.
라즈베리파이로 직접 무언가를 만드는걸 계획하고 있는데, 이때, 홈서버를 IoT 서버로 사용하면 좋을것 같다.
나중에 쿠버네티스같은 인프라 관련 기술을 익힐때, 실제 하드웨어를 엮어서 구축해볼수도 있다.
AWS는 프리티어 때문에 1년마다 재가입하는게 짜증나고, 오라클 클라우드는 회수 정책 신경쓰는게 귀찮다.
그냥 재밌어보여서
위처럼 이유들을 주절주절 나열하긴 했지만, 사실 이유는 그냥 재밌어보이기도 하고, 개인적인 학습에도 도움도 될 것 같았다.
홈서버 구축하기
장비 구매
우선 필수적으로 필요한 장비는 대략 다음과 같다.
홈서버를 구동할 컴퓨터
공유기
랜선
부팅용 USB
키보드, 마우스
Firebat AK2 Plus N100컴퓨터의 경우에는 요근래 가성비로 꽤 화제가 된 인텔의 N100 프로세서가 탑제된 미니 PC를 당근에서 구매했다. 램은 16GB에 SSD는 512GB인 모델이다. 다만 아쉬운점은 SSD가 Nvme가 아닌 SATA 타입이라는 점.
우분투 설치
내가 구매한 컴퓨터의 경우에는 기본적으로 윈도우11 운영체제가 탑재되어있었다. 하지만 목적인 홈서버라면 사실 윈도우보다는 리눅스 기반의 운영체제가 더 적합하다. 따라서 리눅스 진영에서 서버를 구축하는데 가장 보편적인 운영체제이면서 리소스를 비교적 많이 먹는 GUI가 아닌 CLI 환경의 Ubuntu Server를 설치하기로 했다.우분투를 설치하는 방법은 다음과 같은 순서를 따른다.우분투 설치 USB 만들기 -> BIOS 진입 -> 우분투 설치 USB로 부팅 -> 설정
우분투 설치 USB 만들기
Mac OS 기준으로 우분투 설치를 위한 USB를 만드는 방법을 설명하겠다.우분투 서버 다운로드 페이지에서 약 3GB인 LTS 버전의 ISO 이미지를 다운받는다.이제 다운로드한 ISO로 부팅 USB를 굽기 위한 BalenaEtcher를 설치한다.BalenaEtcher다운받은 ISO 이미지를 선택하고, 부팅 USB를 선택한다.BalenaEtcher오른쪽 상단의 Flash 버튼을 눌러 부팅 USB를 굽는다. 참고로, 해당 과정에서 USB에 포맷이 진행되니 주의해야 한다.
우분투 설치하기
컴퓨터는 기본적으로 기존에 설치된 윈도우를 기준으로 부팅된다. 따라서 부팅 중에 BIOS에 접속해 부팅 옵션을 변경해야 한다.Firebat 모델 기준으로 부팅 중 ESC 키를 통해 BIOS에 접근할 수 있다.
부팅 메뉴에서 USB Flash Disk를 선택하여 윈도우가 아닌 우분투 부팅으로 진행한다.이제 위 사진과 같이 우분투 부팅 프로세스로 진입한 것을 알 수 있는데, 사용자 설정, OpenSSH 설치 등의 과정을 마치면 우분투 설치가 완료된다.
DHCP 고정 IP 설정
DHCP란?
우리가 컴퓨터로 공유기의 네트워크에 접근하게되면, 네트워크는 자동으로 해당 기기의 고유값인 MAC 주소를 기반으로 기기에 대한 IP를 할당하게 된다. 이때, 이 IP는 외부에 공개되는 IP가 아닌 네트워크 내부에서만 접근이 가능한 내부 IP이다.이러한 IP 자동할당 과정을 DHCP (Dynamic Host Configuration Protocol) 라고 한다.내부 IP는 외부에서 접근이 불가능하기 때문에, 외부에서는 포트 포워딩을 통해 해당 기기에 접근할 수 있도록 해야한다.
하지만 이때, 만약 홈서버가 보유한 내부 IP가 동적으로 할당된 IP라면, 포트포워딩시 해당 IP가 변경될 수 있기 때문에 포트포워딩 설정을 매번 변경해야 한다. DHCP를 고정으로 설정함으로써 해당 문제를 해결할 수 있다.
고정 IP 설정
DHCP 고정 할당공유기의 관리자 페이지에 접속하여 DHCP 설정을 변경한다. 홈서버를 구동하는 컴퓨터의 MAC 주소와, 할당할 내부 IP를 입력하고 저장한다.SSH에 접속이 가능해진다.홈서버에서 SSH 접속을 허용해놓았다면, DHCP 설정 과정에서 할당한 IP의 22번 포트로 접속시 유저명과 패스워드를 입력하면 위 사진과 같이 SSH 접속이 가능해진다.참고로 Anton이란 네이밍은 미드 Silicon Valley의 온프레미스 서버 이름이다
DDNS 설정
이제 SSH를 통해 내부적으로 고정 할당 IP로 접속이 가능해졌다. 하지만 동적으로 할당되는 것은 내부 IP 뿐만이 아니다. 인터넷 서비스 제공업체(ISP)에서는 보통 일반 가정용 인터넷 사용자에겐 유동 IP를 할당한다. 유동 IP를 제공하는 이유는 IPv4 주소의 부족, 보안 및 프라이버시 보호, IP 관리 비용 절감 등의 이유가 있다.아무튼 이러한 동적 변경으로 인해 외부에서 홈서버로 접근할때 또한, 유동 IP를 통해 접근한다면, 외부 IP가 변경될때마다 관련 설정들을 수정해주어야 한다.이때, 해결 방법으로는 두가지가 있는데, 첫번째는 고정 IP를 할당받는 것이고 (일반적으로 ISP에서 유료 서비스로 제공하는 경우가 대부분이다), 두번째는 DDNS를 사용하는 것이다.DDNS(Dynamic Domain Name System)는 동적으로 변경되는 IP를 고정적으로 접근 가능한 도메인으로 변환시켜주는 서비스이다.
간단하게 설명하자면, 유동 IP를 주기적으로 감시하여, IP가 변경될때마다, 설정한 DDNS 도메인에 대한 설정을 자동으로 변경하는 것이다.공유기 관리 페이지에서도 연동 관련된 서비스를 지원하는 경우도 많지만, 이번에는 도메인 제공 업체에서 직접 설정해보자.본인의 경우 주로 Namechaep에서 주로 도메인을 구매하는데, Namecheap의 경우에는 DDNS 관련 서비스를 지원한다. 도메인 관리 페이지에서 Advanced DNS 탭에 들어가면 DDNS 설정 항목을 끄고 킬 수 있다.Namecheap DDNS 설정해당 항목을 키게 되면, DDNS 관리를 위한 패스워드를 확인할 수 있다.
그렇다면 이제 남은 일은 하나다. 바로 주기적으로 홈서버의 고정 IP를 감시하는 프로그램을 구동하는 것이다.방법을 설명하자면, 홈서버에서 5분마다 외부 IP를 API를 통해 업데이트한다고 볼 수 있다.우선 해당 도메인의 A Record를 임의로 설정한다.이제 위의 패스워드를 바탕으로
1curl -X POST "https://dynamicdns.park-your-domain.com/update?host=$YOUR_HOST&domain=$YOUR_DOMAIN&password=$YOUR_PASSWORD"2
변경된 레코드그리고나서 도메인의 호스트 레코드를 확인해보면, 현재 유동 외부 IP로 레코드가 업데이트된 것을 확인할 수 있다.이제 이 요청을 5분마다 실행하는 프로그램을 만들어야 한다.
1crontab -e
2
위의 명령어를 통해 크론탭을 열어 다음과 같이 입력한다.
1*/5 * * * * * curl -X POST "https://dynamicdns.park-your-domain.com/update?host=$YOUR_HOST&domain=$YOUR_DOMAIN&password=$YOUR_PASSWORD"2
위의 명령어는 5분마다 위의 요청을 보내는 명령어이다.포트포워딩 설정이제 포트포워딩을 통해 도메인으로 SSH에 접속이 가능한지 테스트해보자. 예시로, 51848 포트를 DHCP 설정시 할당한 고정 내부 IP의 22번 포트로 포워딩한다.
이후 핫스팟으로 네트워크를 내부망으로부터 분리시키고 포트포워딩 시킨 도메인으로 접속하면 외부에서도 홈서버에 접속이 가능해진다.대략적인 과정은 위와 같다고 볼 수 있다.
마치며
이번 포스트에서는 홈서버를 구축하는 과정에서 필요한 기본적인 설정을 진행해보았다.
이러한 홈서버를 바탕으로 NAS나 웹서버 등 원하는 서비스들을 구성할 수 있을 것이다. 다음 포스트에서는 홈서버의 보안을 강화하는 방법에 대해 알아보자.