카테고리 없음

OpenWrt란?

비너발트 2025. 6. 23. 08:16

 

 

OpenWrt는 임베디드 기기, 특히 라우터를 위한 리눅스 기반 오픈소스 펌웨어입니다. 원래 소비자용 라우터에 커스텀 펌웨어를 올리는 용도로 시작됐다고 알고 있는데 현재는 x86, ARM, MIPS 등 다양한 아키텍처를 지원합니다

 

주요 특징으로는

  • 패키지 관리: opkg를 통한 실시간 패키지 설치·업데이트 지원
  • 경량화된 Linux: BusyBox, uci(설정 인터페이스) 등 경량 컴포넌트로 구성
  • 유연한 네트워크 설정: VLAN, 브리지, 방화벽, QoS, VPN 등 고급 네트워크 기능 제공
  • 웹 UI(LuCI): 기본 제공되는 LuCI를 통해 GUI로 편리하게 관리

이처럼 OpenWrt는 커스텀 라우팅, 방화벽, 무선 AP 구성을 자유자재로 다룰 수 있어서 상업용이 개인용 학습용으로 괜찮아 보였습니다 특히 별도의 생태계가 존재하기 때문에 npm install 하듯 OpenWrt에서 사용할 수 있는 패키지들이 따로 있기 때문에 오픈소스에 기여한 분들이 만들어주신 기능들을 쉽게 도입할 수 있었어요

구축 계기 및 배경

회사에서 라우터 개발 연구 업무를 맡으면서, 라우팅 소프트웨어 스택과 라우터 펌웨어 아키텍처를 깊이 이해할 필요가 있었습니다. 업무 중에는 주로 시뮬레이션과 코드 레벨 분석을 해왔지만, 실제 하드웨어 환경에서 펌웨어를 직접 올리고 네트워크 토폴로지 전체를 구성해 보는 경험은 부족했기도 하고 OpenWrt를 직접 구축해보지 않고 이미 구축된 상태에서 그 위에서 돌아가는 캡티브포털 또는 여러 통신 소프트웨어를 개발했기에 직접 해보고 싶다는 생각이 들었습니다 그래서 주말에라도 집에서 실습할 수 있는 환경을 꾸미고자, 내 PC(호스트) 위에 가상머신 형태로 OpenWrt를 설치하고, 실제 와이파이 AP까지 구성해 보았습니다.

제가 라우터기기를 구매하고 어떻게 구축을 할 것인가 고민하다 아래처럼 계획을 했습니다

  1. OpenWrt 설치·부팅 플로우 이해
  2. UCI 기반 설정 파일 구조와 방화벽, DHCP 동작 확인
  3. KVM/QEMU 가상화와 브리지 네트워크 구성
  4. 무선 AP 호스트 구성(hostapd+dnsmasq) 실습
  5. LuCI 웹 UI를 이용한 관리 편의성 테스트

환경 구성

  • 호스트 OS: Ubuntu Desktop 22.04 LTS
  • 가상화: KVM/QEMU (+ libvirt, virt-manager)
  • 물리 이더넷 포트: enp2s0 (WAN), enp4s0 (LAN)
  • 브리지: br-wan (ISP DHCP), br-lan (192.168.1.1/24)
  • 무선 칩셋: Intel Centrino Advanced‑N 6205 (hostapd)
  • OpenWrt 이미지: x86_64 ext4-combined (23.05.2)

환경 구성을 준비하던 중, 라우터 사양을 잘못 확인해 구매한 부분이 있었습니다... 무선 칩셋이 일반 노트북용 Intel Centrino Advanced-N 6205라, 호스트 OS에서는 AP 모드가 잘 동작했지만 VM으로 패스스루하면 불안정하거나 AP 모드 자체가 동작하지 않는 문제가 있었습니다 그래서 OpenWrt VM 내부에서 AP를 운영하기보다는, Ubuntu 호스트에서 hostapd로 AP를 띄우는 방식으로 진행했습니다. 즉 하나의 OpenWrt에서 AP 와 라우터 방화벽을 구성하려 했지만 내장 칩셋의 한계 때문에 AP는 호스트에서, 라우터와 방화벽은 OpenWrt에서만 관리하도록 이원화를 시켰습니다

구축 과정 요약

1. 호스트 브리지 구성 (Netplan)

  • enp2s0 → br-wan, DHCP 적용
  • enp4s0 → br-lan, 고정 IP 192.168.1.1/24
  • systemd-networkd 렌더러 활성화 후 netplan apply

2. OpenWrt VM 배포

  • OpenWrt ext4 이미지 다운로드 및 qemu-img convert
  • virt-install 로 VM 생성 (--os-variant=generic, --network bridge=br-*)
  • VM 콘솔 접근 → UCI로 WAN(DHCP)/LAN(static) 설정 후 네트워크 재시작

3. 호스트 무선 AP 구성

  • hostapd + dnsmasq 설치
  • wlp3s0 인터페이스 up → hostapd.conf에 bridge=br-lan 지정
  • /etc/dnsmasq.d/ap.conf로 DHCP 범위(192.168.1.100–249) 설정
  • systemctl enable --now hostapd dnsmasq → Android 기기 연결 성공

4. SSH 및 LuCI 설정

  • UCI로 Dropbear WAN 인스턴스 생성, 방화벽 규칙 추가 → 외부 SSH 가능
  • opkg install luci → uhttpd 활성화 → HTTP(GUI) 접속 확인

 

UCI · FW4 · nftables 방화벽 이해

UCI (Unified Configuration Interface)

  • /etc/config/*.conf 파일을 CLI로 통일 관리
  • uci set, uci delete, uci commit → 서비스 재시작으로 즉각 반영
  • 텍스트 설정이므로 Git 추적·백업 용이

FW4 (Firewall4)

  • OpenWrt 기본 방화벽 추상화 레이어
  • 내부적으로 nftables 룰셋을 생성
  • Zone(예: lan, wan), NAT/마스커레이드, 포트포워딩 등 선언적 설정

nftables

  • 리눅스 차세대 방화벽 엔진 (iptables 후속)
  • Table→Chain→Rule 구조로 가독성·성능 개선
  • nft list ruleset으로 전체 룰셋 확인

느낀 점 & 팁

  • UCI: 한 줄 커맨드로 설정 변경·rollback 가능해 편리
  • 가상화 테스트: 물리 장비 없이도 라우팅 동작·방화벽 정책 실험 가능했습니다
  • 호스트 AP: 내장 칩셋으로 AP 구성시 안정적이지 않다는 평가가 있었는데 제가 느끼기엔 나름 안정적이고 생각보다 시중 와이파이보다 반응이 빨랐습니다 하드웨어 성능의 차이 때문인진 모르겠네요 다만 속도측정을 해보니.. 설정이 잘못됐는지 속도가 ㅎㅎ..
  • LuCI: CLI에 익숙지 않은 사용자도 직관적으로 설정 가능해 보였고 직접 설정할 줄 모르는 사람이 접근한다면 설치해 주는 것 추천드립니다

 

추후엔 네트워크 칩셋을 변경해 원래 계획대로 구축하여 2.4G, 5G를 구축해 볼 예정입니다 6G 칩셋이 저렴해지면 6G로 도전하는 걸로😊