13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] 리눅스 브릿지

  • [가상화] Proxmox VLAN 실전 가이드: 네트워크 분리부터 트러블슈팅까지

    [가상화] Proxmox VLAN 실전 가이드: 네트워크 분리부터 트러블슈팅까지

    [가상화] Proxmox VLAN 실전 가이드: 네트워크 분리부터 트러블슈팅까지

    홈랩이나 사내 테스트 환경을 굴리다 보면 결국 부딪히는 게 네트워크 분리입니다. VM 몇 대까지는 그냥 같은 대역에 몰아넣어도 돌아가긴 하거든요. 근데 서비스망, 관리망, 실험망이 섞이기 시작하면 어느 순간부터 문제가 터집니다. DHCP가 엉뚱한 데서 응답하고, 관리 IP가 안 붙고, 방화벽 정책도 꼬이기 시작하죠. 그래서 오늘은 Proxmox VLAN 설정을 기준으로, 제가 실제로 홈랩에서 정리해 둔 흐름을 바탕으로 Proxmox 네트워크 분리를 어떻게 접근하면 되는지 차근차근 풀어보겠습니다.

    저도 처음엔 VLAN이 딱딱한 스위치 용어처럼 느껴졌는데요. 실제로 써보니까 핵심은 단순하더라고요. 물리 케이블은 적게 쓰면서 논리적으로 네트워크를 나누는 거예요. 문제는 개념보다 구현에서 많이 막히더라고요. 특히 Proxmox 브릿지 VLAN 구성에서 스위치 쪽 trunk 설정과 호스트 쪽 bridge 설정이 조금만 어긋나도 통신이 안 됩니다. 이번 글에서는 개념, 설정, 검증, 그리고 자주 만나는 VLAN 트러블슈팅까지 한 번에 정리해보겠습니다.

    Proxmox VLAN 설정을 위한 전체 네트워크 아키텍처 다이어그램

    Proxmox 호스트, 관리망, 서비스망, 실험망이 VLAN으로 분리된 전체 구성 예시입니다.

    왜 Proxmox VLAN 설정이 중요한가

    쉽게 말해 VLAN은 하나의 스위치 위에 여러 개의 논리적 네트워크를 만드는 방식입니다. VLAN ID로 트래픽을 구분하고, 필요한 포트만 같은 네트워크처럼 동작하게 만드는 거죠. 서버실에서 이런 분리는 거의 기본인데, 홈랩에서도 생각보다 효과가 큽니다.

    • Management(매니지먼트, 관리망)와 서비스망을 분리할 수 있습니다.
    • Lab(랩, 실험망)에서 삽질해도 운영망에 영향이 적습니다.
    • Security(시큐리티, 보안) 측면에서 접근 제어가 쉬워집니다.
    • 한 장의 NIC로도 여러 네트워크를 태울 수 있어 배선이 단순해집니다.

    제가 직접 해보니 가장 큰 장점은 정리감이었더라고요. 처음엔 케이블 추가 안 해도 되니까 편하겠네 정도였는데, 실제로는 장애 분석 속도가 훨씬 빨라지더라고요. 어느 트래픽이 어느 VLAN에 있어야 하는지가 명확하니까요.

    VLAN과 Proxmox 브릿지 구조를 쉽게 이해해보기

    여기서 중요한 포인트! Proxmox에서 VLAN을 볼 때는 세 가지 층을 같이 생각해야 합니다.

    1. Switch Port(스위치 포트): trunk인지 access인지
    2. Bridge(브릿지): Proxmox 호스트가 VLAN 태그를 인식하는지
    3. Guest NIC(게스트 네트워크 카드): VM 또는 컨테이너에 어떤 VLAN을 태울지

    쉽게 말해 이런 구조입니다. 스위치는 여러 VLAN이 오가는 통로를 열어주고, Proxmox의 브릿지인 vmbr0가 그 프레임을 받아서, 각 VM이나 컨테이너에 필요한 VLAN 태그를 붙여 전달하는 식이죠.

    구성 요소 역할 실수하기 쉬운 포인트
    스위치 trunk 포트 여러 VLAN 태그를 서버로 전달 허용 VLAN 목록 누락
    Proxmox bridge 물리 NIC와 게스트 NIC를 연결 VLAN awareness 미설정
    VM/LXC tag 어느 VLAN에 붙을지 결정 잘못된 VLAN ID 입력
    게이트웨이/라우터 VLAN 간 라우팅 담당 통신 불가를 브릿지 문제로 오해

    이 구성을 이해하면 왜 핑이 안 되는지 볼 때도 훨씬 빨라집니다. L2인지, L3인지, 아니면 스위치 정책 문제인지 범위를 줄일 수 있거든요.

    실전 설계: VLAN 번호부터 먼저 정리합니다

    설정 들어가기 전에 VLAN 계획부터 잡는 걸 추천드립니다. 이거 별거 아닌 것 같아도, 나중에 문서화와 트러블슈팅에서 엄청 차이가 납니다. 저도 예전에는 생각나는 대로 10, 20, 99 붙였다가 어느 순간 헷갈려서 다시 정리했었습니다.

    VLAN 10  = Management(관리망)
    VLAN 20  = Service(서비스망)
    VLAN 30  = Lab(실험망)
    VLAN 40  = Storage(스토리지망, 필요시)

    관리망은 Proxmox 웹 UI와 SSH 접속용으로 두고, 서비스망은 VM 서비스용, 실험망은 테스트용으로 나누면 깔끔합니다. 스토리지망은 Ceph나 NFS, iSCSI 같은 걸 별도 분리할 때 고려하면 좋고요.

    Proxmox VLAN 설정: /etc/network/interfaces 예시

    이제 본격적으로 Proxmox VLAN 설정에 들어가 보겠습니다. 가장 많이 쓰는 방식은 물리 NIC 하나를 브릿지에 붙이고, 그 브릿지에서 VLAN aware를 켜는 방법입니다. 아래 예시는 관리 IP는 VLAN 10 대역에 두고, VM들은 10, 20, 30 VLAN을 사용할 수 있게 열어둔 형태입니다.

    auto lo
    iface lo inet loopback
    
    iface eno1 inet manual
    
    auto vmbr0
    iface vmbr0 inet static
        address 192.168.10.11/24
        gateway 192.168.10.1
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes
        bridge-vids 10 20 30

    여기서 자주 보는 항목을 짚어보면 이렇습니다.

    • bridge-ports eno1: 물리 NIC를 브릿지에 연결합니다.
    • bridge-vlan-aware yes: 브릿지가 VLAN 태그를 인식하도록 켭니다.
    • bridge-vids 10 20 30: 해당 브릿지에서 허용할 VLAN 목록입니다.

    근데 여기서 한 가지. 관리 IP를 어떤 방식으로 둘지는 환경에 따라 다릅니다. 어떤 분은 untagged/native VLAN에 두고, 어떤 분은 아예 별도 VLAN 인터페이스를 만들어 관리망을 분리하기도 하거든요. 저는 가능하면 관리망도 의도를 분명히 하기 위해 VLAN 기준으로 정리하는 편입니다.

    Proxmox의 브릿지 설정과 VLAN aware 개념을 한눈에 보여주는 예시 이미지입니다.

    관리망을 VLAN 인터페이스로 분리하는 방식

    조금 더 명시적으로 관리하고 싶다면 호스트 관리 IP를 VLAN 서브인터페이스에 둘 수도 있습니다. 예를 들면 이런 식입니다.

    auto lo
    iface lo inet loopback
    
    iface eno1 inet manual
    
    auto eno1.10
    iface eno1.10 inet manual
    
    auto vmbr0
    iface vmbr0 inet manual
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes
        bridge-vids 10 20 30
    
    auto vmbr10
    iface vmbr10 inet static
        address 192.168.10.11/24
        gateway 192.168.10.1
        bridge-ports eno1.10
        bridge-stp off
        bridge-fd 0

    이 방식은 구조가 좀 더 눈에 보입니다. 대신 브릿지가 여러 개가 되거나 설정이 길어질 수 있어서, 작은 홈랩에서는 첫 번째 방식이 더 단순할 때도 많습니다.

    VM과 LXC에 VLAN 태그 붙이기

    브릿지 준비가 끝났다면 이제 게스트에 VLAN을 태우면 됩니다. Proxmox GUI에서도 가능하지만, CLI가 익숙하시면 명령으로 처리하는 게 반복 작업엔 더 편하더라고요. 이거 진짜 편하거든요.

    qm set 101 --net0 virtio,bridge=vmbr0,tag=20
    qm set 102 --net0 virtio,bridge=vmbr0,tag=30

    LXC 컨테이너는 이렇게 줄 수 있습니다.

    pct set 201 -net0 name=eth0,bridge=vmbr0,tag=20,ip=dhcp
    pct set 202 -net0 name=eth0,bridge=vmbr0,tag=30,ip=dhcp

    여기서 tag=20 같은 값이 핵심입니다. 브릿지에서 허용된 VLAN 안에서, 해당 VM NIC가 어느 네트워크에 속할지 결정하거든요. 만약 VM 안에서 직접 VLAN subinterface를 만들 계획이라면 설계가 조금 달라질 수 있지만, 일반적인 운영에서는 호스트 레벨에서 태그를 넣는 쪽이 관리가 편합니다.

    GUI에서 확인할 때 볼 항목

    1. VM 또는 CT의 Hardware 메뉴로 들어갑니다.
    2. Network Device 설정에서 Bridge가 vmbr0인지 확인합니다.
    3. VLAN Tag 항목에 10, 20, 30 중 올바른 값을 넣습니다.
    4. 게스트 OS 내부 IP 설정이 해당 대역과 맞는지 봅니다.

    생각보다 마지막 단계에서 많이 틀립니다. VLAN 20에 붙여놓고 게스트는 VLAN 10 대역 IP를 수동으로 넣어두면 당연히 통신이 안 되는데, 막상 장애 상황에서는 이 단순한 걸 놓치기 쉽더라고요.

    ⚠️ VLAN 트러블슈팅: 실제로 많이 막히는 지점

    여기부터가 진짜 중요합니다. 설정은 했는데 핑이 안 되면 멘탈이 흔들리죠. 저도 처음엔 Proxmox 문제인가 싶어서 한참 헤맸는데, 결국 원인은 대부분 정해져 있었습니다.

    1. 스위치 trunk 허용 VLAN 누락

    가장 흔합니다. Proxmox 쪽은 멀쩡한데 스위치에서 해당 포트에 VLAN 20, 30이 허용되지 않은 경우예요. 이럴 때는 특정 VLAN만 안 되고, 다른 VLAN은 멀쩡한 식으로 나타납니다.

    • 증상: VLAN 10은 되고 VLAN 20만 안 됨
    • 확인 포인트: 스위치 포트가 trunk인지, allowed VLAN 목록이 맞는지
    • 해결: 스위치 설정에서 필요한 VLAN을 추가

    2. Native VLAN(네이티브 VLAN) 오해

    untagged 트래픽과 tagged 트래픽이 섞이면 헷갈립니다. 특히 관리 IP를 native VLAN에 두고 VM은 tagged VLAN으로 보낼 때, 스위치와 호스트가 native VLAN 해석을 다르게 하면 접속이 끊길 수 있습니다.

    제가 직접 해보니 이 경우는 “분명 어제까지 됐는데 왜 안 되지?” 같은 증상으로 나오는 경우가 많았습니다. 스위치 교체나 포트 이동 후에 특히 그렇고요. 가능하면 운영 초반부터 native VLAN 의존도를 낮추는 쪽이 덜 헷갈립니다.

    3. bridge-vlan-aware 누락

    Proxmox 브릿지 VLAN 구성에서 이 옵션이 빠지면, 태그를 넣어도 기대한 대로 동작하지 않습니다.

    ip -d link show vmbr0
    bridge vlan show

    이 명령으로 브릿지 상태를 먼저 확인해보세요. 저는 이상하면 무조건 여기부터 봅니다. GUI만 보고 믿었다가 실제 적용 상태가 달랐던 적도 있었거든요.

    4. 게스트 OS 내부 설정 문제

    호스트는 정상인데, VM 안에서 방화벽이 막거나 IP/게이트웨이가 잘못된 경우도 많습니다. 특히 클라우드 이미지 기반 VM은 네트워크 설정 방식이 배포판마다 다를 수 있어서, netplan이든 ifcfg든 내부 설정도 꼭 같이 봐야 합니다.

    5. 라우팅 문제를 VLAN 문제로 착각

    VLAN 20과 VLAN 30은 서로 다른 네트워크입니다. 둘 사이 통신은 보통 라우터나 L3 스위치가 처리해야 합니다. 그래서 같은 VLAN 내부 핑은 되는데 다른 VLAN으로 안 간다면, 브릿지보다 라우팅 정책을 먼저 봐야 맞습니다.

    6. 패킷 캡처로 보면 빨라집니다

    감으로 잡으려다 시간 쓰지 마시고, 패킷을 보시는 걸 추천드립니다. 저도 삽질 좀 했습니다 ㅎㅎ 결국 눈으로 보니까 답이 나오더라고요.

    tcpdump -eni eno1 vlan 20
    tcpdump -eni vmbr0
    tcpdump -eni tap101i0

    어디까지 프레임이 들어오는지 보면, 스위치에서 안 오는 건지, 브릿지에서 안 넘기는 건지, 게스트 직전에서 막히는 건지 금방 좁혀집니다.

    VLAN 트러블슈팅 과정을 보여주는 Proxmox VLAN 설정 이미지

    VLAN 태그와 브릿지 상태를 확인하면서 장애 원인을 좁혀가는 트러블슈팅 예시입니다.

    검증 단계: 설정 후 꼭 확인할 체크리스트

    설정만 끝내고 넘어가면 나중에 더 힘들어집니다. 저는 아래 순서대로 검증하는 습관을 들였는데, 장애 예방에 꽤 도움이 됐습니다.

    1. Proxmox 호스트에서 관리 IP로 게이트웨이 핑 확인
    2. 같은 VLAN에 있는 VM끼리 통신 확인
    3. DHCP 사용 시 올바른 대역 주소를 받는지 확인
    4. 서로 다른 VLAN 간 통신은 라우터 정책에 따라 테스트
    5. 재부팅 후에도 설정이 유지되는지 확인
    ping -c 4 192.168.10.1
    bridge vlan show
    ip addr show
    qm config 101
    pct config 201

    여기서 특히 마지막 재부팅 검증이 중요합니다. 실행 중엔 되는데 재부팅 후 안 되는 케이스가 은근 있거든요. 인터페이스 이름이 예상과 다르거나, 스위치 쪽 변경이 저장되지 않았을 때 자주 나옵니다.

    운영하면서 느낀 팁: Proxmox 네트워크 분리를 너무 복잡하게 시작하지 마세요

    처음부터 VLAN을 8개, 10개 나누는 건 추천하지 않습니다. 저도 한때는 망을 세분화하면 무조건 좋아 보였는데, 실제로 운영해보니 관리 복잡도가 같이 올라가더라고요. 홈랩 기준이면 보통 이렇게 시작해도 충분합니다.

    • VLAN 10: 관리망
    • VLAN 20: 서비스망
    • VLAN 30: 실험망

    이 정도만 해도 체감이 큽니다. 그리고 나중에 스토리지망이나 백업망을 분리하는 식으로 확장하는 게 좋습니다. 내부 링크로 이어질 만한 주제도 많습니다. 예를 들면 다음 글에서 방화벽 정책과 VLAN 연동, 또는 Proxmox 백업 네트워크 분리를 따로 다뤄도 좋겠죠.

    구성 방식 장점 주의점
    단일 브릿지 + VLAN aware 구성이 단순하고 확장 쉬움 스위치 trunk 설정이 정확해야 함
    VLAN별 별도 브릿지 시각적으로 이해 쉬움 설정이 길어지고 관리 포인트 증가
    게스트 내부 VLAN 처리 특수 환경에 유연함 게스트별 관리 복잡도 증가

    정리와 FAQ: 결국 핵심은 경계 지점을 구분하는 겁니다

    Proxmox VLAN 설정의 핵심은 어렵지 않습니다. 스위치에서 VLAN을 올바르게 전달하고, Proxmox 브릿지에서 VLAN aware를 켜고, VM/LXC에 정확한 tag를 넣는 것. 딱 이 세 가지입니다. 근데 장애는 늘 경계에서 납니다. 스위치와 호스트 사이, 호스트와 게스트 사이, L2와 L3 사이요. 그래서 저는 문제를 보면 항상 “지금 어디 경계에서 끊겼지?”부터 생각합니다.

    실제로 써보니까 VLAN은 단순히 깔끔한 구성이 아니라 운영 안정성을 높여주는 도구였습니다. 드디어 됐다! 싶은 순간이 오면, 그 다음부터는 서비스 추가할 때도 훨씬 자신감이 생기더라고요.

    자주 묻는 질문

    • Q. Proxmox에서 VLAN은 꼭 스위치가 관리형이어야 하나요?
      네, 일반적으로 VLAN 태그를 다루려면 managed switch(관리형 스위치)가 필요합니다.
    • Q. VM마다 다른 VLAN을 줄 수 있나요?
      가능합니다. 같은 bridge를 쓰더라도 각 NIC에 다른 VLAN tag를 지정하면 됩니다.
    • Q. VLAN끼리 통신이 안 되면 Proxmox 문제인가요?
      반드시 그렇진 않습니다. 라우터 또는 L3 스위치 정책 문제일 수 있습니다.
    • Q. 관리망을 서비스망과 꼭 분리해야 하나요?
      작은 환경에선 필수는 아니지만, 운영 안정성과 보안을 생각하면 분리하는 쪽이 훨씬 낫습니다.
    Proxmox 네트워크 분리 결과를 검증하는 대시보드 이미지

    설정 후 VLAN별 연결 상태와 게스트 통신 결과를 검증하는 단계의 예시입니다.

    Proxmox VLAN 설정 핵심 체크포인트 요약 인포그래픽

    스위치, 브릿지, 게스트 태그까지 핵심 점검 포인트를 한 장으로 요약한 이미지입니다.

    혹시 지금 Proxmox 네트워크 분리를 막 시작하시는 단계라면, 먼저 VLAN 10/20/30 정도로 단순하게 구성해보세요. 그 다음에 방화벽, 라우팅, 백업망까지 넓히면 됩니다. 이전 글에서 다룬 리눅스 브릿지 기본 개념이 있다면 같이 참고하시면 더 이해가 빠르고, 다음 글에서는 방화벽 정책과 VLAN 연동 사례도 정리해보겠습니다.

  • [Proxmox] VE 8.2 네트워크 고급 설정: VLAN, 브릿지, nftables 방화벽 완벽 가이드

    홈랩 네트워크, 이대로 괜찮은가요?

    솔직히 말씀드리면, 저도 처음엔 Proxmox VE를 설치하고 그냥 기본 브릿지 하나에 VM 다 때려넣고 썼거든요. “뭐, 집에서 쓰는 건데 보안이 무슨 상관이야” 싶었죠. 근데 어느 날 홈랩에서 돌리던 개발용 컨테이너 하나가 이상한 트래픽을 뿜는 걸 발견했을 때… 그때부터 제대로 네트워크를 나눠야겠다는 생각이 들었습니다.

    Proxmox 네트워크 설정을 제대로 이해하면 VM/컨테이너별로 네트워크를 격리하고, 불필요한 트래픽을 차단하고, 관리 인터페이스를 보호할 수 있어요. 오늘은 Proxmox VE 8.2 기준으로 VLAN 설정, 브릿지 구성, 그리고 nftables 방화벽까지 한 번에 정리해 드릴게요. 꽤 긴 글이 될 것 같지만, 차근차근 따라오시면 충분히 이해하실 수 있을 겁니다.

    ▲ 오늘 구성할 Proxmox 네트워크 전체 구조입니다. VLAN별로 트래픽을 분리하고 nftables로 방화벽 규칙을 적용하는 흐름을 한눈에 볼 수 있어요.

    Proxmox 네트워크 핵심 개념 먼저 짚고 가기

    설정 들어가기 전에 개념을 잡아두는 게 중요해요. 저도 처음엔 브릿지랑 본드(Bond)랑 VLAN이 뭐가 다른지 헷갈려서 삽질을 꽤 했거든요.

    Linux Bridge(리눅스 브릿지)란?

    쉽게 말해, 소프트웨어로 만든 스위치입니다. Proxmox에서 VM이나 컨테이너를 만들면 각각의 가상 NIC(네트워크 인터페이스 카드)가 이 브릿지에 연결되는 구조예요. 물리 스위치의 포트처럼 동작한다고 보시면 됩니다.

    VLAN(Virtual LAN, 가상 로컬 네트워크)이란?

    하나의 물리 네트워크를 논리적으로 분리하는 기술이에요. 예를 들어 관리용 VM, 개발용 VM, IoT 장비를 같은 물리 스위치에 연결해도 VLAN ID로 완전히 다른 네트워크처럼 동작하게 만들 수 있습니다. Proxmox 8.2에서는 VLAN-aware bridge(VLAN 인식 브릿지) 방식을 권장하고 있어요.

    nftables란?

    기존 iptables를 대체하는 리눅스 방화벽 프레임워크입니다. Proxmox VE 7.x 이후부터 내부적으로 nftables를 사용하고 있고, 8.x에서는 더 완성도 있게 통합됐어요. 문법이 처음엔 낯설지만, 익숙해지면 iptables보다 훨씬 직관적이더라고요.

    구성 요소 역할 비고
    Linux Bridge VM/CT 간 L2 연결 (소프트웨어 스위치) vmbr0, vmbr1 등으로 명명
    VLAN 논리적 네트워크 분리 (태그 기반) 802.1Q 표준, ID 1~4094
    Bond 물리 NIC 이중화 / 대역폭 확장 active-backup, LACP 등
    nftables 호스트 및 VM 트래픽 방화벽 iptables 대체, Proxmox 통합

    Proxmox VLAN 설정: VLAN-aware Bridge 구성하기

    이제 본격적으로 설정을 시작해 볼게요. 제가 실제로 운영 중인 홈랩 구성을 기반으로 설명드리겠습니다.

    시나리오 설명

    • VLAN 10: 관리 네트워크 (Proxmox 관리 인터페이스, 네트워크 장비)
    • VLAN 20: 서버 네트워크 (웹서버, DB 등 서비스 VM)
    • VLAN 30: 개발/테스트 네트워크 (개발 VM, 컨테이너)
    • VLAN 99: IoT/비신뢰 네트워크 (외부 접근 허용 최소화)

    1단계: /etc/network/interfaces 설정

    Proxmox의 네트워크 설정은 /etc/network/interfaces 파일로 관리됩니다. GUI에서도 설정할 수 있지만, 파일을 직접 편집하는 게 더 정확하고 빠르더라고요.

    # 기존 설정 백업 먼저!
    cp /etc/network/interfaces /etc/network/interfaces.bak
    
    # 편집
    nano /etc/network/interfaces

    아래 내용으로 설정합니다. 물리 NIC 이름은 환경마다 다를 수 있으니 ip link show로 먼저 확인하세요.

    auto lo
    iface lo inet loopback
    
    # 물리 NIC (업스트림 스위치와 연결되는 트렁크 포트)
    auto enp3s0
    iface enp3s0 inet manual
    
    # VLAN-aware Bridge (VLAN 인식 브릿지)
    auto vmbr0
    iface vmbr0 inet static
        address 192.168.10.100/24      # VLAN 10 (관리망) IP
        gateway 192.168.10.1
        bridge-ports enp3s0
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes          # 핵심! VLAN 인식 활성화
        bridge-vids 2-4094             # 허용할 VLAN ID 범위
    
    # VLAN 인터페이스 (호스트가 각 VLAN에 직접 접근할 때 필요)
    auto vmbr0.20
    iface vmbr0.20 inet static
        address 192.168.20.1/24
    
    auto vmbr0.30
    iface vmbr0.30 inet static
        address 192.168.30.1/24
    
    auto vmbr0.99
    iface vmbr0.99 inet static
        address 192.168.99.1/24

    ⚠️ 중요! bridge-vlan-aware yes를 설정하면 기존에 VLAN 없이 연결된 VM들이 통신이 끊길 수 있어요. 반드시 각 VM의 네트워크 설정에서 VLAN 태그를 지정해 줘야 합니다.

    2단계: 설정 적용

    # 네트워크 재시작 (원격 접속 중이라면 주의!)
    ifreload -a
    
    # 또는 재부팅
    reboot

    💡 팁: 원격으로 작업 중이라면 ifreload -a가 더 안전합니다. 그래도 혹시 모르니 콘솔 접근이 가능한 상태에서 작업하는 걸 강력 추천드려요. 저도 한 번 원격이 끊겨서 IDC까지 달려간 적 있거든요.

    3단계: VM에 VLAN 태그 설정

    VM 설정에서 네트워크 장치를 추가할 때 VLAN Tag를 지정합니다.

    # CLI로 VM 네트워크 설정 변경 (VM ID 101, VLAN 20 할당)
    qm set 101 --net0 virtio,bridge=vmbr0,tag=20
    
    # 컨테이너(LXC)의 경우
    pct set 201 --net0 name=eth0,bridge=vmbr0,tag=30,ip=192.168.30.10/24,gw=192.168.30.1

    ▲ Proxmox GUI에서 VM 네트워크 설정 시 VLAN Tag 항목에 VLAN ID를 입력하면 됩니다. bridge-vlan-aware 설정이 되어 있어야 이 옵션이 동작해요.

    Proxmox 브릿지 고급 설정: 다중 브릿지 구성

    VLAN-aware 브릿지 하나로 대부분 해결되지만, 경우에 따라 브릿지를 여러 개 나누는 게 더 나을 때도 있어요. 예를 들어 완전히 격리된 내부 네트워크(외부 연결 없는 NAT 망)가 필요할 때죠.

    NAT 브릿지 추가 (인터넷 연결 없는 격리망)

    # /etc/network/interfaces에 추가
    auto vmbr1
    iface vmbr1 inet static
        address 10.10.10.1/24
        bridge-ports none              # 물리 NIC 없음 = 완전 격리
        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.10.10.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE

    이렇게 하면 vmbr1에 연결된 VM들은 인터넷은 되지만(NAT를 통해), 외부에서 직접 접근은 불가능한 구조가 됩니다. 개발/테스트 환경에 딱이에요.

    nftables 방화벽 설정: Proxmox 방화벽 제대로 활용하기

    자, 이제 핵심 중의 핵심입니다. Proxmox 방화벽 설정인데요, 사실 Proxmox에는 GUI 기반의 자체 방화벽 기능이 있고, 이게 내부적으로 nftables를 사용해요. 두 가지 방법을 모두 알아두는 게 좋습니다.

    방법 1: Proxmox 내장 방화벽 (GUI/설정 파일)

    Proxmox 방화벽은 세 가지 레벨로 동작합니다.

    1. Datacenter 레벨: 클러스터 전체에 적용되는 공통 규칙 (/etc/pve/firewall/cluster.fw)
    2. Host 레벨: Proxmox 호스트 자체에 적용 (/etc/pve/nodes/[노드명]/host.fw)
    3. VM/CT 레벨: 개별 가상머신/컨테이너에 적용 (/etc/pve/firewall/[VMID].fw)

    Proxmox 방화벽 활성화

    # 방화벽 설정 파일 위치 확인
    ls /etc/pve/firewall/
    
    # 클러스터 방화벽 설정
    cat /etc/pve/firewall/cluster.fw

    GUI에서는 Datacenter → Firewall → Options에서 Enable을 체크하면 됩니다. 호스트별로도 같은 방법으로 활성화할 수 있어요.

    방화벽 규칙 파일 직접 편집

    # /etc/pve/firewall/cluster.fw 예시
    [OPTIONS]
    enable: 1
    policy_in: DROP      # 기본 인바운드 정책: 차단
    policy_out: ACCEPT   # 기본 아웃바운드 정책: 허용
    
    [RULES]
    # Proxmox 웹 GUI 접근 (관리망에서만)
    IN ACCEPT -source 192.168.10.0/24 -p tcp --dport 8006 -log warning
    # SSH 접근 (관리망에서만)
    IN ACCEPT -source 192.168.10.0/24 -p tcp --dport 22 -log warning
    # ICMP (ping) 허용
    IN ACCEPT -p icmp
    # 이미 맺어진 연결 허용
    IN ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED

    방법 2: nftables 직접 설정 (고급 사용자용)

    Proxmox 내장 방화벽으로 커버 안 되는 복잡한 규칙이 필요할 때는 nftables를 직접 건드려야 합니다. 근데 여기서 주의할 점! Proxmox가 자체 방화벽을 관리하기 때문에, 직접 nftables 규칙을 추가하면 충돌이 날 수 있어요.

    그래서 권장하는 방법은 custom nftables 설정 파일을 별도로 만드는 겁니다.

    # /etc/nftables.conf 에 커스텀 규칙 추가
    nano /etc/nftables.conf
    #!/usr/sbin/nft -f
    
    # 기존 규칙 초기화
    flush ruleset
    
    table inet filter {
        # 체인(chain): 패킷 처리 흐름 정의
        chain input {
            type filter hook input priority 0; policy drop;
    
            # 루프백 인터페이스 허용
            iif lo accept
    
            # 이미 맺어진 연결 및 관련 트래픽 허용
            ct state established,related accept
    
            # ICMP 허용 (ping 등)
            ip protocol icmp accept
            ip6 nexthdr icmpv6 accept
    
            # 관리망(VLAN 10)에서 SSH 허용
            iifname "vmbr0.10" tcp dport 22 accept
    
            # 관리망에서 Proxmox 웹 GUI 허용
            iifname "vmbr0.10" tcp dport 8006 accept
    
            # 나머지는 로그 남기고 차단
            log prefix "[nft-drop] " limit rate 5/minute
            drop
        }
    
        chain forward {
            type filter hook forward priority 0; policy drop;
    
            # 이미 맺어진 연결 허용
            ct state established,related accept
    
            # VLAN 20 (서버망) → 인터넷 허용
            iifname "vmbr0.20" oifname "vmbr0" accept
    
            # VLAN 30 (개발망) → 인터넷 허용
            iifname "vmbr0.30" oifname "vmbr0" accept
    
            # VLAN 간 통신 차단 (보안 격리)
            # 개발망 → 서버망 차단
            iifname "vmbr0.30" oifname "vmbr0.20" drop
    
            # IoT망 → 다른 VLAN 차단
            iifname "vmbr0.99" drop
        }
    
        chain output {
            type filter hook output priority 0; policy accept;
        }
    }
    
    # NAT 테이블 (vmbr1 사용 시)
    table ip nat {
        chain postrouting {
            type nat hook postrouting priority 100;
            oifname "vmbr0" masquerade
        }
    }
    # nftables 서비스 활성화 및 시작
    systemctl enable nftables
    systemctl start nftables
    
    # 규칙 적용 확인
    nft list ruleset
    
    # 특정 테이블만 확인
    nft list table inet filter

    ⚠️ 경고: Proxmox 내장 방화벽과 nftables를 동시에 사용하면 규칙이 충돌할 수 있습니다. 둘 중 하나만 선택하거나, Proxmox 방화벽을 비활성화한 후 nftables를 직접 관리하는 방식을 권장합니다. 저는 단순한 환경에서는 Proxmox 내장 방화벽만 쓰고, 복잡한 규칙이 필요할 때는 nftables 직접 설정을 사용하고 있어요.

    ▲ nftables 방화벽 규칙을 적용했을 때 VLAN 간 트래픽 허용/차단 흐름입니다. IoT망(VLAN 99)은 다른 VLAN으로의 접근이 완전히 차단됩니다.

    ⚠️ 트러블슈팅: 실제로 겪은 문제들

    설정하다 보면 분명히 막히는 부분이 생기거든요. 제가 겪은 것들 공유합니다.

    문제 1: VLAN 설정 후 VM 네트워크 먹통

    증상: bridge-vlan-aware 활성화 후 기존 VM들이 네트워크가 안 됨

    원인: VLAN-aware 브릿지에서는 VLAN 태그가 없는 트래픽이 기본적으로 차단됩니다.

    해결: 각 VM 네트워크 설정에 VLAN 태그를 추가하거나, 태그 없이 쓰고 싶다면 bridge-pvid(포트 VLAN ID)를 설정하세요.

    # 특정 브릿지 포트의 PVID 확인
    bridge vlan show
    
    # VM 포트에 PVID 설정 (태그 없는 트래픽을 VLAN 20으로)
    bridge vlan add dev vmbr0 vid 20 pvid untagged

    문제 2: nftables 규칙 적용 후 Proxmox GUI 접근 불가

    증상: nftables 설정 후 8006 포트로 접근이 안 됨

    원인: input 체인의 기본 정책이 drop인데, 8006 포트 허용 규칙이 잘못된 인터페이스에 적용됨

    해결: 인터페이스 이름을 ip link show로 정확히 확인하고, 임시로 모든 8006 트래픽을 허용한 뒤 규칙을 다듬으세요.

    # 임시로 8006 전체 허용 (디버깅용)
    nft add rule inet filter input tcp dport 8006 accept
    
    # 현재 적용된 규칙 확인
    nft list chain inet filter input
    
    # 인터페이스 이름 확인
    ip link show | grep -E "^[0-9]+:"
    bridge vlan show

    문제 3: VM 간 통신이 방화벽 규칙과 무관하게 됨

    증상: forward 체인에서 차단했는데 VM끼리 통신이 됨

    원인: 같은 브릿지 내 VM 간 트래픽은 L2(2계층)에서 바로 처리되어 forward 체인을 거치지 않을 수 있음

    해결: 브릿지에서 nf_call_iptables(또는 nftables)를 활성화해야 합니다.

    # 브릿지 트래픽이 netfilter를 통과하도록 설정
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
    
    # 영구 적용 (/etc/sysctl.conf)
    echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
    echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
    sysctl -p

    ✅ 설정 검증: 제대로 됐는지 확인하기

    설정을 다 했으면 검증이 필수입니다. “됐겠지”하고 넘어갔다가 나중에 보안 구멍 발견하면 더 힘들거든요.

    VLAN 설정 검증

    # 브릿지 VLAN 상태 확인
    bridge vlan show
    
    # 예상 출력:
    # port    vlan ids
    # vmbr0    1 PVID Egress Untagged
    #          10
    #          20
    #          30
    #          99
    
    # 각 VLAN 인터페이스 IP 확인
    ip addr show vmbr0.20
    ip addr show vmbr0.30
    
    # VLAN 10 (관리망) VM에서 VLAN 20 (서버망) VM으로 ping 테스트
    # 허용된 경로라면 응답이 와야 함
    ping -c 4 192.168.20.10

    방화벽 규칙 검증

    # 현재 nftables 규칙 전체 출력
    nft list ruleset
    
    # 패킷 카운터 확인 (규칙이 실제로 매칭되는지)
    nft list ruleset | grep -A2 "counter"
    
    # 로그 확인 (차단된 패킷)
    journalctl -f | grep "nft-drop"
    
    # 특정 포트 접근 테스트
    nc -zv 192.168.10.100 8006   # 성공해야 함
    nc -zv 192.168.10.100 22     # 성공해야 함
    nc -zv 192.168.10.100 80     # 차단되어야 함 (규칙 없으면)

    VLAN 간 격리 검증

    # IoT망 VM(192.168.99.x)에서 서버망 VM(192.168.20.x)으로 ping
    # 차단 규칙이 있다면 응답 없어야 함
    ping -c 4 192.168.20.10  # 타임아웃이 나야 정상!
    
    # 개발망 VM에서 서버망으로 접근 시도
    ping -c 4 192.168.20.10  # 마찬가지로 차단되어야 함

    🎉 모든 테스트가 예상대로 동작한다면 설정 완료입니다! 처음 이 구성을 완성했을 때 진짜 뿌듯했거든요. 네트워크가 깔끔하게 정리되는 느낌이랄까요.

    ▲ 설정 완료 후 각 VLAN 간 통신 허용/차단 검증 결과입니다. 초록색은 허용, 빨간색은 차단을 의미하며 설계한 대로 정확히 동작하는 것을 확인할 수 있습니다.

    자주 묻는 질문 (FAQ)

    Q. Proxmox 방화벽과 nftables를 동시에 써도 되나요?

    권장하지 않습니다. Proxmox 내장 방화벽이 활성화되면 자체적으로 nftables 규칙을 생성하는데, 여기에 커스텀 nftables 설정을 추가하면 규칙 순서와 충돌 문제가 생길 수 있어요. 간단한 환경이라면 Proxmox 내장 방화벽만, 복잡한 규칙이 필요하다면 내장 방화벽을 끄고 nftables를 직접 관리하는 것을 추천합니다.

    Q. VLAN 설정 시 업스트림 스위치도 설정해야 하나요?

    네, 반드시 필요합니다. Proxmox와 연결된 스위치 포트는 Trunk 포트로 설정하고, 사용할 VLAN ID들을 허용해야 합니다. 관리형 스위치(Managed Switch)가 없다면 VLAN 기능을 사용하기 어렵습니다.

    Q. VM이 많아지면 방화벽 규칙 관리가 힘들지 않나요?

    맞아요, 그래서 IP set(IP 집합)과 Security Group(보안 그룹) 기능을 활용하는 게 좋습니다. Proxmox 내장 방화벽에서 IP set으로 그룹을 만들어두면 규칙 관리가 훨씬 수월해집니다.

    마무리: 네트워크 분리, 귀찮아도 꼭 해야 합니다

    처음에 이야기했던 것처럼, 저도 처음엔 “홈랩인데 뭘 그렇게까지” 싶었어요. 근데 막상 제대로 구성해 놓고 나니까, 어떤 VM에 문제가 생겨도 다른 VM이나 호스트에 영향이 없으니까 마음이 편하더라고요. 특히 외부에서 접근 가능한 서비스를 운영할 때는 정말 필수입니다.

    오늘 다룬 내용을 정리하면:

    • ✅ VLAN-aware Bridge로 논리적 네트워크 분리
    • ✅ 다중 브릿지로 완전 격리 NAT 망 구성
    • ✅ Proxmox 내장 방화벽 또는 nftables 직접 설정으로 트래픽 제어
    • ✅ VLAN 간 격리 검증으로 설정 완료 확인

    다음에는 Proxmox 클러스터 구성과 고가용성(HA, High Availability) 설정에 대해 다룰 예정이에요. 네트워크 기반이 잘 잡혀 있어야 클러스터도 안정적으로 운영할 수 있거든요. 궁금한 점이나 다른 경험 있으신 분은 댓글로 공유해 주세요!

    💡 다음 단계 제안: 이 설정을 기반으로 SDN(Software Defined Networking) 기능도 탐구해 보세요. Proxmox 8.x에서 SDN 기능이 많이 발전했는데, VXLAN 오버레이 네트워크 같은 더 고급 구성도 가능합니다. 이전 글에서 다룬 Proxmox 기본 설치 가이드와 함께 보시면 더 도움이 될 거예요.