콘텐츠로 건너뛰기
Home » Blog » Proxmox 내부망 NAT 오류

Proxmox 내부망 NAT 오류

지난 3월, 홈서버에서 프록시 서버를 포함한 LXC, VM 들을 모두 내부망으로 옮기려고 시도했다.

기본적으로 참고했던 블로그는 다음과같다.

VLAN보다는 블로그를 따라 가상 브릿지를 활용하여 망을 분리시키려고 했다.

즉, 172.30.1.0/24 대역에 proxmox 서버는 위치시키고 (vmbr0)
10.10.10.0/24 대역에 내부망을 위치시키기로했다. (vmbr1)

그러나.. interface 설정을 통해 MASQUERADE 를 해도, 10.10.10.0/24 대역에서 외부로 신호가 나가지 않았다.

proxmox 방화벽을 모두 꺼도 마찬가지였고, traceroute를 통해 추적한 결과 계속해서 게이트웨이 10.10.10.1 까지만 찍히고 vmbr0의 172.30.1.0/24 대역으로 변환이 이루어지지 않았다.

iptable을 비롯한 정말 다양한 부분들을 탐색했는데도 결국 되지 않아 포기했다가.. 이번에 재시도하는 과정에서도 대차게 시간을 갈아넣고 있었다.

그러나.. 무한 구글링을 하다가 reddit에 나와 같은 동일한 증상을 겪는 사람이 있었고, 공식문서를 통해 해결했다고 하길래 뒤늦게야 공식문서를 참고하기 시작했다.
> https://pve.proxmox.com/wiki/Network_Configuration#sysadmin_network_masquerading

분명이 봤던 부분인데 맨 밑 두줄을 간과하고 넘어갔던 내 자신이 한심했다.

하단 부분을 읽어보면 다음과 같다.

In some masquerade setups with firewall enabled, conntrack zones might be needed for outgoing connections. Otherwise the firewall could block outgoing connections since they will prefer the POSTROUTING of the VM bridge (and not MASQUERADE).
Adding these lines in the /etc/network/interfaces can fix this problem:

post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

기본적으로 Proxmox의 방화벽은 각 가상 머신의 네트워크 인터페이스에 대해 별도의 conntrack(연결 추적) 영역을 할당할 수 있다. 이 conntrack 영역은 네트워크 연결 상태를 추적하고, 이를 통해 패킷이 어떤 연결에 속하는지 확인하고 적절한 처리(필터링, 허용 등)를 할 수 있다고한다.

문제는 NAT(Masquerading)를 설정했을 때 발생한다. NAT를 통해 가상 머신에서 외부로 나가는 패킷의 소스 IP 주소가 변경되는데, 이 과정에서 방화벽이 이 패킷을 올바르게 추적하지 못할 수 있다는 것이다…

이는 방화벽이 NAT 변환 전에 패킷을 추적하고, NAT 후에 패킷을 올바르게 처리하지 못하기 때문에 발생할 수 있다.

상단의 두줄은 어떻게 문제를 해결한 것일까?

fwbr+ 인터페이스(가상 머신의 브리지 인터페이스)에서 들어오는 패킷에 대해 conntrack 영역(zone)을 설정하는 역할을 한다.

--zone 1을 사용하여 conntrack 영역을 지정함으로써, 방화벽이 올바르게 패킷을 추적하고 NAT 후에도 제대로 동작할 수 있도록 한 것이다.

이를 통해 방화벽이 NAT 전후의 패킷을 올바르게 인식하고, 그에 따라 적절히 허용하거나 차단하게 된다.

결과적으로.. 방화벽과 NAT 사이의 충돌이 해결됐고, NAT 설정이 정상적으로 작동하게 되었다..!

+ 망분리 성공!