13년차의 서버실

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

[태그:] 홈랩 네트워크

  • [HomeLabs] 10G 네트워크 비용, 홈랩에 정말 필요할까? 비용 효율성 심층 분석

    [HomeLabs] 10G 네트워크 비용, 홈랩에 정말 필요할까? 비용 효율성 심층 분석

    10G 네트워크 비용, 홈랩에 정말 필요할까? 비용 효율성 심층 분석

    안녕하세요, 13년차 서버실 지킴이 ’13년차의 서버실’입니다. 홈랩을 운영하시는 분들이라면 한 번쯤은 “우리 집 네트워크도 10G로 업그레이드해볼까?” 하는 고민, 해보셨을 거예요. 저도 그랬거든요. 1G(Gigabit Ethernet) 환경에서 뭔가 답답함을 느낄 때마다 10G(10 Gigabit Ethernet)가 주는 시원한 속도감을 상상하곤 했습니다.

    특히 대용량 파일 전송이 잦거나, 여러 대의 가상 머신(Virtual Machine, VM)이나 컨테이너(Container)를 운영하면서 스토리지 서버(Storage Server)와의 병목 현상(Bottleneck)을 경험해보신 분들이라면 10G 네트워크에 대한 갈증이 상당하실 텐데요. 하지만 막상 구축하려고 보면 생각보다 높은 10G 네트워크 비용 때문에 망설여지기 마련입니다. 과연 이 투자가 홈랩 네트워크 환경에서 비용 효율성이 있을지, 그리고 그 투자 가치는 충분한지 저의 솔직한 경험을 바탕으로 심층 분석해보려고 합니다.

    제가 직접 삽질했던 경험들을 솔직하게 공유하면서, 여러분의 현명한 선택에 조금이나마 도움이 되었으면 좋겠습니다. 자, 그럼 시작해볼까요?

    홈랩 1G 및 10G 네트워크 구성 개요 다이어그램

    홈랩 네트워크의 진화: 1G에서 10G로의 업그레이드 흐름을 보여주는 다이어그램입니다.

    1. 10G 네트워크, 왜 필요한지부터 따져봅시다

    많은 분들이 “1G도 충분한데 굳이 10G까지?”라고 생각하실 수 있습니다. 저도 처음엔 그랬습니다. 하지만 특정 사용 시나리오에서는 10G가 주는 이점이 명확하더라고요.

    1.1. 10G 이더넷(Ethernet)이란?

    10G 이더넷(10 Gigabit Ethernet)은 초당 10기가비트(Gbps)의 데이터 전송 속도를 제공하는 네트워크 표준입니다. 기존 1G 이더넷(1Gbps)에 비해 이론적으로 10배 빠른 속도를 낼 수 있죠. 이 정도 속도면 대용량 파일(예: 4K 영상, 가상 머신 이미지)을 빠르게 전송하거나, 여러 대의 서버가 동시에 스토리지에 접근할 때 병목 현상을 크게 줄일 수 있죠.

    1.2. 홈랩에서 10G가 필요한 순간들

    • 대용량 파일 전송: NAS(Network Attached Storage)에서 여러 워크스테이션으로 수십 GB 이상의 파일을 자주 옮길 때 체감 속도가 확 달라지죠. 특히 미디어 서버를 운영하거나 영상 편집 작업을 하신다면 필수적이라고 느낄 수 있어요.
    • 가상화 환경: Proxmox VE나 VMware ESXi 같은 가상화 플랫폼에서 여러 가상 머신이 동시에 네트워크 스토리지를 사용하거나, 가상 머신 이미지를 이동시킬 때 10G는 빛을 발합니다. 저는 VM 간의 라이브 마이그레이션(Live Migration) 시 속도 차이를 크게 경험했습니다.
    • 고성능 스토리지: NVMe SSD 기반의 고성능 스토리지 서버를 구축했다면, 1G 네트워크는 이 스토리지의 잠재력을 다 끌어내지 못하죠. 10G는 스토리지의 진정한 성능을 발휘하게 해주죠.
    • 다중 사용자 환경: 가족 구성원이 많거나, 여러 사람이 동시에 고대역폭을 요구하는 작업을 할 때 1G는 금방 한계에 부딪히곤 합니다.

    자, 그럼 이제 어떤 장비들이 필요한지 한번 살펴볼까요?

    2. 10G 네트워크 구축의 핵심 요소와 비용 분석

    10G 네트워크를 구축하려면 크게 세 가지 핵심 구성 요소가 필요합니다: 네트워크 인터페이스 카드(NIC), 스위치(Switch), 그리고 케이블(Cable)입니다. 각 요소별로 선택지와 10G 네트워크 구축 비용 효율성을 따져봐야죠.

    2.1. 네트워크 인터페이스 카드 (NIC)

    서버나 워크스테이션에 10G 연결 기능을 제공하는 장치입니다. 주로 PCIe(Peripheral Component Interconnect Express) 슬롯에 장착하는 카드를 사용합니다.

    • RJ45 (Cat6a): 일반적인 랜 케이블(UTP)처럼 생겼습니다. Cat6a(Category 6 Augmented) 케이블을 사용하며, 최대 100m까지 10G 속도를 지원합니다. 설치가 간편하다는 장점이 있지만, 발열이 심하고 전력 소모가 상대적으로 높다는 단점이 있죠.
    • SFP+ (Small Form-Factor Pluggable Plus): 광케이블이나 DAC(Direct Attach Cable)을 사용하는 방식입니다. RJ45 방식보다 저전력, 저발열이며, 보통 더 저렴한 중고 NIC를 구할 수 있다는 장점이 있습니다. 하지만 광케이블과 트랜시버(Transceiver)가 추가로 필요할 수 있어 초보자에게는 다소 복잡하게 느껴질 수도 있어요. 홈랩에서는 DAC 케이블을 많이 사용하는데, 최대 7m 정도의 짧은 거리에서 저렴하게 10G 연결을 할 수 있습니다.

    제가 처음 10G를 구축할 때는 RJ45 방식이 익숙해서 Cat6a NIC를 먼저 써봤습니다. 근데 생각보다 발열이 심해서 깜짝 놀랐습니다. 나중에는 SFP+ NIC와 DAC 케이블 조합으로 바꾸면서 전력 소모와 발열을 모두 잡았었죠. 중고 시장에서 널리 쓰이는 Intel 기반의 SFP+ NIC들은 꽤 합리적인 가격에 구할 수 있습니다.

    2.2. 10G 스위치 (Switch)

    여러 장치를 10G 속도로 연결해주는 핵심 장비입니다. 선택지가 다양합니다.

    • 언매니지드 스위치 (Unmanaged Switch): 별도의 설정 없이 바로 연결하면 작동합니다. 가장 저렴하지만, VLAN(Virtual Local Area Network) 설정 등 고급 기능을 사용할 수 없죠. 홈랩에서는 간단한 포인트-투-포인트(Point-to-Point) 연결에 적합합니다.
    • 매니지드 스위치 (Managed Switch): 웹 인터페이스나 CLI(Command Line Interface)를 통해 다양한 네트워크 설정을 할 수 있죠. VLAN, LACP(Link Aggregation Control Protocol), QoS(Quality of Service) 등 고급 기능을 활용하려면 필수적입니다. 중고 시장을 잘 찾아보면 합리적인 가격의 매니지드 10G 스위치를 구할 수 있습니다.

    저도 처음에는 언매니지드 스위치로 시작했는데, 나중에 VLAN을 나눠야 할 일이 생겨서 결국 매니지드 스위치로 갈아탔습니다. 그때 또 한 번의 삽질이 있었죠. 펌웨어 업데이트부터 설정까지, 처음 해보는 분들은 조금 헤맬 수도 있죠.

    2.3. 케이블 (Cable)

    앞서 언급했듯이, RJ45 방식은 Cat6a 케이블을, SFP+ 방식은 DAC 케이블이나 광케이블(Optical Fiber Cable)과 트랜시버를 사용합니다.

    • Cat6a 케이블: 일반 랜 케이블과 비슷하지만 더 두껍고 실드(Shield) 처리가 잘 되어 있습니다. 짧은 거리에서는 Cat6도 10G를 지원하는 경우가 있지만, 안정적인 10G 연결을 위해서는 Cat6a를 권장하죠.
    • DAC 케이블: SFP+ 포트 간의 짧은 거리를 연결할 때 가장 비용 효율적인 솔루션이거든요. 트랜시버가 케이블에 통합되어 있어 별도로 구매할 필요가 없습니다.
    • 광케이블 및 SFP+ 트랜시버: 장거리 연결이나 전기적 노이즈에 민감한 환경에 적합합니다. 트랜시버 종류(싱글 모드/멀티 모드)와 광케이블 종류를 잘 맞춰야 합니다.

    10G NIC 또는 스위치의 네트워크 설정 화면 예시입니다.

    3. 제가 직접 겪은 삽질 경험과 해결 과정 ⚠️

    13년차 엔지니어라고 해도 새로운 기술을 도입할 때마다 삽질은 피할 수 없더라고요. 10G 네트워크 구축도 예외는 아니었습니다. 몇 가지 기억나는 삽질과 해결책을 공유해볼게요.

    3.1. 드라이버(Driver) 문제와 OS 호환성

    구형 10G NIC를 중고로 구매했을 때, 최신 리눅스 커널(Kernel)에서 드라이버가 제대로 잡히지 않아 애를 먹었습니다. 특히 Proxmox VE 같은 가상화 환경에서는 커널 버전이 중요하거든요. 제조사 홈페이지에서 최신 드라이버를 찾아 수동으로 설치하거나, 호환성 리스트를 꼼꼼히 확인하는 것이 중요합니다. 저는 결국 드라이버 지원이 더 확실한 NIC로 교체했었는데, 이 과정에서 시간과 비용이 좀 들었죠.

    3.2. SFP+ 트랜시버(Transceiver) 호환성

    이게 진짜 골치 아픈 부분이었는데요. SFP+ 트랜시버는 특정 제조사 스위치와 호환되는 경우가 많습니다. ‘Generic’이라고 되어 있어도 실제로는 작동하지 않는 경우가 있더라고요. 제 경우, A사 스위치에 B사 트랜시버를 꽂았더니 인식이 안 되는 문제가 있었습니다. 결국 스위치 제조사가 권장하는 트랜시버를 찾아 구매하거나, 호환성이 검증된 저렴한 타사 제품을 찾아야 했습니다. “호환성 리스트”를 반드시 확인하고 구매하세요! 아니면 DAC 케이블처럼 트랜시버가 내장된 제품을 사용하는 것이 더 속 편할 수도 있습니다.

    3.3. 케이블 품질과 길이의 중요성

    싼 게 비지떡이라는 말을 10G 케이블에서도 절실히 느꼈습니다. Cat6a 케이블이라고 해서 저렴한 제품을 샀는데, 간헐적으로 속도 저하가 발생하거나 링크(Link)가 끊기는 현상이 있었어요. 결국 좀 더 비싸더라도 인증된 브랜드의 Cat6a 케이블로 교체하고 나서야 안정적인 10G 속도를 경험할 수 있었습니다. 또한, RJ45 방식은 케이블 길이가 길어질수록 신호 손실이 커지기 때문에, 100m 이내라도 너무 길게 사용하는 것은 피하는 게 좋습니다.

    4. 10G 네트워크, 과연 성능 향상이 있었을까요? ✅

    이 모든 삽질과 투자를 거쳐 드디어 10G 네트워크를 완성했습니다. 가장 먼저 해본 것은 당연히 속도 테스트였습니다. iPerf3를 이용해서 서버 간의 대역폭(Bandwidth)을 측정해봤죠.

    4.1. iPerf3를 이용한 성능 검증

    iPerf3는 네트워크 성능을 측정하는 데 널리 사용되는 도구입니다. 서버와 클라이언트 모드로 동작하며, TCP나 UDP 트래픽을 생성하여 대역폭, 지연 시간(Latency), 손실률(Packet Loss) 등을 측정할 수 있죠. 저는 주로 TCP 모드로 대역폭을 측정했습니다.

    
    # 서버에서 iPerf3 실행
    iperf3 -s
    
    # 클라이언트에서 iPerf3 실행 (서버 IP 주소 입력)
    iperf3 -c [서버_IP_주소] -P 8 # -P는 병렬 스트림 수
    

    1G 환경에서는 아무리 잘 나와도 940Mbps 정도였는데, 10G 환경에서는 9.x Gbps가 찍히는 것을 보고 정말 감격스러웠습니다! 🎉 물론 실제 파일 전송 속도는 파일 크기, 스토리지 성능, CPU 부하 등 여러 요인에 따라 달라지지만, 네트워크 자체의 잠재력은 확실히 끌어올린 거죠.

    4.2. 체감 성능 변화와 투자 가치 분석

    실제로 10G 네트워크를 사용하면서 가장 크게 체감한 것은 NAS로의 대용량 백업 및 복원 속도였습니다. 예전에는 수백 GB 백업 한 번 하려면 잠시 자리를 비워야 했는데, 이제는 훨씬 짧은 시간에 끝낼 수 있게 되었죠. 가상 머신 이미지 파일(VMDK, QCOW2)을 옮기거나, Proxmox에서 VM 스토리지를 마이그레이션할 때도 엄청난 시간 단축 효과를 봤습니다.

    그렇다면 이 투자가 10G 네트워크 비용 효율성 측면에서 어땠을까요? 솔직히 말해서, “필요한 곳에만” 연결한다면 충분히 가치 있는 투자였습니다. 모든 장치를 10G로 연결할 필요는 없더라고요. 저처럼 NAS, 가상화 서버, 그리고 고성능 워크스테이션 딱 세 곳 정도만 10G로 연결하니 만족도가 높았습니다. 불필요한 곳까지 10G로 확장하려 하면 비용이 기하급수적으로 늘어나더라고요.

    iPerf3를 이용한 1G 및 10G 네트워크 속도 벤치마크 결과 그래프

    iPerf3를 이용한 1G와 10G 네트워크 속도 비교 결과 대시보드입니다.

    5. 결론: 홈랩 10G 네트워크, 누구에게 필요할까?

    지금까지 10G 네트워크 구축에 대한 저의 경험과 비용 효율성 분석을 해봤습니다. 결론부터 말씀드리자면, 홈랩 10G 네트워크는 “특정 요구사항이 있는 사용자에게는 10G 네트워크 비용 대비 매우 효과적인 투자”라고 생각합니다.

    다음과 같은 분들이라면 10G 네트워크를 진지하게 고려해보세요.

    • 대용량 파일(수십 GB 이상)을 자주 전송하는 분 (NAS, 미디어 서버 사용자)
    • 여러 대의 가상 머신이나 컨테이너를 운영하며 고성능 스토리지를 사용하는 분
    • 영상 편집, 3D 렌더링 등 고대역폭을 요구하는 작업을 하는 워크스테이션 사용자
    • 홈랩의 성능 병목이 확실히 네트워크에 있다고 판단되는 분

    반대로, 단순히 웹 서핑, 문서 작업, 스트리밍 시청 등 일반적인 용도로만 사용하신다면 1G 네트워크로도 충분해요. 굳이 비싼 돈 들여 10G를 구축할 필요는 없어요. 오히려 10G 장비의 추가적인 전력 소모와 발열이 더 부담으로 다가올 수도 있어요.

    💡 저의 팁: 처음부터 모든 것을 10G로 바꾸려고 하지 마세요. 가장 병목이 심한 구간(예: NAS와 메인 서버/워크스테이션)부터 SFP+ NIC와 DAC 케이블 조합으로 점진적으로 업그레이드하는 것이 10G 네트워크 비용 효율성 측면에서 가장 현명한 방법이더라고요. 중고 시장을 잘 활용하는 것도 좋은 방법이고요. 제가 그랬거든요.

    저의 13년차 삽질 경험이 여러분의 홈랩 네트워크 구축에 도움이 되었으면 좋겠습니다. 혹시 더 궁금한 점이 있으시다면 언제든지 댓글 남겨주세요! 다음번에는 10G 네트워크 환경에서 고성능 스토리지 구축하는 이야기도 한번 다뤄볼까 합니다. 기대해주세요!

    홈랩 1G vs 10G 네트워크 장단점 및 비용 효율성 비교 인포그래픽

    1G와 10G 네트워크의 장단점 및 비용 효율성 비교 인포그래픽입니다.

  • [HomeLabs] 홈랩 네트워크 광고 차단: Pi-hole vs AdGuard Home 비교 및 구축 가이드

    광고 때문에 인터넷 쓰기가 불편하셨던 적 있으신가요?

    솔직히 말씀드리면, 저도 한동안은 브라우저 확장 프로그램 하나로 버텼거든요. uBlock Origin 설치해두고 ‘이 정도면 됐지’ 싶었는데… 어느 날 스마트TV에서 광고가 막 뜨는 거 보고 현타가 왔습니다. 앱마다 확장 프로그램을 설치할 수도 없고, IoT 기기들은 어떻게 할 방법이 없더라고요.

    그때부터 네트워크 레벨 광고 차단(Network-level Ad Blocking)을 본격적으로 알아보기 시작했습니다. DNS 필터링 방식이라서 공유기에 연결된 모든 기기에 한 번에 적용되거든요. 홈랩을 운영하는 입장에서는 이게 진짜 맞는 방향이었어요.

    그리고 이 분야에서 가장 많이 언급되는 두 가지가 바로 Pi-hole과 AdGuard Home입니다. 둘 다 직접 써봤는데, 생각보다 차이가 꽤 있더라고요. 오늘은 홈랩 광고 차단 솔루션으로 어떤 걸 선택할지 고민하시는 분들을 위해 제 경험을 정리해봤습니다.

    ▲ DNS 필터링 기반 홈랩 광고 차단 구조 — 모든 기기의 DNS 요청이 Pi-hole 또는 AdGuard Home을 거쳐 광고 도메인을 차단합니다.

    DNS 필터링이 뭔지 먼저 짚고 넘어가겠습니다

    쉽게 말해서, 인터넷 주소록(DNS)을 중간에서 가로채는 방식이에요. 브라우저가 ads.example.com의 IP 주소를 물어볼 때, 일반 DNS 서버 대신 Pi-hole이나 AdGuard Home이 먼저 받아서 “그런 주소 없어요”라고 답해버리는 거거든요.

    그러면 광고 서버로 연결 자체가 안 되니까 광고가 뜨질 않죠. 브라우저 확장 프로그램과 다른 점은 네트워크에 연결된 모든 기기에 자동으로 적용된다는 겁니다. 스마트폰, TV, 게임기, 심지어 냉장고까지요.

    • 장점: 기기별 설정 불필요, 앱 내 광고도 일부 차단 가능, 중앙 집중 관리
    • 단점: DNS 우회 광고는 차단 불가, 잘못 설정하면 정상 사이트도 막힘, 서버 운영 필요

    Pi-hole vs AdGuard Home — 뭐가 다른가요?

    처음에 저도 “둘 다 DNS 필터링이면 거기서 거기 아닌가?” 싶었는데, 실제로 써보니 철학 자체가 좀 달랐습니다.

    항목 Pi-hole AdGuard Home
    출시 연도 2014년 2019년
    개발 언어 Bash / PHP Go / React
    설치 방법 쉘 스크립트, Docker 바이너리 실행, Docker
    DNS-over-HTTPS(DoH) 지원 별도 설정 필요 (cloudflared 등) 기본 내장
    DNS-over-TLS(DoT) 지원 별도 설정 필요 기본 내장
    DHCP 서버 기능 지원 지원
    클라이언트별 필터링 그룹 기반 (v5.0+) 클라이언트별 세밀 설정
    UI 직관성 익숙해지면 편함 처음부터 쓰기 편함
    커뮤니티 크기 매우 큼 빠르게 성장 중
    라이선스 EUPL (오픈소스) GPL-3.0 (오픈소스)

    제가 느낀 핵심 차이를 한 줄로 정리하면 이렇습니다. Pi-hole은 역사가 길고 커뮤니티가 탄탄하며, AdGuard Home은 최신 기능을 기본 제공하면서 설정이 더 직관적이에요.

    Pi-hole 구축 가이드 (Docker 기준)

    저는 홈랩 서버에서 Docker로 돌리는 방식을 씁니다. Raspberry Pi에 직접 설치하는 방법도 있지만, 관리 편의성을 생각하면 Docker가 훨씬 낫더라고요.

    1단계: docker-compose.yml 작성

    version: "3"
    
    services:
      pihole:
        container_name: pihole
        image: pihole/pihole:latest
        ports:
          - "53:53/tcp"
          - "53:53/udp"
          - "80:80/tcp"
        environment:
          TZ: 'Asia/Seoul'
          WEBPASSWORD: 'your_secure_password'  # 반드시 변경하세요!
        volumes:
          - './etc-pihole:/etc/pihole'
          - './etc-dnsmasq.d:/etc/dnsmasq.d'
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
    

    2단계: 실행

    # 컨테이너 시작
    docker compose up -d
    
    # 로그 확인
    docker logs pihole
    
    # 정상 실행 여부 확인
    docker ps | grep pihole
    

    3단계: 공유기 DNS 설정 변경

    여기가 핵심이에요. 공유기 관리 페이지(보통 192.168.0.1 또는 192.168.1.1)에 접속해서 DNS 서버 주소를 Pi-hole이 실행 중인 서버의 IP로 변경해주면 됩니다. 이렇게 하면 공유기에 연결된 모든 기기가 Pi-hole을 DNS로 사용하게 돼요.

    # DNS 설정이 제대로 됐는지 테스트
    nslookup google.com 192.168.x.x  # Pi-hole 서버 IP 입력
    
    # 광고 도메인 차단 확인
    nslookup doubleclick.net 192.168.x.x
    # 0.0.0.0 또는 NXDOMAIN이 나오면 정상
    

    4단계: 블록리스트 추가

    기본 블록리스트도 나쁘지 않지만, 추가해주면 더 좋습니다. Pi-hole 웹 UI에서 Adlists 메뉴로 가서 아래 리스트들을 추가해보세요.

    • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts — 종합 광고/악성 도메인 차단
    • https://adaway.org/hosts.txt — 모바일 광고 특화
    • https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt — 광고 서버 특화

    추가 후 Tools → Update Gravity를 실행하면 적용됩니다.

    AdGuard Home 구축 가이드 (Docker 기준)

    AdGuard Home은 솔직히 Pi-hole보다 초기 설정이 더 쉬웠어요. DoH/DoT 같은 기능을 별도 설정 없이 바로 쓸 수 있다는 게 특히 마음에 들었습니다.

    1단계: docker-compose.yml 작성

    version: "3"
    
    services:
      adguardhome:
        container_name: adguardhome
        image: adguard/adguardhome:latest
        ports:
          - "53:53/tcp"
          - "53:53/udp"
          - "3000:3000/tcp"  # 초기 설정 웹 UI
          - "80:80/tcp"      # 설정 완료 후 웹 UI
          - "443:443/tcp"    # HTTPS (선택)
        volumes:
          - './adguard/work:/opt/adguardhome/work'
          - './adguard/conf:/opt/adguardhome/conf'
        restart: unless-stopped
    

    2단계: 초기 설정 마법사 실행

    # 컨테이너 시작
    docker compose up -d
    
    # 브라우저에서 초기 설정 접속
    # http://서버IP:3000 으로 접속
    # 마법사 따라가면 5분 안에 완료됩니다
    

    3단계: DNS-over-HTTPS 업스트림 설정

    AdGuard Home의 진짜 강점이 여기서 나옵니다. Settings → DNS Settings → Upstream DNS servers에서 아래처럼 입력하면 돼요.

    # Cloudflare DoH
    https://cloudflare-dns.com/dns-query
    
    # Google DoH
    https://dns.google/dns-query
    
    # Quad9 DoH (악성 도메인 차단 포함)
    https://dns.quad9.net/dns-query
    

    이렇게 하면 Pi-hole처럼 별도로 cloudflared 같은 걸 설치할 필요가 없어요. 처음 설정할 때 이 부분에서 “오, 이게 되네?” 싶었습니다 ㅎㅎ

    ▲ AdGuard Home 웹 UI — DNS-over-HTTPS 업스트림 설정과 필터링 규칙을 직관적인 인터페이스에서 관리할 수 있습니다.

    4단계: 필터링 목록 추가

    Filters → DNS blocklists → Add blocklist에서 추가합니다. AdGuard Home은 기본으로 AdGuard DNS filter가 포함되어 있어서 별도 추가 없이도 바로 쓸 수 있어요.

    • AdGuard DNS filter (기본 포함)
    • EasyList (광고 특화)
    • EasyPrivacy (추적 특화)
    • Malware Domain List (악성 도메인)

    ⚠️ 삽질 경험 — 이것만 조심하세요

    실제로 구축하면서 제가 겪은 문제들입니다. 미리 알면 시간 많이 아낄 수 있어요.

    포트 53 충돌 문제 (Ubuntu 기준)

    Ubuntu 18.04 이상에서는 systemd-resolved가 이미 53번 포트를 쓰고 있어서 컨테이너가 뜨질 않더라고요. 처음에 이 오류 보고 한참 헤맸습니다.

    # 현재 53 포트 사용 확인
    sudo lsof -i :53
    
    # systemd-resolved의 stub listener 비활성화
    sudo nano /etc/systemd/resolved.conf
    # DNSStubListener=no 로 변경
    
    # 재시작
    sudo systemctl restart systemd-resolved
    
    # /etc/resolv.conf 심볼릭 링크 재설정
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    

    정상 사이트가 막히는 경우

    가끔 은행 사이트나 업무 사이트가 갑자기 안 열리는 경우가 있는데, 대부분 블록리스트가 너무 공격적으로 잡아버리는 경우예요. Pi-hole이든 AdGuard Home이든 Whitelist(허용 목록)에 해당 도메인을 추가해주면 해결됩니다.

    # Pi-hole CLI로 화이트리스트 추가
    pihole -w example.com
    
    # 또는 웹 UI에서 Whitelist 메뉴 활용
    

    DNS 캐시 문제

    설정을 바꿨는데 적용이 안 되는 것 같을 때는 클라이언트 기기의 DNS 캐시를 지워줘야 해요.

    # Windows
    ipconfig /flushdns
    
    # macOS
    sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    
    # Linux
    sudo systemd-resolve --flush-caches
    

    구축 결과 확인 — 이렇게 달라졌어요

    설정 완료 후 며칠 사용해보면 대시보드에서 통계가 쌓이기 시작합니다. 저는 처음에 결과 보고 좀 놀랐거든요. 전체 DNS 요청 중 광고/추적 도메인이 차지하는 비율이 생각보다 훨씬 높았어요.

    ▲ DNS 필터링 대시보드 통계 — 전체 쿼리 중 차단된 비율과 주요 차단 도메인을 실시간으로 확인할 수 있습니다.

    확인 방법은 간단합니다. 아래 사이트에 접속해보세요.

    # 광고 차단 테스트 사이트
    # https://d3ward.github.io/toolz/adblock.html
    # 위 사이트에서 차단율을 확인할 수 있습니다
    
    # DNS 응답 직접 확인
    nslookup pagead2.googlesyndication.com
    # 0.0.0.0 또는 NXDOMAIN이 나오면 정상 차단 중
    

    🎉 정상적으로 동작한다면 유튜브 이외의 대부분 사이트에서 광고가 사라진 걸 느끼실 수 있어요. (유튜브 광고는 같은 도메인을 쓰기 때문에 DNS 필터링으로는 차단이 어렵습니다. 이 부분은 솔직하게 말씀드리는 게 맞는 것 같아요.)

    어떤 걸 선택해야 할까요? — 제 추천

    결론부터 말씀드리면, 처음 시작하시는 분께는 AdGuard Home을 추천드립니다. 이유는 단순해요.

    • ✅ 초기 설정 마법사가 있어서 진입 장벽이 낮음
    • ✅ DoH/DoT를 별도 설정 없이 바로 사용 가능
    • ✅ 클라이언트별 필터링 설정이 직관적
    • ✅ 단일 바이너리라 관리가 단순함

    반면 Pi-hole이 더 나은 경우도 있습니다.

    • ✅ 커뮤니티가 워낙 크다 보니 문제 발생 시 레퍼런스가 훨씬 많음
    • ✅ Gravity 데이터베이스 방식이 대용량 블록리스트 처리에 효율적
    • ✅ 오래된 Raspberry Pi에서도 가볍게 돌아감
    • ✅ 이미 Pi-hole 사용 경험이 있다면 굳이 바꿀 필요 없음

    💡 팁: 두 개를 동시에 운영하면서 하나를 백업 DNS로 쓰는 방법도 있어요. 공유기 설정에서 1차 DNS는 AdGuard Home, 2차 DNS는 Pi-hole으로 설정하면 한 쪽이 다운되더라도 인터넷이 끊기지 않습니다.

    ▲ Pi-hole vs AdGuard Home 선택 가이드 — 사용 목적과 기술 수준에 따른 추천 기준을 정리했습니다.

    마무리 — 한 번 설정해두면 진짜 편합니다

    처음 구축할 때는 포트 충돌이니 DNS 설정이니 좀 헤매긴 했는데, 한번 돌아가기 시작하면 진짜 신경 쓸 게 없어요. 그냥 알아서 다 막아주거든요.

    제가 홈랩에서 이것저것 실험해보면서 느낀 건데, 네트워크 레벨 광고 차단은 홈랩 입문자가 처음 도전하기에 딱 좋은 프로젝트예요. 결과가 눈에 보이고, 실생활에 바로 도움이 되고, 배우는 것도 많거든요. DNS가 어떻게 동작하는지 자연스럽게 익히게 되는 부수 효과도 있고요.

    다음 단계로는 Unbound를 Recursive DNS Resolver(재귀 DNS 리졸버)로 연결해서 외부 DNS 의존도를 완전히 없애는 방법도 있는데, 이건 다음 글에서 다뤄볼게요. 관심 있으신 분들은 기대해 주세요.

    혹시 구축하다가 막히는 부분 있으시면 댓글로 남겨주세요. 제가 겪은 삽질이 더 있으면 추가로 공유해드리겠습니다 😄

    자주 묻는 질문 (FAQ)

    Q. Raspberry Pi 없이도 구축할 수 있나요?

    네, 가능합니다. 집에 항상 켜져 있는 NAS, 미니 PC, 또는 기존 홈서버가 있다면 Docker로 바로 실행할 수 있어요. 저도 별도의 Raspberry Pi 없이 기존 홈서버에서 운영 중입니다.

    Q. 유튜브 광고도 막을 수 있나요?

    아쉽지만 DNS 필터링만으로는 유튜브 광고 차단이 어렵습니다. 유튜브는 광고와 일반 콘텐츠를 같은 도메인에서 제공하기 때문이에요. 유튜브 광고는 브라우저 확장 프로그램(uBlock Origin 등)과 병행해서 사용하시는 걸 권장합니다.

    Q. DNS 서버가 다운되면 인터넷이 끊기나요?

    공유기에 1차 DNS만 Pi-hole/AdGuard Home으로 설정했다면, 서버가 다운될 경우 인터넷 접속이 안 될 수 있습니다. 2차 DNS로 공개 DNS(예: 1.1.1.1)를 설정해두거나, 앞서 언급한 것처럼 두 솔루션을 이중화하는 방법을 권장합니다.

    Q. Pi-hole과 AdGuard Home을 동시에 설치해도 되나요?

    같은 서버에 동시 설치는 포트 53 충돌 때문에 어렵습니다. 다른 서버(또는 VM/컨테이너)에 각각 설치해서 이중화 구성으로 운영하는 방식을 추천합니다.

  • [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 기본 설치 가이드와 함께 보시면 더 도움이 될 거예요.