옛날부터 홈 서버를 구축해보고 싶다는 생각을 갖고있었는데, 얼마전 주변 지인의 추천으로 미니 PC를 구매하게 되어 드디어 홈 서버를 구축할 수 있게 되었다.
나만의 사설 클라우드를 구축하는 과정을 함께 진행해보자.
그림 출처 - 알리
내가 구매한 미니 PC는 FIREBAT의 T8 pro 모델이다. 램 16GB, SSD 512GB 옵션으로 알리에서 구매하였고 20만원 조금 안되게 구매했다.
CPU는 인텔의 N100으로, 4코어 4스레드 구성이다. 온보드 램이라 추가적인 업그레이드가 안되는 점은 아쉽지만 혼자 사용하는 홈서버 용도로는 차고 넘치지 않나 싶다.
최대 전력도 36W밖에 먹지 않아 1년 365일 켜놔도 전기세 걱정도 없다.
실물로 받아보니 내 손바닥보다 작아서 놀랐다. 가격도 크기도 사양도 새삼 기술이 많이 발전했구나 하는 생각이 든다. 구매시에 다른 모델들도 고려해보았지만 디자인이 제일 깔끔해보여서 해당 제품을 선택했다.
해당 제품은 윈도우가 기본으로 설치되어 오는데, 좀 찜찜해서 밀어버리고 재설치하는 사람들이 많은 것 같다. 나는 나만의 사설 클라우드를 구축하기 위해 Proxmox
라는 하이퍼바이저 OS를 사용할 것이므로 상관은 없었다.
그림 출처 - Proxmox 공식 홈페이지
위키피디아의 설명에 따르면 Proxmox
는 가상 머신들과 컨테이너들을 관리하고 배포하는 가상화 플랫폼이다.
가상 머신하면 VirtualBox나 UTM 등을 떠올리기 쉬운데, Proxmox도 마찬가지로 같은 하이퍼바이저
지만 약간의 차이가 있다.
하이퍼바이저
는 한 컴퓨터에서 여러 운영체제를 동시에 실행하기 위한 플랫폼이다. 형태에 따라 Type1과 Type2로 분류하는데, 그림을 보자.
하드웨어 위에 호스트 OS가 있고 그 위에서 동작하는 Type2 하이퍼바이저와 다르게, Type1 하이퍼바이저는 그 자체로 OS로 동작한다.
따라서 하드웨어 리소스에 직접적으로 접근할 수 있으므로 퍼포먼스 측면에서 Type2 하이퍼바이저보다 더 효율적이라고 볼 수 있다.
우리가 늘상 윈도우나 맥OS 위에서 사용해왔던 VirtualBox나 UTM같은 프로그램들이 Type2 하이퍼바이저이고, 이번에 설치할 Proxmox가 Type1 하이퍼바이저이다.
잠깐 스포일러를 해보자면 이것이 Proxmox를 설치하면 확인할 수 있는 관리 페이지이다. Proxmox는 이렇게 브라우저로 접속할 수 있는 웹 인터페이스를 제공해준다.
이를 이용해 마치 AWS의 관리 콘솔처럼 현재 작동중인 VM들과 컨테이너들을 확인 및 관리하고 추가, 삭제도 할 수 있는 것이다!
몇가지 설정만 진행하면 진짜 AWS와 같은 클라우드처럼 외부에서도 브라우저를 통해 접속해 사용할 수 있다. 이 글에서 설정하는 법도 설명할 것이다. 이제 설치를 진행해보자.
설치를 위해 PROXMOX 부팅 USB가 필요하다.
공식 홈페이지에서 ISO 이미지를 다운로드 해주자.
그 후 Rufus와 같은 프로그램을 이용해 USB에 해당 ISO 파일을 넣어주면 부팅 USB 완성이다.
이제 미니 PC를 HDMI 선으로 모니터와 연결해주고, 키보드와 마우스를 USB로 연결 후 인터넷 선까지 연결해주자.
만들어진 부팅 USB를 미니 PC에 장착하고 BIOS 설정으로 이동해 부팅 우선순위를 해당 USB로 바꿔주고 재부팅하면 Proxmox installer가 시작된다. 나의 FIREBAT 미니 PC의 경우 BIOS 설정으로 진입하기 위해 부팅 시 F7
키를 눌러주어야 했다.
인스톨러가 시작되면 다른 OS를 설치하는 것과 크게 다를 바 없이 다 디폴트로 두고 진행하면 된다.
여기서 정한 비밀번호를 통해 웹 인터페이스에 접근하므로 비밀번호는 까먹지 않도록 조심하자.
설치가 완료되고 재부팅하면 이런 모습이 나온다. 이 화면이 나오면 정상적으로 잘 설치가 완료된 것이다. 이제 어차피 웹 인터페이스로 조작하므로 미니 PC는 더 건드릴 필요가 없다. 인터넷 선과 전원선만 연결 후 켜둔 채로 모니터, 키보드, 마우스는 분리해주어도 된다.
위 화면의 IP 주소
만 잘 기억하자.
위 화면에서 확인했던 IP 주소와 8006 포트를 조합한 https://{IP주소}:8006/
으로 브라우저를 통해 접속하면 Proxmox 웹 인터페이스를 확인할 수 있다.
반드시 미니 PC와 같은 네트워크에 연결되어 있는 컴퓨터로 접속해야 확인할 수 있다. 외부 접속은 차후에 설정할 것이다.
아이디는 root
, OS 설치 진행 시에 입력했던 비밀번호
로 로그인하면 된다.
앞으로 여기서 모든 노드(VM, 컨테이너)들을 생성, 관리, 삭제하게 될 것이다. 만약 AWS 콘솔을 많이 사용해봤다면 크게 어려움 없이 쉽게 적응할 수 있다.
최초에 Proxmox를 설치하면 파티션이 분리되어 있는데, 이를 통합하여 사용할 수 있다. 통합 과정에서 해당 파티션에 존재하던 데이터는 모두 날아가므로 설치 직후에 해주면 좋다.
나의 512GB 디스크 기준으로는 대략
local(pve-root)
- 100GB(ISO/템플릿 등 용도)
data(local-lvm)
- 400GB(VM Disk/CT 볼륨 용도)
이렇게 나눠져 있었다. 하나로 통합하는 과정을 살펴보자. 과정은 이 글을 참고했다.
왼쪽 사이드 바에서 pve 선택 후 Shell 탭을 누르면 터미널로 접근할 수 있다.
lvremove /dev/pve/data
lvresize -l +100%FREE /dev/pve/root
resize2fs -p /dev/pve/root
세 명령어를 입력 후 df -h
명령어로 디스크 공간 상태를 확인해보면 pve-root(local)가 500GB 정도로 잘 잡히는 것을 확인할 수 있다.
이후 통합되어 비어있는 local-lvm을 삭제해주자.
왼쪽 사이드 바에서 Datacenter 선택 후 Storage 탭에서 local-lvm 선택 후 위쪽의 Remove를 눌러주면 삭제할 수 있다.
삭제가 완료되면 local의 용도를 VM과 CT도 생성할 수 있도록 확장해주어야 한다.
같은 위치에서 이번엔 local 선택 후 위쪽의 Edit 클릭 후 Content 항목을 전부 선택해주자.
OK 버튼을 눌러 저장하면 이제 500GB로 확장된 local(pve-root)에 VM, CT도 생성가능하다.
이제 웹 인터페이스와 Proxmox에 생성할 노드들을 외부 네트워크, 즉 미니 PC와 같은 네트워크가 아니더라도 접속할 수 있게 설정해보자.
이 과정이 지나고 나면 이제 집 밖에서도 미니 PC에 접근해 노드들을 관리하고 접속할 수 있게 될 것이다.
하지만 모든 노드들을 그냥 외부에 오픈해버리는 것은 일일히 포트포워딩하기도 귀찮을 뿐더러 보안적으로도 좋지 않다.
이를 해결하기 위해 Proxmox 내에 내부망(LAN)을 구성하고, 외부에서 방화벽을 거쳐 내부망에 접속할 수 있도록 해보자.
최종적으로는 위 그림과 같이 구성될 것이다.
pfSense
는 오픈 소스 방화벽 및 라우터 소프트웨어로, 네트워크 트래픽들을 관리하며 허용된 트래픽들을 내부망으로 연결해줄 것이다.
NPM(Nginx Proxy Manager)
은 리버스 프록시로, 각 요청들을 도메인을 기준으로 알맞은 목적지에 보내줄 것이다.
각각의 더 자세한 역할들은 구성을 마치고 나면 이해하기가 훨씬 수월하다.
먼저 pfSense 노드부터 만들어보자. pfSense는 ISO 이미지로 VM을 생성해 설치할 것이다.
Proxmox에 VM을 생성하는 방법은 ISO 이미지로 생성하는 방법, 이미지 URL을 통해 생성하는 방법, 헬퍼 스크립트를 이용하는 방법 등 여러가지가 있다.
이번엔 첫번째 방법으로 설치해보겠다.
pfSense의 공식 홈페이지에서 ISO 이미지를 다운로드 해보자.
그 후 Proxmox에 다운로드 받은 ISO 이미지를 업로드 해야한다. 왼쪽 사이드바에서 local 선택 후 ISO Images에서 Upload 버튼을 클릭해 업로드해주자.
왼쪽 사이드 바에서 pve를 선택하고 우측 상단의 Create VM을 클릭하면 VM을 생성하는 창이 나타난다.
노드 이름은 대충 pfSense로 설정해주었다. Start at boot
옵션은 체크해주는 것으로 미니 PC가 부팅되자마자 방화벽이 작동할 수 있도록 해주자.
Next를 누르면 OS를 선택하는 창이 나온다. ISO Image를 눌러보면 업로드한 pfSense 이미지 파일이 보인다. 선택해주자.
나머지 설정은 다 디폴트로 두고 진행해주었다. 디폴트로 진행하면 메모리는 2GB, CPU는 1코어, 디스크는 32GB로 잡힌다. 이정도 리소스면 충분하다.
설정을 끝내면 왼쪽 사이드바에서 새로 생긴 pfSense VM을 확인할 수 있다.
OS 설치를 시작하기 전에, 반드시 LAN을 구성할 네트워크 카드부터 만들어주어야한다.
pve를 선택해주고 시스템의 네트워크 탭에서 Create - Linux Bridge를 선택하자.
이름은 vmbr1로 설정해주었다. 나머지는 건드릴 필요없이 Create 버튼으로 생성해주면 된다.
생성 후에는 반드시 위쪽의 Apply Configuration
버튼을 눌러 변경사항을 적용해주자.
상기한대로 원래 존재하던 vmbr0
은 WAN 네트워크에 이용될 것이고, 방금 새로 생성한 vmbr1
은 LAN 네트워크에 이용될 것이다.
이제 아까 생성한 pfSense VM을 클릭해 하드웨어 탭을 확인해보면 vmbr0
만 연결되어 있다. pfSense 방화벽은 WAN의 트래픽을 LAN으로 전달해주어야하므로 vmbr0
뿐만아니라 vmbr1
에도 연결되어 있어야한다.
위쪽의 Add 버튼을 클릭해 vmbr1
도 연결해주자.
Network Device를 선택하면된다.
vmbr1
을 선택하고 Add 버튼을 클릭해 추가해주자.
이제 vmbr1
도 잘 추가된 모습이다.
Console 탭을 클릭하면 VM을 시작할 수 있다. 잠시 기다리면 Autoboot 옵션으로 부팅된다.
pfSense OS의 설치도 여타 OS와 크게 다르지 않다. 엔터로 Accept 해주자.
엔터로 Install 선택
디스크 파티션 선택 부분이다. Auto (ZFS) 선택
Install 선택
stripte 선택
스페이스바
를 통해 디스크를 선택해주자. 위 사진처럼 *
기호가 나타나면 선택된 것이다.
디스크의 모든 내용이 지워진다는 경고가 나타난다. 엔터키로 YES 선택
인스톨이 진행된다. 잠시 기다려주자.
설치가 완료되면 Reboot를 진행해주자.
부팅 화면에서 우리가 추가했던대로 0번과 1번 네트워크 인터페이스가 두 개가 잡혀야 한다.
WAN으로 어떤 인터페이스를 선택할 것인지 물어본다. vtnet0
을 입력해주자.
다음으로 LAN으로 어떤 인터페이스를 선택할 것인지 물어본다. vtnet1
을 입력해주자. OS 설치시에 이렇게 WAN, LAN인터페이스를 선택하는 부분은 자동으로 잡히는 경우도 있었다.
내용을 확인하고 y를 입력해 진행해주자.
이 화면이 나오면 설치가 완료된 것이다. WAN IP와 LAN IP 모두 잘 기억해두자.
이제 pfSense 설치는 모두 끝났다. 나머지 방화벽 설정은 웹 인터페이스를 통해 진행할 것이다. 당연하지만 VM은 종료하면 안된다.
나머지 방화벽 설정을 진행하기 전에 외부 네트워크에서도 우리의 시스템에 접근할 수 있도록 포트포워딩을 진행해보자.
그전에, 매번 우리의 외부 IP를 주소창에 입력하기는 어려우므로 DNS 서비스를 이용하면 좋다.
DuckDNS의 서비스를 이용하면 무료 도메인을 얻을 수 있다. 자신이 가비아 등의 서비스에서 구입한 도메인이 있다면 그를 이용해도 좋다.
회원가입 후 로그인을 하고나면 이렇게 서브 도메인과 IP를 입력해 DNS에 등록할 수 있다.
원하는 서브도메인을 입력하고 공유기의 외부 IP를 입력해 등록을 진행해주자.
공유기의 외부 IP를 모른다면 findip.kr에 접속하여 확인하자.
이제 주소창에 IP를 입력하는 대신 http://내가 설정한 서브도메인.duckdns.org
을 통해 접근할 수 있다.
다음으로 공유기 설정을 진행하기 위해 iptime 공유기 기준 192.168.0.1
을 주소창에 입력해 공유기 설정 페이지를 오픈해보자. 만약 iptime이 아닌 다른 공유기를 사용하고 있다면 각 공유기에 맞는 방법으로 관리자 페이지에 접속하자.
초기 아이디 비밀번호는 admin
/admin
이다. 접속 후 변경해주자.
로그인하면 여기서도 공유기의 외부 IP를 확인할 수 있다. 왼쪽의 관리도구를 선택하자.
고급 설정의 NAT/라우터 관리 - 포트포워드 설정에서 위 세개 규칙을 추가해주자.
아래쪽의 새규칙 버튼을 누르면 새로운 규칙을 추가할 수 있다.
이 규칙들은 외부에서 들어오는 트래픽을 어디로 연결할 것인지 정의하는 것이다.
공유기 외부 IP의 8006번 포트로 들어오면 proxmox의 8006번 포트로 연결해줌으로써 http://공유기외부IP:8006
으로 접속 시 proxmox 웹 인터페이스로 접근할 수 있는 것이다.
방화벽은 80포트 - 80포트와 443포트-443포트를 연결해주어 pfSense가 외부 http
, https
트래픽을 받도록 해주자. 여기서 pfSense의 IP는 WAN IP
를 입력해주어야한다.
추가적으로 고급 설정 - 보안 기능 - 공유기 접속/보안관리 탭에서 원격 관리 포트 사용을 체크해주고 네자리 포트번호를 설정 후 적용 버튼을 클릭해주자.
이 설정을 통해 http://공유기 외부 IP:설정한 네자리 포트
로 접근하면 외부에서도 이 공유기 관리자 페이지에 접속할 수 있다.
이제 핸드폰 핫스팟이나 외부 네트워크에 연결하고 주소창에 http://서브도메인.duckdns.org:8006
을 입력해 proxmox 웹 인터페이스가 나타나는지 확인해보자.
이제 외부에서도 미니 PC의 proxmox에 접근할 수 있게 되었다!
이쯤에서 다시 한 번 우리가 구성하고 있는 시스템의 사진을 확인해보자.
vmbr0
과 vmbr1
으로 WAN과 LAN을 구분시켜주었고, 포트포워딩을 통해 8006 포트는 proxmox 웹 인터페이스로, 80, 443 포트는 pfSense로 잘 연결해주었다.
이제 남은 설정은 pfSense 방화벽에서 외부에서 들어온 트래픽을 다시 LAN의 Reverse Proxy
인 NPM
으로 연결해주는 것이다.
Reverse Proxy
에 대해 짧게 짚어보고 넘어가자. Reverse Proxy
는 클라이언트의 앞단에서 트래픽을 관리하는 전통적인 Forward Proxy
와 달리 서버들의 앞단에서 트래픽을 관리하는 존재이다.
우리의 시스템에서 Reverse Proxy
인 NPM(Nginx Proxy Manager)
는 방화벽을 거쳐 들어오는 트래픽들을 서브 도메인을 기준으로 분류하여 적절한 VM이나 컨테이너로 보내줄 것이다.
이외에도 Reverse Proxy
가 수행하는 역할들은 여러가지가 있지만, 여기서는 더 설명하지 않겠다.
NPM
(Node Package Manager
가 아니다! Nginx Proxy Manager
이다) 설치를 진행해보자.
이번에는 헬퍼 스크립트를 통해 설치를 진행해보겠다.
proxmox VE Helper 사이트에 접속해보면 다양한 VM이나 컨테이너를 간단하게 스크립트로 설치할 수 있게 해주는 헬퍼 스크립트를 제공하고 있다.
NPM을 찾아서 아래쪽에 있는 스크립트를 복사해주자.
그 후 proxmox 웹 인터페이스에서 왼쪽에서 pve 노드 선택 후 Shell로 접근해 복사한 스크립트를 붙여넣으면 설치가 시작된다.
새로운 컨테이너를 생성할 것이라는 알럿창이다. 엔터키로 Yes를 선택해주자.
디폴트 설정으로 진행해주면 된다.
설치가 진행되고 구버전을 설치할 것이냐고 물어본다. n을 입력해주자.
설치가 완료되면 웹 인터페이스 주소를 알려주는데, 디폴트 설정으로 설치했기 때문에 LAN 네트워크인 vmbr1
이 아닌 vmbr0
에 연결되어 있다. 이를 vmbr1
로 변경해주어야한다.
그전에 IP를 확인하기 위한 net-tools
패키지를 설치해주자.
왼쪽 사이드바에서 새로 생성된 nginxproxymanager 컨테이너 선택 후 Console을 통해 접근해주자.
sudo apt update
명령어와 sudo apt install net-tools
명령어를 입력해 패키지를 설치해주면 된다.
그 후 네트워크 탭에서 vmbr0
을 선택 후 위쪽의 Edit 버튼을 클릭해 vmbr1
로 변경해주자.
다시 콘솔로 돌아와 sudo reboot
명령어로 컨테이너를 재시작한 뒤
ifconfig
명령어로 LAN 네트워크에 잘 연결되었는지 확인하고 IP를 기억해두자.
이제 NPM 설치는 모두 끝났다. 세부 설정은 웹 인터페이스에서 진행할 것이다.
pfSense로 들어오는 외부 트래픽들을 NPM으로 연결하는 내부 포트포워딩을 진행해보자.
최초에 pfSense의 웹 인터페이스에 접근할 때는 외부 접근이 불가능하다. 따라서 pfSense의 내부 네트워크에 있는 머신의 브라우저로 접근해야 하며, 간단하게 vmbr1
네트워크를 이용하는 우분투 머신을 하나 생성해 접속해보도록하자. 이후 설정을 통해 외부접근이 가능하도록 변경할 것이다.
이번에는 ISO 파일 다운로드 URL을 통해 VM을 생성해보자.
우분투 공식 다운로드 홈페이지로 이동해 ISO 파일을 다운받는 링크에 마우스를 갖다대고 우클릭 후 링크 주소 복사
를 선택하자. 클립보드에 다운로드 URL이 복사된다.
그 후 proxmox 웹 인터페이스로 돌아와 왼쪽 사이드바에서 local (pve) 선택 후 ISO Images에서 Download from URL
클릭 후 복사한 URL을 입력하자. Query URL 버튼을 누르면 ISO 파일을 확인할 수 있다.
Download 버튼을 누르면 ISO 파일을 다운로드한다. 이렇게도 ISO 파일을 가져올 수 있다.
이후 해왔던 방식처럼 우측 상단의 create VM 버튼을 클릭해 ISO Image에서 다운로드한 ubuntu ISO 파일을 선택하자.
나머지는 디폴트 설정으로 진행하고 네트워크 탭에서만 vmbr1
을 선택해주자.
우분투 OS 설치과정은 익히 알고있을 것이므로 따로 설명하진 않겠다. 다 디폴트 설정으로 진행했다.
리눅스에 디폴트로 설치되어 있는 브라우저인 FireFox를 열고 주소창에 pfSense 내부 LAN IP를 입력해 pfSense 웹 인터페이스로 접근해보자.
포트번호는 디폴트로 443포트를 사용하고 있을 것이므로 따로 입력하지 않아도 된다.
경고창이 나타날텐데, Advanced를 클릭후 그냥 접속해주면 된다.
초기 아이디는 admin
/pfsense
이다.
최초 접속시에 초기 설정창이 나올텐데, 전부 디폴트로 두고 비밀번호만 변경해주면 된다.
이제 방화벽 설정을 진행해보자.
먼저, 웹 인터페이스는 디폴트로 443 포트를 이용하고 있는데, 내부 네트워크에서 https
가 443 포트를 활용할 수 있도록 웹 인터페이스 포트를 변경해주어야한다.
System - Advanced - Admin Access 탭에서 TCP port를 원하는 네 자리 포트로 변경해주자.
아래로 내려보면 대체 호스트네임을 입력하는 칸이 있다. 여기에 방화벽 서브도메인.DuckDNS 서브도메인.duckdns.org
를 입력해주자. 방화벽 서브도메인은 아무 키워드나 원하는대로 설정하면된다.
그리고 바로 아래의 Disable HTTP_REFERER enforcement check
를 체크해주자. 이것을 체크하지 않으면 도메인으로 접근했을 때 차단될 수 있다.
나머지는 디폴트로 두고 아래로 내려 Save 버튼을 눌러주면 바로 반영된다.
다음으로 내부 포트포워딩을 진행해보자.
Firewall - NAT - Port Forward에서 Add 버튼을 눌러 새로운 내부 네트워크 규칙을 추가할 수 있다.
프로토콜은 TCP로, Destination port range와 Redirect target port는 HTTPS로 설정하자.
Redirect target IP는 Address or Alias를 선택후 IP에 NPM의 IP
를 적어주면 된다.
이렇게 하면 외부 포트포워딩을 통해 443 포트로 전달되는 HTTPS 트래픽은 pfSense를 거쳐 내부 포트포워딩을 통해 NPM의 443포트로 전달될 것이다.
추가해주고 마찬가지로 HTTP 규칙도 생성해주자. 다 똑같이하고 port만 HTTP로 생성해주면 된다.
이후 Firewall - Rules - WAN으로 가보면 자동적으로 방화벽 규칙이 우리가 설정한 NAT Port Forwarding에 맞게 생성되어 있을 것이다.
이제 외부 트래픽을 NPM으로 전달하는 것까지 성공했다. 남은 일은 NPM쪽에서 들어오는 트래픽을 알맞은 VM 또는 컨테이너로 전달하게 설정하는 일만 하면 끝이다.
NPM의 웹 인터페이스도 초기엔 내부 네트워크망에서만 접속할 수 있다.
우분투 머신의 Firefox 브라우저에서 NPM IP:81
주소로 접근해보자. NPM의 웹 인터페이스 디폴트 포트번호는 81번이다.
초기 아이디는 admin@example.com
/changeme
이다.
최초에 로그인하면 아이디와 비밀번호를 변경하는 창이 나온다. 변경해주자.
NPM의 웹 인터페이스에서는 도메인과 원하는 IP, 포트번호를 연결할 수 있다.
우선 pfSense의 웹 인터페이스와 NPM의 웹 인터페이스를 외부 네트워크에서 접속할 수 있도록 연결해보자.
Hosts - Proxy Hosts를 클릭하면 호스트들을 관리할 수 있는 페이지로 이동한다.
Add Proxy Host 버튼을 클릭해 먼저 pfSense의 웹 인터페이스부터 연결해보자.
Domain Names에는 아까 pfSense에서 설정했던 호스트네임인 방화벽 서브도메인.Duck DNS 서브도메인.duckdns.org
를 입력하면 된다.
Forward Hostname / IP에는 pfSense의 내부 LAN IP
를 입력하고, 포트번호는 아까 설정했던 pfSense 웹 인터페이스 포트번호를 입력하면 된다.
사진은 Scheme이 http가 되어있지만, https로 설정하고 SSL 인증서를 발급받아야한다. https
로 설정해주자.
그 후 우측 상단의 SSL 탭을 누르면 인증서를 클릭 한 번만으로 발급받을 수 있다! (NPM 짱) Request를 통해 인증서를 요청하고 약관 동의 후 Save 버튼을 통해 저장해주자.
NPM 웹 인터페이스도 동일한 방식으로 추가해주면 된다. 도메인은 NPM 서브도메인(원하는 거 아무 키워드).Duck DNS 서브도메인.duckdns.org
로 설정하고, IP는 NPM의 IP, 포트번호는 81번으로 설정 후 SSL 인증서를 요청하면 된다. 이때 NPM의 Scheme은 http
로 설정해주어야한다.
이제 모든 설정이 마무리되었다. 핸드폰 핫스팟과 같은 외부 네트워크에 연결하고 주소창에 pfSense 도메인
또는 NPM 도메인
을 입력해보자. 포트번호는 우리가 도메인에 연결해두었기 때문에 입력할 필요가 없다.
두 웹 인터페이스가 잘 접속된다면 성공이다. 이제 외부에서도 iptime 포트포워딩, proxmox 웹 인터페이스, pfSense 웹 인터페이스, NPM 웹 인터페이스에 모두 접근할 수 있게 되었다!
목표한 시스템 그림대로 잘 설정을 완료했다. pfSense 방화벽을 거친 외부 트래픽이 NPM을 거쳐 내부망에 뿌려지는 이 큰 그림을 이해하면 설정이 한결 쉽다.
앞으로 VM 또는 CT를 생성할 때는 vmbr1
에 연결하여 생성하고 외부 트래픽을 받게 하려면 NPM 웹 인터페이스에서 도메인과 IP, 포트를 연결해 트래픽을 그쪽으로 돌려주면 된다.
예를들어 리액트 프로젝트를 배포한다고 가정해보자.
우분투 머신을 하나 생성해 vmbr1
에 연결하고, 해당 머신에서 Nginx를 통해 서버를 작동시켜놓고 NPM 웹 인터페이스에서 도메인 설정을 마치면 해당 도메인을 통해 리액트 프로젝트의 결과물을 확인할 수 있을 것이다.
이렇게 나만의 사설 클라우드를 구축하는 과정을 함께 진행해보았다.
미니 PC의 리소스가 허락하는 한 얼마든지 VM 또는 CT를 생성할 수 있으므로 그 활용도는 정말 무궁무진하다.
상기한대로 웹 프로젝트를 배포할 수도 있고, 나만의 파일 서버를 띄워 백업 및 공유할도 있으며, 젠킨스 서버를 띄워 CI/CD 플랫폼을 구축할수도, 블로그 서버를 배포할 수도 있을 것이다. 이밖에도 컴퓨터로 할 수 있는건 모두 가능하다.
대규모 트래픽을 감당해야하는 서버를 띄우기엔 부족하지만, 한달 몇천원도 안되는 전기세에 개인적 용도로 사용하기에는 충분하고 가성비도 참 좋은 것 같다.
다들 한번쯤은 홈 서버를 구축해보는 것을 강력 추천한다. 구축하면서 네트워크 지식도 공부할 수 있고, 무엇보다 과정이 재미있다. 앞으로는 내가 이 홈 서버를 어떤식으로 활용하는지에 대한 글들도 작성해보려고 한다. 화이팅 👏
같은 네트워크에서 NPM에서 설정한 외부 도메인으로 노드에 접근하려고 하면 타임아웃이 발생하는 문제가 있었다.
외부의 다른 네트워크에서는 도메인으로 정상적으로 접근이 가능한 상태여서 나의 공유기가 자신의 IP임을 알아채고 트래픽을 다시 내부로 돌려주는 NAT Loopback 기능을 지원하지 않아 생기는 문제인줄로 생각했는데, @JOONss 님이 댓글로 알려주신 방법을 통해 해결했다.
pfSense의 Interface - WAN 설정으로 가면 Block private networks and loopback address 항목이 체크되어 있는것을 체크해제 해주면 같은 네트워크에서도 도메인으로 접근이 가능해진다.
NAT Loopback 기능을 지원하지 않아 해당 현상이 발생하는 경우는 다들 통신사제공 공유기에서 발생하는 것으로 보인다. 만약 해당 현상이 발생한다면 위 방법을 시도해보고, 그래도 접속이 되지않는다면 공유기가 NAT Loopback 기능을 제공하는지 확인해보자.
내용 공유해주신 @JOONss 님 정말 감사드립니다!!
저도 요즘 취미생활로 proxmox로 이것 저것 해보고 있는데 최근에 본 포스팅중 가장 자세히 설명이 되어있네요.
pfsense는 80과443을 제외한 포트는 접근 못하게 하기 위해서 사용하신거죠?
궁금한것은 공유기의 포트포워딩에서 80과 443만 처리하고 나머지는 무시한다면 동일한 효과를 볼것같은데 혹시 따로 pfsense를 추가하신 이유가 있을가요?
구글 알고리즘 타고 구경하게 됐습니다!
저도 mini pc를 가지고 homelab cluster를 만들고 있는데 인사이트 공유하면 좋을 것 같습니다 ㅎㅎ
아래는 제가 작성 중인 homelab cluster 시리즈 주소입니다!
https://yureutae-log.vercel.app/?tag=1%3A%3AProjects%3A%3AHomeLab-Cluster
웹 새내기입니다.. 궁금한점 질문드려도 될까요?
이제 스프링 또는 node 로 웹 프로젝트를 배포해서 연습할려고하면은
우분투 vm 을 하나 생성하여 네트워크vmbr1에 연결해놓고 해당 vm에 ngix설치해서 서버올리고
ngixproxymager로 도메인연결하면 외부에서 접속이 되는거지요?
아파치로 올려도 무방하죠?
안녕하세요 잘 보고 있습니다
질문 드릴게 있는데
핸드폰이나 외부에 다른 인터넷으로는 도메인 입력하여 잘 들어가지는데
proxmox 설치 한 컴퓨터 말고 다른 컴퓨터로는 접속이 안되고 연결시간 초과뜰까요?
저는 일단 pfSense 설정 중에 Interface 메뉴의 WAN 에 가면 Block private networks and loopback addresses
해당 부분이 체크되어 있는것을 풀어보니 정상적으로 내부에서도 외부도메인으로 접속이 됬어요
잘 되신다니 다행입니다..
저도 질문드릴게 있는데 vmbr1만 네트워크 설정하여 우분투cli로 vm하나 만들었는데요
db용도로 proxmox설치된 컴퓨터 말고 내부망에 다른 컴퓨터에 데이터 쏴줄 목적인데
이더넷 포트설정된 vmbr0도 같이 네트워크 추가해야되나요?
제가 네트워크 공부 시작한지 얼마안되서...
내부망 다른컴퓨터로 ping이 안가네요
vmbr0도 추가해서 vm생성하면 하고 공유기설정에서 dhcp에서 ip고정해놓으면되는건지
아니면 다른 방식으로 설정해서 생성해야되는건지 가르쳐주실 수 있으실까요?
저도 5600h firebat 위에 32gb 2tb 980pro 이렇게 화려하게 proxmox 올렸는데
쿨링문제인지 리부팅이 계속되어 깔끔하게 ㅈㅈ치고 데스크탑 하나 조립했습니다 ㅠㅠ
pfSense 웹 인터페이스의 ssl 등록하는 과정에서 internal error라고 나오네요. npm 웹에서 'SSL Certificates' 탭에서 시도해도 오류가 나와서 로그를 보니까 대충 입력한 도메인을 찾을 수 없다고 나오는거 같은데.. 이러면 pfSense의 대체 도메인을 제가 잘못입력한걸까요?? ㅠㅠ
안녕하세요.
다름이 아니라 현재 구성처럼 세팅 중 pfsense, npm 부분에서 궁금한 부분이 생겨 여쭤봅니다.
pfsense, npm의 경우에도 proxmox와 같이 duckdns에 올려서 외부 IP를 입력해줘야 정상적으로 접근이 가능한걸까요?
좋은글 감사합니다. 단계별로 접근하니 이해하기도 좋네요.
한가지 질문이 있는데 iptime의 DDNS 사용하지 않고, duck dns를 이용하신 이유가 따로 있을까요?
위 내용 바탕으로 기본 설정까지 마쳤습니다.
이후에 lxc ubuntu 생성 후, 외부에서 해당 lxc로 ssh 접속을 시도하려고 합니다.
lxc wan에 연결하고, wan 내부에 있는 리눅스에서는 접근이 가능한데 외부 네트워크에서는 접속이 안되네요.
pfsense > system > advanced의 secure shell 항목에서 enable secure shell 체크해줬는데요.
혹시 minboy님 ssh 연결 경험이 있으신지 문의 드립니다.
먼저 감사의 말씀부터 올려요,감사합니다.
제로베이스에서 머리 몇대 쥐어박으면서 구축했습니다.
본문에서 설정한대로 그대로 다 구성한 상황입니다
첫번째 질문
vmbr1 에 헤놀로지 올렸는데
엄청 느리던데 원래 이렇게 느릴까요?
공유기에 연결된 메인컴에서 헤놀로 자료를 업로드하는데
엄청느리고
자체 패키지 다운도 엄청 느립니다
네트워크가 엄청느려요
점점 느려지더니 결국 실패 엔딩
두번째 질문
vmbr1 에는 애드가드홈을 넣는게 불가능할까요?
애드가드홈 포트를 바꿔봐도 넣어지지가 않네요
하는 수 없이 vmbr0에 올려서 사용중입니다
세번째 질문
찾아보니깐
vmbr0과 vmbr1끼리 라우터를 구성해서 주고 받을 수 있던데
이렇게하면 이점이 있을까요?
네번재 질문
근본적인 질문인데
wan과 lan을 이렇게 나눠났는데 lan으로 추가적으로 구성해놓은이유가
방화벽과 포트포워딩때문인거 같던데 더 좋은 장점이 있을까요?
방화벽을 아예 wan부터 잡아버리면 어떡까 싶어서요....
묻는 이유가 느려서입니다....
더 이상의 포스팅은 없을까요 ㅎㅎㅎㅎ;;
다시한번
글쓰시는데 고생많으셨습니다
감사합니다
아 너무길어요!!!