앞으로 다양한 프로젝트를 할건데, AWS 같은 클라우드 서비스를 이용해 24/7 서버를 운영하기엔 금전적으로 큰 부담이 되었다. 그래서 친구 추천으로 저전력으로 운영할 수 있는 N100 미니PC 류를 추천 받았고, 알리 익스프레스에서 6월 세일을 마침 진행했기 때문에 Firebat AK2 plus 16GB/512GB를 구입했다.

 

서버포럼에 좋은 레퍼런스들이 많아서 참 다행이다.

https://svrforum.com/

 

서버포럼 - IT, Server, Nas, Linux, ETC..

서버포럼은 개인 홈서버 구축, NAS, 헤놀로지, IT 정보, 기타 많은갤러리 등 정보 공유 커뮤니티입니다

svrforum.com

 

장비 구성 / Web GUI 설정

KT를 사용하는데 각 방마다 공인 IP가 들어온다. 홈서버를 돌리려면 외부에서 접속할 수 있어야하기 때문에 별 생각없이 스위칭 허브를 하나 사서 미니PC와 개발PC에 랜을 물렸다. (각각 공인 IP를 하나씩 할당 받음)

그런데 문제는 아래의 proxmox web이 외부로 노출된다는 점이다.

보안상 매우 안좋은데, 보통 외부로 노출시키지 않고 사설망(공유기)에서만 관리자 페이지에 접근할 수 있게 한다고 한다. 학습용이라 큰 상관없지만 그래도 찜찜해서 좋은 방법이 없을까 생각하다가, N100이 마침 Wi-Fi를 지원해주기 때문에 와이파이로 공유기에 연결해서 해당 네트워크 대역에서만 페이지에 접근할 수 있게 했다! 그리고 내 개발 PC도 Wi-Fi가 되는 마더보드!!

 

이제 집에서는 자유롭게 설정을 변경할 수 있지만 외부에선 접속할 수 없기 때문에, 안전한 방식으로 외부에서도 변경할 수 있게 만들어야 한다. 이는 VPN을 이용해서 해결해보려 한다.

 

브리지 설정 - 외부망(NAT) / 사설망

목표는 AWS VPC와 유사하게 구축하는 것이다.

 

외부망 설정

미니PC로 할당된 공인 IP는 오직 1개이다. KT로부터 자동으로 할당받기 때문에 마구잡이로 공인 IP를 받을 수 없다..

여러 대의 VM/컨테이너에 공인 IP를 할당해줄 수 없지만, 내부에서 외부로 나가야 하는 패킷이 무조건 있다. (다운로드 등)

따라서 proxmox 서버에 브리지 하나를 생성하고, 바깥으로 나가야 하는 VM/컨테이너에 해당 브리지를 물려 NAT를 통해 세상 밖으로 나갈 수 있게 해주었다.

# /etc/network/interfaces

auto lo
iface lo inet loopback

iface enp1s0 inet manual

auto vmbr0
iface vmbr0 inet dhcp 
        bridge-ports enp1s0
        bridge-stp off
        bridge-fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward

        post-up iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o vmbr0 -j MASQUERADE

auto vm_out
iface vm_out inet static
        address 10.0.0.1
        netmask 255.255.255.0
        bridge-ports none
        bridge-stp off
        bridge-fd 0

enp1s0 가 물리 NIC이고, vmbr0(가상 네트워크 인터페이스)로 이 NIC에 연결해 공인 IP를 얻어온다. (DHCP)

vmbr0 인터페이스가 활성화 되면, 패킷 포워딩 기능을 키고 NAT룰을 추가한다. (10.0.0.0/24 에서 나온 패킷이 vmbr0 인터페이스를 통해 외부로 나갈 경우, 공인 IP로 변환(MASQUERADE)될 수 있게 한다.)

 

사설망

auto vm_in1
iface vm_in1 inet static
        address 192.168.0.1
        netmask 255.255.0.0
        bridge-ports none
        bridge-stp off
        bridge-fd 0

내부 VM/컨테이너 끼리는 서로 통신이 가능하게 하기 위한 브리지 설정이다.

 

원래 세부적으로 192.168.0.x/24, 192.168.1.x/24 이렇게 나누려고 했지만, 일일이 설정하기 귀찮고 어차피 홈서버니 cidr 16으로 해버렸다.

 

예상 아키텍처

 

내가 생각했을 때, 이렇게 구성하면 잘 동작하지 않을까 싶다. VPN을 위한 포트포워딩 하나, 나머지는 NPM(Nginx Proxy Manager)로 보내고 리버스 프록시를 통해 각 VM으로 패킷이 잘 전달될 수 있게.

 

예를 들어서,

도메인 *.example.com 이렇게 구성해놓고 서브 도메인으로 구분해서

vm-1.example.com 으로 오는 데이터는 VM1으로 보내주고,

vm-2.example.com 으로 오는 데이터는 VM2로 보내주는 방식

 

 

 

 

처음이라 낯설고 어렵겠지만 위 설계대로 한번 시도해 보겠습니다!