ProxMox - VLAN과 VMBR의 차이 탐구

ProxMox - VLAN과 VMBR의 차이 탐구

Summary VMBR과 VLAN은 서로 다른 레이어에서 작동하며, VMBR은 Proxmox 호스트 내부의 가상 스위치로, 물리 NIC에 VM을 연결하는 도구이고, VLAN은 하나의 물리 선로를 여러 논리 네트워크로 나누는 프로토콜이다. VMBR은 물리적 격리가 필요할 때 사용되고, VLAN은 논리적 분리가 필요할 때 유용하다. 두 기술을 적절히 조합하면 보안과 유연성을 동시에 확보할 수 있다.


초기 관찰: 왜 이 질문이 중요한가?

이 질문은 스터디 내부에서 명확히 문제를 아는사람도 없었고, 웹을 찾아보니 실제로 몇몇 사람들이 이 두 개념을 혼동하거나, 둘 중 하나만으로 충분하다고 생각합니다. 하지만 Proxmox가 왜 두 가지를 모두 제공하는지 생각해보면… 이건 단순한 중복이 아니라 서로 다른 레이어에서 작동하는 도구들입니다.

스터디를 진행하며, 스터디원분의 질문은 다음과 같았습니다.

“만약 VMBR만으로 네트워크를 나눌 수 있다면, VLAN은 왜 필요한가? 반대로 VLAN만 있으면 VMBR은 왜 필요한가?”

물리적 세계에서 시작하는 이해

이야기를 시작하기 전에, 먼저 물리적 세계의 네트워크가 어떻게 작동하는지 생각해봅시다. 전통적인 데이터센터를 상상해보세요. 여러 대의 서버가 있고, 각 서버는 네트워크 케이블로 스위치에 연결되어 있습니다. 만약 보안상의 이유로 웹서버 네트워크와 데이터베이스 네트워크를 완전히 분리하고 싶다면 어떻게 해야 할까요?

가장 확실한 방법은 물리적으로 스위치를 두 개 사는 겁니다. 웹서버용 스위치 하나, 데이터베이스용 스위치 하나. 각 서버에 네트워크 카드를 두 개씩 꽂고, 하나는 웹서버 스위치에, 다른 하나는 데이터베이스 스위치에 연결합니다. 이렇게 하면 두 네트워크는 물리적으로 완전히 분리됩니다. 케이블도 다르고, 스위치도 다르고, 전기 신호가 흐르는 경로 자체가 다릅니다. 이것이 가장 강력한 격리 방법이지만, 명백한 문제가 있습니다. 비용이 많이 들고, 공간을 많이 차지하고, 케이블 관리가 악몽입니다.

그래서 1990년대에 영리한 네트워크 엔지니어들이 생각해낸 것이 VLAN입니다. 같은 물리적 스위치를, 논리적으로 여러 개의 독립된 스위치처럼 동작하게 만드는 겁니다. 스위치의 포트 1번부터 12번까지는 “웹서버 VLAN"으로 설정하고, 13번부터 24번까지는 “데이터베이스 VLAN"으로 설정합니다. 그러면 1번 포트에 연결된 컴퓨터와 13번 포트에 연결된 컴퓨터는 같은 물리적 스위치를 사용하지만 서로 통신할 수 없습니다. 마치 두 개의 완전히 다른 스위치에 연결된 것처럼 작동합니다.

가상화가 바꾼 게임의 룰

이제 가상화 시대로 넘어와봅시다. EXSi, Proxmox 같은 하이퍼바이저가 등장하면서 상황이 근본적으로 바뀌었습니다. 이제 물리 서버 한 대에서 수십 개의 가상 머신이 동작합니다. 이 가상 머신들을 네트워크에 어떻게 연결해야 할까요? 물리 서버에는 네트워크 카드가 한두 개밖에 없는데, 가상 머신은 수십 개입니다.

여기서 VMBR이 등장합니다. VMBR은 Virtual Machine Bridge의 약자로, 말 그대로 가상 머신들을 연결해주는 다리입니다. 더 정확히 말하면, Proxmox 호스트의 리눅스 커널 내부에 만들어지는 소프트웨어 스위치입니다. 물리적 스위치가 하드웨어로 구현된 것이라면, VMBR은 소프트웨어로 구현된 스위치입니다.

Proxmox를 처음 설치하면 vmbr0이라는 기본 브리지가 만들어집니다. 이 브리지는 호스트의 물리 네트워크 카드에 연결되어 있고, 모든 가상 머신은 이 브리지에 가상 네트워크 카드를 연결합니다. 가상 머신 입장에서는 마치 실제 스위치에 케이블을 꽂은 것처럼 보입니다. 실제로는 소프트웨어로 구현된 스위치에 연결된 것이지만 말이죠.

그런데 여기서 중요한 점이 있습니다. VMBR은 Proxmox 호스트 내부에만 존재합니다. vmbr0은 그냥 리눅스 커널이 관리하는 네트워크 인터페이스일 뿐입니다. 외부의 물리적 스위치는 vmbr0의 존재를 전혀 모릅니다. 물리적 스위치 입장에서는 그냥 Proxmox 호스트의 물리 네트워크 카드 하나만 보일 뿐입니다. 그 뒤에 vmbr0이라는 소프트웨어 스위치가 있고, 거기에 수십 개의 가상 머신이 연결되어 있다는 사실을 물리 스위치는 알 방법이 없습니다.

계층의 분리, 그리고 각자의 역할

즉, VMBR과 VLAN은 서로 다른 레이어에서 작동합니다. VMBR은 Proxmox 호스트 내부의 문제를 해결합니다. 즉, “가상 머신들을 어떻게 물리 네트워크 카드에 연결할 것인가"라는 문제입니다. 반면 VLAN은 네트워크 전체의 문제를 해결합니다. “하나의 물리적 인프라로 여러 개의 논리적 네트워크를 어떻게 구성할 것인가"라는 문제입니다.

구체적인 예를 들어보겠습니다. 당신의 Proxmox 서버에 물리 네트워크 카드가 하나 있다고 가정합시다. 이 카드의 이름은 eth0입니다. Proxmox를 설치하면 자동으로 vmbr0이라는 브리지가 생성되고, 이 브리지는 eth0에 연결됩니다. 가상 머신을 만들 때 네트워크 설정에서 vmbr0을 선택하면, 그 가상 머신은 vmbr0 브리지를 통해 eth0 네트워크 카드로, 그리고 최종적으로 물리 스위치로 연결됩니다.

이제 네트워크를 분리하고 싶다고 생각해봅시다. 웹서버용 네트워크, 데이터베이스용 네트워크, 관리용 네트워크, 이렇게 세 개로 나누고 싶습니다. VMBR만 가지고 이걸 하려면 어떻게 해야 할까요? 간단합니다. vmbr1, vmbr2, vmbr3을 만들면 됩니다. 하지만 여기서 문제가 생깁니다. 각 브리지를 물리 네트워크 카드에 연결해야 하는데, 물리 카드는 eth0 하나뿐입니다.

기술적으로는 하나의 물리 카드에 여러 개의 브리지를 연결할 수 있습니다. 하지만 그렇게 하면 모든 브리지가 같은 물리 네트워크를 공유하게 됩니다. 결국 vmbr1에 연결된 가상 머신과 vmbr2에 연결된 가상 머신이 같은 물리 네트워크에서 통신할 수 있게 됩니다. 논리적으로는 분리했지만, 물리적으로는 여전히 같은 네트워크입니다. 이건 진짜 분리가 아닙니다.

진짜 분리를 하려면 물리 네트워크 카드가 세 개 필요합니다. vmbr1은 eth0에, vmbr2는 eth1에, vmbr3은 eth2에 연결하는 겁니다. 이제 세 개의 브리지는 서로 완전히 독립된 물리 네트워크를 사용합니다. 완벽한 격리입니다. 하지만 이 방법은 두 가지 큰 문제가 있습니다. 첫째, 물리 네트워크 카드를 여러 개 사야 합니다. 둘째, 물리 스위치의 포트도 그만큼 많이 필요합니다. 네트워크를 열 개로 나누고 싶다면 네트워크 카드 열 개와 스위치 포트 열 개가 필요합니다. 이건 비현실적입니다.

VLAN이 풀어주는 물리적 제약

여기서 VLAN이 등장합니다. VLAN은 물리적 제약을 논리적 방법으로 우회하는 기술입니다. 802.1Q라는 표준 프로토콜을 사용하여, 하나의 물리적 네트워크 선로에 여러 개의 논리적 네트워크를 태깅해서 보냅니다.

작동 방식은 이렇습니다. 네트워크 패킷이 만들어질 때, 이 패킷이 어떤 VLAN에 속하는지를 나타내는 작은 태그를 붙입니다. 예를 들어 VLAN 10번에 속한 패킷에는 “나는 VLAN 10이야"라는 꼬리표를 달아줍니다. VLAN 20번 패킷에는 “나는 VLAN 20이야"라고 표시합니다. 이 패킷들은 모두 같은 물리적 케이블을 타고 갑니다. 같은 네트워크 카드를 통과하고, 같은 스위치를 거칩니다. 하지만 VLAN을 이해하는 스위치는 이 태그를 보고 패킷을 분류합니다. VLAN 10번 패킷은 VLAN 10번 포트로만 보내고, VLAN 20번 패킷은 VLAN 20번 포트로만 보냅니다.

Proxmox에서 VLAN을 사용하려면 vmbr0.10, vmbr0.20 같은 식으로 브리지에 VLAN 태그를 붙인 인터페이스를 만듭니다. vmbr0.10에 연결된 가상 머신이 패킷을 보내면, Proxmox는 그 패킷에 VLAN 10 태그를 붙여서 vmbr0로 보냅니다. vmbr0는 이 패킷을 eth0 물리 카드로 보내고, 물리 카드는 물리 스위치로 보냅니다. 물리 스위치는 VLAN 10 태그를 보고 이 패킷을 VLAN 10에 속한 포트로만 전달합니다.

자, 이제 여기서 핵심을 짚어봅시다. VLAN은 물리 네트워크 전체를 관통하는 개념입니다. Proxmox 호스트 내부에서 시작해서, 물리 네트워크 카드를 통과하고, 물리 스위치를 거치고, 심지어 다른 스위치로도 전파됩니다. 모든 네트워크 장비가 같은 VLAN 번호를 이해하고 사용합니다. 만약 건물 1층 스위치에서 VLAN 10이 웹서버 네트워크라고 정의했다면, 3층 스위치에서도 VLAN 10은 웹서버 네트워크입니다. 이것이 VLAN의 힘입니다. 전체 네트워크 인프라에 걸쳐서 일관된 논리적 분리를 제공합니다.

반면 VMBR은 Proxmox 호스트 경계를 넘어가지 않습니다. 서버 A의 vmbr1과 서버 B의 vmbr1은 이름만 같을 뿐 완전히 독립적인 브리지입니다. 서로 아무 관계가 없습니다. VMBR은 오직 그것이 만들어진 호스트 내부에서만 의미가 있습니다.

1단계: 개념적 분리 - 무엇이 진짜 다른가?

VMBR의 본질

VMBR(Virtual Machine Bridge)을 생각해봅시다. 이건 “Proxmox 호스트 내부의 가상 스위치"입니다.

잠깐, 여기서 멈춰서 생각해봐야 할 점이 있습니다. VMBR을 만든다는 것은:

  • Proxmox 커널 레벨에서 소프트웨어 브리지 생성
  • 이 브리지에 물리 NIC를 붙일 수도 있고, 안 붙일 수도 있음
  • VM들은 이 브리지에 가상 NIC를 연결 즉, **VMBR은 “물리적 스위치를 소프트웨어로 구현한 것”**입니다.

여러 개의 VMBR을 만든다는 것은 = 여러 개의 독립된 가상 스위치를 만드는 것

예시:

  • vmbr0: 외부 네트워크용 스위치 (물리 NIC eth0 연결)
  • vmbr1: 내부 스토리지 전용 스위치 (물리 NIC eth1 연결)
  • vmbr2: 완전히 격리된 테스트 네트워크 (물리 NIC 없음)

VLAN의 본질

VLAN은 완전히 다른 레이어에서 작동합니다. 이건 **“하나의 물리적 선로에 여러 논리적 네트워크를 태깅하는 기술”**입니다.

핵심은 이겁니다: VLAN은 네트워크 프로토콜입니다. 802.1Q 표준에 따라 이더넷 프레임에 4바이트 태그를 붙이는 거죠.

VLAN 10으로 태그된 패킷과 VLAN 20으로 태그된 패킷은 같은 물리적 케이블을 타고 가지만, 논리적으로는 완전히 분리됩니다.

2단계: 메타인지적 점검 - 내 이해가 맞는가?

잠깐, 여기서 제 설명을 다시 검토해봐야겠습니다.

“VMBR은 가상 스위치고, VLAN은 태깅 기술이다"라고 했는데… 이게 정말 본질적 차이를 설명하는가?

다시 생각해보니, 이렇게 접근하는 게 더 명확할 것 같습니다:

질문을 바꿔봅시다: “물리적 세계에서는 어떻게 네트워크를 나누는가?”

  1. 물리적으로 스위치를 여러 개 쓴다 (VMBR 방식의 물리적 유사체)
  2. 하나의 스위치에서 VLAN으로 논리적 분리 (VLAN 방식) 이제 좀 명확해집니다.

3단계: 계층적 분석 - 어디서 작동하는가?

VMBR의 작동 레이어

1
2
3
4
5
6
7
8
9
[VM1] [VM2] [VM3]
  |     |     |
  +-----+-----+
        |
    [vmbr0] ← Proxmox 커널 레벨
        |
    [eth0] ← 물리 NIC
        |
    [물리 스위치]

VMBR은 Proxmox 호스트 내부에서만 존재합니다. 물리 스위치는 vmbr0의 존재를 모릅니다. 그냥 eth0라는 하나의 포트만 봅니다.

VLAN의 작동 레이어

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[VM1-VLAN10] [VM2-VLAN20] [VM3-VLAN10]
       |            |            |
       +------------+------------+
                    |
    [vmbr0.10] [vmbr0.20] ← VLAN 태그 처리
                    |
                [vmbr0]
                    |
                [eth0]
                    |
    [물리 스위치] ← VLAN aware, 태그 인식
         |              |
    [VLAN10 포트]  [VLAN20 포트]

VLAN은 물리 네트워크 전체를 관통합니다. 물리 스위치도 VLAN 태그를 이해하고 처리합니다.

4단계: 본질적 차이의 발견

여기서 핵심적인 통찰이 나옵니다:

차이점 1: 범위 (Scope)

VMBR: Proxmox 호스트 내부에서만 유효

  • 호스트 A의 vmbr0과 호스트 B의 vmbr0은 완전히 무관

  • 이름이 같아도 다른 브리지 VLAN: 네트워크 전체에서 유효

  • 모든 VLAN-aware 장비가 같은 VLAN ID를 공유

  • VLAN 10은 스위치 A에서나 스위치 B에서나 같은 VLAN 10

차이점 2: 물리적 인터페이스 소비

VMBR을 여러 개 만들려면:

1
2
3
vmbr0 → eth0 (물리 NIC 1개 필요)
vmbr1 → eth1 (물리 NIC 1개 더 필요)
vmbr2 → eth2 (물리 NIC 1개 더 필요)

만약 10개의 독립된 네트워크가 필요하다면? 10개의 NIC와 10개의 스위치 포트 필요!

VLAN을 쓰면:

1
2
3
4
5
vmbr0 → eth0 (물리 NIC 1개)
  ├─ vmbr0.10 (VLAN 10)
  ├─ vmbr0.20 (VLAN 20)
  ├─ vmbr0.30 (VLAN 30)
  └─ ... (최대 4094개 VLAN 가능)

하나의 물리 NIC로 수천 개의 논리적 네트워크 구성 가능!

차이점 3: 격리의 본질

VMBR로 격리:

  • 완전한 물리적 격리

  • 다른 vmbr에 연결된 VM들은 절대 통신 불가

  • 라우팅 없이는 서로 볼 수 없음 VLAN으로 격리:

  • 논리적 격리

  • 같은 물리 매체 공유

  • 잘못 설정하면 VLAN 호핑 공격 가능

  • 하지만 올바르게 설정하면 충분히 안전

5단계: 실제 사용 시나리오 탐구

이제 실제로 언제 무엇을 쓰는지 생각해봅시다.

시나리오 1: 단순한 홈랩

당신의 Proxmox 서버에 NIC가 1개만 있습니다.

VMBR만 사용:

1
vmbr0 (eth0 연결) - 모든 VM이 여기 연결

모든 VM이 같은 네트워크에 있습니다. 간단하지만 분리 없음.

VLAN 추가 사용:

1
2
3
vmbr0.10 - 웹서버들
vmbr0.20 - 데이터베이스들
vmbr0.30 - 테스트 환경

물리적으로는 NIC 1개지만, 논리적으로 3개의 독립된 네트워크!

시나리오 2: 프로덕션 환경

Proxmox 서버에 NIC가 2개 있습니다.

VMBR만 사용:

1
2
vmbr0 (eth0) - 외부 네트워크
vmbr1 (eth1) - 스토리지 네트워크

물리적으로 완전히 분리. 스토리지 트래픽이 외부 네트워크에 절대 영향 안 줌.

VMBR + VLAN 혼합:

💬 댓글

GitHub 계정으로 로그인하여 댓글을 남겨보세요. GitHub 로그인

🔧 댓글 시스템 설정이 필요합니다

GitHub Discussions 기반 댓글 시스템을 활성화하려면:

  1. Giscus 설정 페이지에서 설정 생성
  2. GISCUS_SETUP_GUIDE.md 파일의 안내를 따라 설정 완료
  3. Repository의 Discussions 기능 활성화

Repository 관리자만 설정할 수 있습니다. 설정이 완료되면 모든 방문자가 댓글을 남길 수 있습니다.