Proxmox 내부에 가상 사설망 구축
Proxmox 내부에 가상 사설망 구축
현재 집에서 운영하고 있는 Proxmox 서버의 대부분의 서비스는 외부에서 직접 IP를 이용하여 접근이 불가능하도록 가상 사설망에서 동작을 하고 있다.
이러한 네트워크 구성을 만들기 위해 어떤 작업을 어떻게 해야 했는지 정리한다.
현재 홈 서버 네트워크 구성
⬆️ 현재 홈 서버의 네트워크 구성도
현재 네트워크는 위 그림과 같이 구성되어 있다.
위에서부터 순서대로 설명하면 아래와 같다.
메인 서버
- 외부망이 공유기에 연결되어 있다.
- 공유기와 물리적인 랜선으로 2대의 서버와 연결이 되어 있다. (공유기의 사설망 대역 사용)
- 이 때 외부IP로 들어오는 연결에 대해서 메인서버와 포트포워딩이 되어 있다. (80, 443 ...)
- Proxmox 메인 서버는 내부에 10.10.10.0/24 대역의 가상 사설망(vmbr1)을 가지고 있다.
- 메인 서버에서 동작하는 모든 가상머신은 가상 사설망 대역을 사용한다. (가상머신의 vnic 가 vmbr1로부터 생성되어져 있다)
- 가상머신에서 외부인터넷을 사용하기 위해 출발지 주소 대역이 10.10.10.0/24 인 IP에 대해서 NAT 설정을 하여 주소 변환이 되어 외부인터넷이 되도록 한다.
- 외부에서 내부 인스턴스 서비스에 접근이 필요한 경우 vmbr0 으로 들어오는 패킷에 대해서 포트포워딩을 해준다.
- 대부분은 웹서비스이므로 기본적으로 외부에서 80이나 443포트로 들어오는 모든 연결은 Nginx 내부 인스턴스로 포워딩 해주고 Nginx 에서 리버스 프록시 설정을 통해 가상 사설망에서 동작하는 서비스와 연결해 주도록 설정했다.
서브 서버
- 현재 서브 서버에는 가상 사설망을 구축하여 사용하고 있지 않다.
- 내부에 운영중인 Proxmox Backup Server에 vmbr0 을 연결하여 공유기의 대역을 할당해줬다.
가상 사설망 구축 방법
네트워크 설정을 하기 위해 Proxmox 콘솔에서 vi /etc/network/interfaces 를 입력한다. (본인이 원하는 편집 툴을 사용)
기본적으로 아무 설정을 하지 않은 상태라면 아래와 비슷한 상태일꺼다.
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!
auto lo
iface lo inet loopback
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.2/24
gateway 192.168.0.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
여기에 새로운 가상 사설망을 위한 리눅스 브릿지를 추가하기 위해 아래의 내용을 추가한다.
auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
위 상태에서 새로운 가상머신을 추가 시 네트워크 인터페이스를 vmbr1 로 선택하면 새로 추가한 가상 사설망 인터페이스를 사용하게 된다. 그런데 위 상태로만 하게 되면 가상머신에서 외부인터넷에 연결되지 않는다. 따라서 NAT 설정을 위해 아래의 내용도 추가한다.
post-up echo 1 > /proc/sys/net/ipv4/ip_forward # IP 포워딩을 위해 설정
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE # 출발지 IP가 10.10.10.0/24 대역인 IP에 대해서 vmbr0 인터페이스로 NAT 설정.
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE # 출발지 IP가 10.10.10.0/24 대역인 IP에 대해서 vmbr0 인터페이스로 NAT 삭제.
마지막으로 vmbr0 인터페이스로 들어오는 tcp 패킷에 대해서 특정 vmbr1 대역에 있는 인스턴스 IP로 포워딩 해주기 위해서는 아래와 같은 내용을 추가하면 된다.
# http, https -> to nginx
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.10.10.2:443
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 10.10.10.2:443
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.10.10.2:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.10.10.2:80
위 설정이면 웹 서비스에 대해서는 Nginx의 리버스 프록시 설정으로 모두 커버가 가능해진다. (모든 웹 서비스는 Nginx 가 설치된 가상머신을 통해서만 접속이 가능)
참고 사이트
https://pve.proxmox.com/wiki/Network_Configuration
https://bobcares.com/blog/setup-nat-on-proxmox/
https://computingforgeeks.com/create-private-network-bridge-proxmox-with-nat/
와 포트포워딩 너무 막막했는데 설명 너무 감사합니다.