아무거나 라우터로 만들어보자
미국 정부가 신규 소비자용 라우터 수입을 사실상 금지하는 정책을 발표했더군요. 정말 황당한 결정이지만, 혹시 이게 실제로 시행된다면 직접 라우터를 만드는 방법을 배워두는 것도 나쁘지 않을 것 같습니다.
다행히도 컴퓨터처럼 생긴 거라면 거의 다 라우터로 만들 수 있어요. 저는 리눅스 기반 미니PC를 라우터로 써온 지 벌써 수년째인데, 정말 안정적으로 잘 돌아가거든요. 그동안 유일하게 교체한 부품은 20달러 짜리 mSATA 드라이브뿐입니다.
저는 보통 Debian을 쓰지만, Alpine Linux도 충분히 잘 작동할 겁니다. 리눅스가 잘 돌아가고 USB 포트가 몇 개 있으면 된다는 거죠.
미니PC, 데스크톱, SBC, 랙마운트 서버, 구형 노트북 등 뭐든 가능합니다. 물론 이건 미국 정책에 대한 현실적인 해결책이라기보다는, 이미 가지고 있는 하드웨어를 좀 더 활용하는 재미있는 "해킹"이라고 봐주시면 좋겠어요. 결국 라우터도 컴퓨터일 뿐이니까요.
하드웨어 선택하기
저는 개인적으로 패시브 쿨링 방식의 미니PC를 좋아합니다. 그렇지만 웬만한 건 다 괜찮아요. 이더넷 포트가 2개 있으면 좋지만, USB-이더넷 동글로도 충분합니다. 내장 포트만큼 안정적이지는 않겠지만, 실제로는 잘 작동할 겁니다.
예를 들어, 이렇게 한데 모아 놓은 부품들만으로도 유선 랜에서는 820~850Mbps, 무선에서는 약 300Mbps 정도를 뽑아낼 수 있습니다.
이 기계는 1.5GHz에서 도는 Celeron 3205U 듀얼코어인데요. 이 정도면 충분히 가정이나 소규모 사무실의 트래픽을 감당할 수 있어요.
조금 더 거슬러 올라가면, 2016년 가을학기 초에 저는 이런 구성으로 썼었습니다:
- 예전 직장에서 주워온 ThinkPad T60
- ThinkPad의 확장 슬롯에 꽂은 ExpressCard-PCIe 브릿지
- PCIe 슬롯에 꽂은 이름 모를 이더넷 카드(마운팅 브래킷도 없음)
- 대학에서 10달러에 산 낡은 Cisco 2960 100Mbps 스위치
- 중고 물품점에서 사온 D-Link 라우터(WAN 포트가 망가진 대신 액세스 포인트로 사용)
네, 이것도 엄연한 라우터입니다! 정크처럼 보이긴 하는데(실제로 정크지만), 라우터 역할을 완벽하게 해내거든요.
어떻게 설정하나요?
시스템은 이렇게 구성됩니다:
| 인터페이스 | 네트워크 |
|---|---|
| eth0 | WAN |
| eth1 | LAN (유선) |
| wlan0 | LAN (무선) |
두 LAN 인터페이스는 브릿지로 연결되어 있어서, 유선과 무선 기기들이 자유롭게 통신할 수 있습니다. LAN 포트가 부족하면 USB 이더넷 동글을 얼마든지 연결해서 브릿지에 묶을 수 있어요. 진정한 스위치만큼 빠르지는 않겠지만, 기능은 충분히 합니다.
Debian을 OS로 쓰는데, 기본 설치 이후 추가로 필요한 패키지는 별로 없습니다:
- hostapd - Wi-Fi 네트워크 생성
- dnsmasq - DNS & DHCP 담당
- bridge-utils - 포트를 하나의 네트워크로 묶기
- 기본 설치에 포함되지 않은 펌웨어 블롭들
참고로 여기서는 IPv4만 다룰 겁니다. IPv6는 모바일 기기에서는 좋지만, 로컬 네트워크 환경에서는 아직도 너무 복잡하거든요.
설치 & 설정
기본적으로 표준 Debian 설치와 비슷합니다. 몇 가지만 신경 쓰면 돼요:
- BIOS/UEFI에서 PXE 네트워크 부팅을 비활성화하세요
- 가능하면 기기의 클록 속도를 낮추되, USB나 PCI 기기의 전원 관리는 꺼두세요
- "AC 전원 복구 후 복원" 같은 옵션을 켜두세요
- 일부 기기는 디스플레이가 없으면 제대로 부팅이 안 됩니다. 그럼 HDMI에 더미 동글을 꽂아두세요
- 대부분의 하드웨어는 non-free-firmware 저장소가 필요합니다
무선 하드웨어에 따라 추가 펌웨어 패키지를 설치해야 할 수도 있습니다:
Intel 기기의 경우:
sudo apt install firmware-iwlwifi
Realtek 기기의 경우:
sudo apt install firmware-ath9k-htc
정말 구형 기기의 경우:
sudo apt install firmware-atheros
필수 패키지 설치
초기 설치 후 몇 가지 유틸리티를 더 설치하면 됩니다:
sudo apt install bridge-utils hostapd dnsmasq
소프트웨어적으로는 이게 전부예요. 시스템에 총 250개 정도의 패키지가 설치됩니다.
네트워크 인터페이스 이름 지정하기
현대의 리눅스 시스템에서는 네트워크 인터페이스가 enp0s31f6 같은 이름으로 물리적 연결과 드라이버 타입을 기반으로 이름 지어집니다. 저는 eth0, eth1 같은 구식 형식이 훨씬 편하더군요.