FreeBSD 환경에서도 802.11 무선 프로토콜의 3-주소(3-Address) 프레임 제약으로 인해, wlanmode sta (클라이언트 모드)로 동작하는 무선 인터페이스( wlan0 )를 bridge(4) 에 직접 추가하는 것은 커널 레벨에서 차단됩니다. parprouted 와 같은 서드파티 데몬을 배제하고 FreeBSD의 자체 내장 기능(Base System)만으로 이 문제를 해결하는 세 가지 구체적인 방법을 전체 설정 코드와 함께 설명해 드립니다. 유선 랜카드는 em0 , 무선 랜카드는 wlan0 (물리 디바이스 iwm0 가정)으로 기준을 잡았습니다. 방법 1: PF(Packet Filter)를 이용한 L3 NAT (가장 안정적이고 권장됨) 유선망과 무선망의 서브넷을 분리하고, 커널에 내장된 PF를 사용하여 무선 인터페이스로 나가는 패킷을 NAT 처리합니다. 브로드캐스트 도메인이 분리되어도 상관없는 환경에서 가장 빠르고 확실한 방법입니다. 1. /etc/rc.conf 전체 추가 설정 Ini, TOML # 네트워크 인터페이스 활성화 및 IP 설정 (대역 분리) wlans_iwm0="wlan0" ifconfig_wlan0="WPA DHCP" ifconfig_em0="inet 192.168.2.1 netmask 255.255.255.0" # 커널 IP 포워딩(라우팅) 활성화 gateway_enable="YES" # PF 방화벽 및 NAT 활성화 pf_enable="YES" pf_rules="/etc/pf.conf" pf_flags="" pflog_enable="YES" 2. /etc/pf.conf 전체 룰셋 (누락 없음) PF # 매크로 정의 ext_if = "wlan0" int_if = "em0" int_net = "192.168.2.0/24" # NAT 룰: 유선 대역(em0)에서 들어오는 트래픽을 무선(wlan0)의 IP로 변환 nat on $ext_if from $int_net to any -> ($ext_if) # 방화벽 기본 정책: 전체 허용 (NAT 전용 구성) pass in all pass out all 3. 적용 명령어 Bash service netif restart service routing restart service pf start 방법 2: FreeBSD 커널 Proxy ARP + Static 라우팅 (동일 서브넷 유지) 뒤에 연결된 유선 기기(예: 192.168.1.50 )의 IP가 고정되어 있을 때, NAT 없이 동일 서브넷을 유지하는 방법입니다. FreeBSD의 arp 명령어에 내장된 pub (Publish) 플래그를 사용하여 커널이 직접 ARP 응답을 대행하게 합니다. 1. /etc/rc.conf 전체 추가 설정 Ini, TOML # 무선 인터페이스 설정 (공유기 대역이 192.168.1.x 라고 가정) wlans_iwm0="wlan0" ifconfig_wlan0="WPA DHCP" # 유선 인터페이스는 IP 없이 UP 상태만 유지 ifconfig_em0="up" # 커널 IP 포워딩 활성화 gateway_enable="YES" 2. 시작 스크립트 작성 ( /usr/local/etc/rc.d/proxyarp_bridge ) 시스템 부팅 시 ARP Publish와 호스트 라우팅을 자동으로 등록하는 스크립트입니다. wlan0_mac 변수에는 실제 wlan0 의 MAC 주소를 입력해야 합니다. Bash #!/bin/sh # # PROVIDE: proxyarp_bridge # REQUIRE: netif routing # KEYWORD: nojail . /etc/rc.subr name="proxyarp_bridge" rcvar="proxyarp_bridge_enable" start_cmd="proxyarp_bridge_start" stop_cmd="proxyarp_bridge_stop" # 설정할 변수 WIRED_CLIENT_IP="192.168.1.50" WLAN_IF="wlan0" WIRED_IF="em0" # wlan0의 실제 MAC 주소를 기입 (예: 00:11:22:33:44:55) WLAN_MAC="00:11:22:33:44:55" proxyarp_bridge_start() { echo "Starting Kernel Proxy ARP and Routing for ${WIRED_CLIENT_IP}" # 유선 기기에 대한 트래픽을 유선 인터페이스(em0)로 라우팅 route add -host ${WIRED_CLIENT_IP} -interface ${WIRED_IF} # 무선 네트워크에 유선 기기의 IP를 내 무선 MAC으로 응답하도록 퍼블리시 arp -S ${WIRED_CLIENT_IP} ${WLAN_MAC} pub } proxyarp_bridge_stop() { echo "Stopping Kernel Proxy ARP and Routing for ${WIRED_CLIENT_IP}" arp -d ${WIRED_CLIENT_IP} route delete -host ${WIRED_CLIENT_IP} } load_rc_config $name run_rc_command "$1" 3. 스크립트 권한 부여 및 서비스 등록 Bash chmod +x /usr/local/etc/rc.d/proxyarp_bridge sysrc proxyarp_bridge_enable="YES" service proxyarp_bridge start 방법 3: WDS (Wireless Distribution System) 브릿지 구성 가장 완벽한 L2 브릿징이지만, 연결하려는 상단 무선 AP(공유기)가 WDS 모드를 지원하고 허용해야만 작동합니다. FreeBSD에서는 wlanmode wds 플래그를 사용합니다. 1. /etc/rc.conf 전체 추가 설정 Ini, TOML # wlan0을 클라이언트(sta)가 아닌 wds 모드로 생성 wlans_iwm0="wlan0" create_args_wlan0="wlanmode wds" ifconfig_wlan0="WPA up" # 물리 유선 인터페이스 활성화 ifconfig_em0="up" # 브릿지 인터페이스 생성 및 포트 결합 cloned_interfaces="bridge0" ifconfig_bridge0="addm wlan0 addm em0 up" # 브릿지 자체에 IP를 할당 (관리용) ifconfig_bridge0_alias0="inet 192.168.1.100 netmask 255.255.255.0" 2. 적용 명령어 Bash service netif restart 상단 공유기 환경에 제어권이 없다면 방법 1 (PF L3 NAT)을, 제어권은 없지만 동일 서브넷의 특정 기기 통신이 반드시 필요하다면 방법 2 (Proxy ARP)를 적용하는 것이 가장 적합합니다.