홈서버 새 단장하기

 

토이 프로젝트를 돌리거나, 개인 클라우드 구축 등 다양한 용도로 홈서버를 사용하고 있습니다. 대단한 일을 하는 게 아니라 발열 걱정이 없어서 미니타워 케이스를 사용하고 있습니다. 사양은 i5 4460, DDR3 24GB 그리고 WD Red 제품으로 HDD 6TB, 1TB를 사용하고 있습니다.

 

사양을 보다시피 하스웰, DDR3 스펙을 사용하고 있습니다. 새 부품은 당연히 단종됐고 유지보수를 위해서는 중고 부품을 구매해야 되는데 가격을 보면 DDR4나 DDR5 스펙 가격과 거의 비슷합니다. 새로 맞춰주는 게 낫지 않을까요? 집에 남아있는 안 쓰는 부품을 사용해서 홈 서버를 새 단장해 보겠습니다. 이번 기회에 케이스도 바꾸고 기존 ESXi 시스템을 Proxmox으로 바꿔보겠습니다.

🔌 홈 네트워크 구조 톺아보기

시작하기 전에 홈서버 구조를 먼저 살펴보겠습니다.

IPTV와 pfSense 방화벽을 함께 사용하고 있습니다. IPTV 트래픽은 방화벽을 거칠 필요가 없고 거치더라도 IPTV 품질에 영향을 줄 수 있기 때문에 IPTV 영역과 pfSense 영역은 분리돼 있습니다.

 

홈 네트워크 구조도

 

스위칭 허브의 포트가 많았다면 모든 기기를 허브 하위에 연결할 수 있겠지만, 포트수가 부족해서 임시방편으로 IoT 기기들은 공유기(AP)에 연결되어 있습니다. 공유기는 브리지 모드를 사용해 단순하게 와이파이를 뿌려주기만 하며 NAT이나 DHCP 할당 등은 pfSense에서 담당하고 있습니다.

pfSense 방화벽 밑으로 이 글에서 주인공이 될 홈서버와 백업 서버로 운용 중인 시놀로지 NAS 그리고 IP-KVM 역할을 하는 JetKVM이 있습니다. (JetKVM에 대해서는 이후 섹션에서 알아보겠습니다.)

 

만약 정전이 된다면 어떻게 될까요? 정전은 서버나 전자 기기에 부담을 줄 수 있습니다. 갑작스러운 전원 끊김으로 데이터가 손실될 수도 있고요. 이를 방지하고자 UPS라는 무정전 전원 장치를 사용하고 있습니다. 쉽게 말하면 그냥 보조배터리입니다.

 

UPS 구조도

 

UPS는 시놀로지 NAS와 USB 케이블로 연결돼 있습니다. 정전으로 인해 주 전원이 아닌 UPS 전원으로 변경되면 시놀로지로 신호를 보내게 됩니다. 이후 시놀로지에서는 NUT(Network UPS Tools)를 사용해 하위 서버(pfSense, 홈서버)로 다시 신호를 보내게 됩니다. 이 신호를 받게 되면 UPS가 벌어놓은 시간 동안 스스로 종료를 하게 됩니다. 정전이 되어도 서버는 안전하게 종료됐으니 기기 손상이나 데이터 손실을 막을 수 있습니다.

 

다만, IoT 장비와 공유기는 UPS를 사용하지 않습니다. 내부 네트워크가 살아나도 외부 네트워크가 끊겨있기 때문에 와이파이를 사용할 수 없으며 IoT는 모두 전기가 끊기거나 네트워크 장애가 발생해도 모두 수동으로 조작이 가능합니다. UPS는 정상적인 종료를 위해 시간을 벌어놓으려는 목적이기 때문에 IoT 장비를 UPS에 연결할 필요는 없습니다.

🖥️ 홈서버 케이스 바꾸기

다시 본론으로 돌아와서 홈서버를 새롭게 단장해 보겠습니다.

 

기존 홈 서버 케이스

 

기존 홈서버는 미니타워 케이스를 사용하고 있습니다. 이 케이스를 사용해도 상관없지만 사소한 문제점들이 있습니다.

 

먼저, 디스크 핫스왑이 불가능합니다. 디스크가 고장 나면 케이스를 열고 나사를 풀어 분해하고, 다시 역순으로 조립하는 과정이 필요합니다. 그나마 CD-ROM 자리에 디스크 핫스왑 자리를 만들었긴 했지만 아무래도 순정 상태가 아니다 보니 불안정합니다. 그래서 주 디스크는 케이스 내부에 고정돼 있고 사용한 지 오래된 보조 디스크만 핫스왑 자리에 연결되어 있습니다.

 

케이스 디자인이 마음에 들지 않습니다. '홈서버' 단어에서 의미하듯이 가정에서 사용하는 서버입니다. 아파트 네트워크 분배기가 주방에 있어서 어쩔 수 없이 홈서버도 주방에 있는데 갑자기 이런 컴퓨터가 있으면 보기 좋지는 않을 것 같습니다. 랙 케이스도 있는데 랙 케이스를 사용하면 더욱 난감해질 것 같습니다.

 

핫스왑 베이가 있고 선반 안에 숨길 수 있는 작은 케이스를 찾던 도중 NAS 케이스로 유명한 Jonsobo N4 케이스(이하 N4)를 최종적으로 선택했습니다. N4 케이스는 4개의 핫스왑 베이와 2개의 고정형 SSD 베이, 2개의 고정형 HDD 베이를 제공합니다. SFX(M-ATX) 규격의 파워서플라이를 사용합니다. 미니타워 케이스에서는 ATX 규격 파워서플라이를 사용했기 때문에 N4 케이스에 맞는 파워서플라이를 새로 구매해야 합니다. SFX 규격은 수요가 적어 저출력 제품도 가격이 비싼 편입니다. 마이크로닉스사의 SFX 파워서플라이를 구매했습니다.

 

메인보드도 M-ATX 규격을 사용하는데 다행히 기존에 가지고 있던 부품도 M-ATX라서 추가 구매 없이 사용했습니다. 그렇게 최종적으로 결정된 새 홈서버 부품은 Jonsobo N4 케이스, 라이젠 3400G, DDR4 32GB입니다. 거기에 기존 사용하던 WD RED 6TB, 2TB HDD를 핫스왑 베이를 사용해 장착해 주고 Proxmox 부팅 디스크를 위해 120GB SSD를 추가로 장착해 줬습니다.

 

N4 케이스에 디스크를 장착한 모습

🪟 IP-KVM 설치하기

홈서버는 일반 데스크톱과 다르게 모니터를 사용할 일이 없습니다. 하지만 처음 운영체제를 설치하거나 유지보수, 장애 대응 등의 목적으로 화면 출력이 필요할 때가 있습니다. 이럴 때마다 모니터를 가져와 서버에 연결해 주거나 서버를 모니터 있는 곳까지 가져와 연결해야 합니다. 여기에 키보드, 마우스까지 필요합니다. 유지보수가 필요할 때마다 번거로운 과정이 필요합니다. IP-KVM은 KVM(Keyboard-Video-Mouse)의 일종으로 네트워크를 사용해 키보드, 마우스를 조작하고 화면을 볼 수 있는 기능을 제공합니다.

 

JetKVM은 IP-KVM 종류 중 하나입니다. 해외 직구나 라즈베리파이를 사용해서 저렴하게 구축할 수 있지만, 디자인의 이유로 선택하게 됐습니다. 펀딩으로 구매한 제품인데 당시 기준으로 69달러에 구매했었습니다. 라즈베리파이로 IP-KVM을 구축하면 비슷한 가격이 나오기 때문에 만족할만한 가격이라고 생각합니다. (다만 환율 이슈로 원화 가격은 부담스러웠습니다...)

 

JetKVM 실물

 

그리고 전면에 디스플레이도 달려있습니다.

 

JetKVM Web UI

 

전면 디스플레이에 표시되는 IP로 접속하면 브라우저를 사용해 서버를 제어할 수 있습니다. 이제는 모니터를 연결하지 않아도 OS를 설치할 수 있고 BIOS 설정도 변경할 수 있습니다.

➡️ ESXi에서 Proxmox으로 이전하기

기존 홈서버에서는 하이퍼바이저로 ESXi를 사용하고 있습니다. 개인용 라이선스는 무료이지만 ESXi는 특정 하드웨어(랜카드 등)를 지원하지 않는 문제가 있습니다. 현재도 리얼텍 랜카드를 지원을 위해 패치된 ESXi 이미지를 사용하고 있습니다.

Proxmox는 오픈소스 하이퍼바이저로 최근에 들어서는 커뮤니티 규모가 많이 커졌습니다. 국내 사용자도 많이 늘어났고 이에 따라 한국어 자료도 많아졌습니다. ESXi에 비해 하드웨어를 가리지도 않고요. 이 정도면 ESXi에서 충분히 이전할만한 장점이 있다고 판단했고 홈서버를 바꾸면서 하이퍼바이저도 함께 교체했습니다.

 

Proxmox 설치 화면

 

ESXi는 호스트에서의 쓰기 작업이 거의 일어나지 않기 때문에 USB 저장장치를 부팅 디스크로 사용하는 경우가 많습니다. (SSD, HDD와 같은 디스크에 비해 안정성 보장은 못함) 다만, Proxmox는 데비안을 기반으로 만들어진 하이퍼바이저로 읽기/쓰기가 자주 일어납니다. 즉, 다른 리눅스 운영체제와 같습니다. USB 저장장치 수명에 상당한 영향을 주기 때문에 Proxmox는 따로 부팅 디스크 SSD를 장착해서 설치해 주었습니다.

 

Proxmox 설치는 간단하게 마칠 수 있습니다.

ESXi에서는 `.vmdk` 확장자를 가진 파일에 VM 데이터가 저장됩니다. Proxmox에서 이어서 사용하기 위해서는 `.qcow2` 확장자 포맷으로 변환시켜줘야 합니다.

 

변환 과정에서 데이터 손상에 대비하기 위해 `.vmdk` 사본을 제 작업 컴퓨터로 옮겨줬습니다. 옮길 때는 SFTP를 사용했습니다.

 

SFTP를 사용한 데이터 전송

 

이후에는 `qemu-img convert -f vmdk <기존 .vmdk파일> -O qcow2 <새로운 .qcow2 파일>` 명령어를 사용해 `.qcow2` 확장자로 바꿔주면 됩니다. 변환된 디스크를 기반으로 VM을 생성해 주면 ESXi → Proxmox 마이그레이션 작업이 모두 완료됩니다.

 

Proxmox 대시보드

📼 Proxmox Backup Server로 백업하기

데이터 손실을 막기 위해 시놀로지에 홈서버 데이터를 백업해 물리적으로 격리시키고 있습니다. 기존에는 시놀로지 Active Backup for Business를 사용해 자동 백업을 하고 있었습니다. 백업 일정만 설정하면 별도 설정 없이 사용할 수 있어 편리한 제품입니다. Proxmox도 Active Backup을 쓸 수 있지만 ESXi처럼 깔끔하게 설정이 되지는 않습니다. Proxmox 생태계에는 Proxmox Backup Server(이하 PBS)라는 제품을 제공하기 때문에 PBS을 사용해 백업 환경을 만들어보겠습니다.

 

PBS는 공식 홈페이지(https://www.proxmox.com/en/products/proxmox-backup-server/overview)에서 ISO 이미지를 받을 수 있습니다. 다른 VM을 생성과 동일하게 ISO 이미지를 사용해서 VM을 만들어주고 초기 설정을 완료하면 아래와 같은 대시보드를 볼 수 있습니다.

 

PBS 대시보드

 

백업 데이터는 홈서버가 아니라 시놀로지에 저장돼야 합니다. 이를 위해 시놀로지에서 NFS를 활성화해 주고 NFS를 사용해 시놀로지 디스크를 PBS에 마운트 시켜줍니다.

NFS는 시놀로지 제어판 > 파일 서비스 > NFS 탭에서 활성화할 수 있습니다.

 

시놀로지 NFS 활성화

 

이후 PBS의 Shell 메뉴에 들어와 `mount` 명령어를 사용해서 NFS 디스크를 마운트 하면 됩니다. 폴더의 권한은 `775`로 설정되어야 합니다.

 

mkdir -p /data/pbs
chown backup:backup /data/pbs
chmod 775 /data/pbs
mount <서버IP>:<포트> /data/pbs

 

마운트 된 폴더를 PBS의 데이터스토어로 추가하면 최종적으로 아래와 같은 대시보드를 확인할 수 있습니다.

 

PBS 데이터스토어 대시보드

 

백업 사용자 계정을 만들어주고 Proxmox > Storage > Proxmox Backup Server으로 PBS를 연결해 주면 끝납니다. 백업 일정 추가는 Proxmox > Datacenter > Backup 메뉴에서 설정할 수 있습니다.

 

PBS를 스토리지로 추가하기

 

Backup 메뉴에서 백업 일정 추가하기

 

🤯 그런데 네트워크가 죽었습니다

Proxmox와 PBS 설정을 마쳐 최종적으로 홈서버 새 단장을 마쳤습니다. 이대로 평화로우면 좋을 텐데 상치 못한 문제가 발생했습니다.

 

홈서버를 새롭게 바꾸고 몇 주 뒤 해외여행을 갔습니다. 한국을 떠나기 전 공항에서 Smartthings IoT 허브와 센서가 끊겼다는 알림이 왔는데, 모든 센서가 정상 작동이었고 내부 네트워크도 정상이었습니다. 단순 오류라고 생각했습니다. 해외 도착 후 비행기 모드를 해제하자마자 서버 다운 알림이 마구잡이로 오기 시작합니다. 이번에는 오류가 아니었습니다. 홈서버는 하드웨어 문제는 아니었고 내부 네트워크가 모두 죽었습니다.

 

서버 다운 알림

 

다행인 건 중요한 서비스는 Oracle VPS로 이전해 두었고, IoT 장비는 모두 수동 조작이 가능하기 때문에 영향이 없었습니다. 문제는 와이파이였죠. 내부 네트워크가 죽었기 때문에 VPN를 못 써 내부 도구를 사용해서 모니터링도 불가능했습니다. 다행히 IPTV는 정상 작동했습니다.

 

홈 네트워크 중 Modem - pfSense - TP-Link AP 영역

 

앞서 설명한 홈 네트워크 구조를 기억하시나요? IPTV는 통신사 모뎀과 직결돼 있고 pfSense 밑으로 홈 네트워크가 구성되어 있습니다. 이 중 와이파이를 뿌려주는 TP-Link 공유기는 중간에 허브를 거치지 않고 pfSense와 직결되어 있습니다. 즉, pfSense 방화벽 장애로 인해 내부 네트워크가 중단된 것이었습니다.

 

임시방편으로 와이파이라도 복구해야 했습니다. SKB 모뎀에서 pfSense으로 향하는 랜선을 TP-Link 공유기로 향하도록 바꾸고 기존 브리지 모드로 사용하던 공유기를 DHCP 모드로 변경하여 pfSense를 우회하는 네트워크 환경을 구성했습니다. 그림으로 나타내면 아래와 같은 구조가 됩니다.

 

와이파이 복구용 네트워크 구조

 

더 이상 해외에서 할 수 있는 방법이 없습니다. 집에서 유선 네트워크를 쓰는 사람이 없어서 문제없고, IPTV와 와이파이는 복구되어 당장 생활에는 불편함이 없습니다.

💾 디스크 교체하기

입국하자마자 바로 pfSense에 모니터를 연결하여 콘솔을 확인했습니다. 수많은 디스크 오류와 함께 커널 패닉이 발생합니다.

이전에도 강제 종료 시 디스크 오류가 자주 발생했습니다. pfSense 공식 가이드를 따라 대부분의 경우 `fsck -fy /` 명령어로 해결이 가능했습니다. 이번에도 같은 방법을 시도했지만 해결되지 않았고 오류 로그를 분석한 결과 디스크 고장이었습니다. 현재 사용하는 pfSense 장비는 해외에서 직구한 미니 PC 기반의 제품입니다. 디스크 제조사를 알 수 없고 4년이 넘도록 사용해 충분히 고장 날 수 있는 상황입니다.

 

급하게 SSD 인클로저에 USB 포트를 연결하여 부팅 디스크로 사용했습니다. 다행히 주기적으로 백업해 둔 pfSense 설정 파일이 있었습니다. 방화벽 로그 등 일부 로그는 손실되겠지만 설정 데이터는 모두 복구할 수 있었습니다.

 

pfSense 설치 디스크에 `.xml` 확장자로 된 설정 백업 파일을 넣어두면 설치 시 해당 파일을 기반으로 복구를 해줍니다. pfSense에서는 이 기능을 ECL(External Configuration Locator)이라고 부르고 있습니다. (관련 레퍼런스: https://docs.netgate.com/pfsense/en/latest/backup/restore-during-install.html#id3)

 

USB 포트를 통해 디스크를 연결했기 때문에 접촉 불량 등으로 연결 케이블 문제가 발생하면 디스크 오류로 이어지게 됩니다. 인클로저는 그저 임시방편이기 때문에 새로운 디스크를 구매해야 했습니다. pfSense가 돌아가는 기기는 mSATA 규격의 SSD를 사용하고 있습니다. 일반 M.2 규격을 사용하는 SSD보다 작은 사이즈입니다.

 

수요가 적은 부품이라 용량에 비해 부품값이 비쌉니다. 눈물을 머금고 새로운 mSATA SSD를 구입해 줬습니다. 구입 후에는 디스크를 교체하고 SSD 인클로저를 사용할 때처럼 ECL로 설정 파일을 복구해 주면 됩니다.

마무리

오래된 홈서버를 케이스와 함께 새롭게 단장하고, 해외여행 중 생긴 내부 네트워크 장애에 대해 다뤄봤습니다.

 

홈서버 안정성을 위해 UPS, 백업서버를 두고 있는데 네트워크 장비 고장은 예상하지 못했습니다. 내부 네트워크 시작점이 죽어버리니까 VPN도 소용 없어지네요. pfSense 방화벽을 이중화시켜야 하나 싶긴 한데, 가정에서는 비용 부담이 커서 고민이 필요할 것 같습니다.

 

기존 홈서버는 저소음 쿨러를 사용했는데 케이스와 CPU를 바꾸면서 기본 쿨러를 사용하고 있습니다. 이 때문에 조금씩 소음이 발생하고 있는데 시간이 되면 저소음 쿨러로 교체할 예정입니다.

 

 

 

반응형