서론
지난번 블랙프라이데이에 링크시스 E8450 을 할인하길래 냉큼 집어왔습니다. 발매된 지 좀 되었지만 OpenWrt가 지원하는 몇 안되는 AX 급 라우터인데다가 메모리가 쓸데없이(?) 많이 들어가 있어서 OpenWrt 사용자들에게 핫한 기기인 것 같더군요.
칩셋: 미디어 텍 MT7622(A53 dual core 1.3GHz)
플래쉬: 128MB (80MB 사용가능)
램: 512MB
(추가: 찾아보니 아이피타임 AX8004M 과 사양이 동일하네요. 아마도 동일 하드웨어 일 듯.)
주의사항
제 지식이 일천하고 기억이 오락가락 해서 내용에 오류가 있을 가능성이 매우 높습니다. 내용을 그대로 따라하시는 것은 추천하지 않습니다. 곳곳에 있는 링크를 참조해 주세요.
홈 네트워크 구성
구성은 단순합니다. 나스나 라즈베리파이로 홈오토메이션 하시는 분들은 다들 해보셨을 구성인데요. 굳이 사용기를 쓰는 이유는 리버스 프록시를 일반 유무선 공유기에 직접 설치했다는 정도?
비용과 공간의 여유가 있다면 X86 머신 + pfsense 같은 것으로 구성할 수도 있겠지만 누구나 가지고 있을 법한 기기로 구성했다는데 의의를 두고 싶네요.
현재 서버로 운용하는 기기는
1. 라스베리파이 3B: mkdocs 서버로 개인 위키로 씁니다. markdown 문서를 웹페이지로 만들어 줍니다. 즐겨찾기를 여기에 넣어두면 브라우저, 디바이스 상관없이 공유할 수 있지요. 업데이트는 약간 불편하지만서도.
2. 인텔 미니피씨 (Nuc10 i3): 소스코드 백업, 기타 자료 백업 (이건 서버라기 보다 백업 머신입니다. 제 주력 랩탑에 무슨 일이 일어나면 바로 교체가능한)

소스코드 백업
소스코드 백업은 GitHub 로 푸시할 때 별도의 카피를 저장합니다. 추가의 리모트 리포지토리 역할이지요. 별도의 서버 없이 SSHD 서비스만 돌고 있으면 됩니다. 대부분 기본으로 설치되지요. 백업 방법은 config 파일에 pushurl 한 줄만 넣어 주면 양쪽으로 push 가 됩니다. 저는 3방향으로 push 합니다만.
자료 백업
자료 백업은 Rsync 로 합니다. 마찬가지로 SSHD만 있으면 되니 별도 설치과정 없이 포트만 열어주면 됩니다.
제 랩탑이 10th gen i7 인데 동일 세대 i3와 하드 디스크 1 대 1 호환이 가능하더라고요. 인텔 미니 피씨에서 SSD를 뽑아 랩탑에 끼우면 그냥 동작합니다. 반대도 마찬가지고요. 위 방법으로 항상 동기를 해두면 다음과 같은 유사시
* 랩탑 하드웨어 고장 => 랩탑 SSD를 적출해 미니 피씨에 장착
* 랩탑 SSD 고장 => 미니 피씨 SSD를 랩탑에 장착
* 랩탑 하드웨어, SSD 동시 고장 또는 분실 => 미니 피씨로 작업
이 가능하게 되는 거지요.
OpenWrt
먼저 OpenWrt 설치는 홈페이지에서 지원 하드웨어를 찾는 것으로 부터 시작합니다. 찾으면 디바이스 컬럼에 어떻게 설치하나가 자세히 설명되어 있습니다. 아이피타임 기기들도 지원되는데 부트로더에 특별한 작업을 하지 않아서 설치는 그냥 되는 것 같더군요. 설치 과정은 기기마다 다르니 생략.
NGINX
OpenWrt를 설치하면 기본 웹 인터페이스로 luci 가 뜨는데 간이 웹서버 uhttpd 상에서 돌아갑니다. 저는 nginx가 필요해서 기본구성(luci-ssl)을 삭제하고 nginx 버젼 luci 를 설치합니다.
opkg remove luci-ssl opkg update && opkg install luci-ssl-nginx
설치는 순식간입니다. 웹서버가 교체되어도 인터페이스 화면상에서는 못알아차릴 정도.
DDNS
다음 과정은 DDNS 설정입니다. 이게 되야 Let's Encrypt 에서 서버 인증을 받을 수 있습니다. 인증서 발급이 3억개를 돌파했다든데 이 자리를 빌어 인터넷을 안전하게 만든 일등 공신 중 하나에 감사를.
DDNS 패기지를 설치하고
opkg install ddns-script opkg install luci-app-ddns opkg install curl ca-bundle
luci 화면을 업데이트 하면 Service 메뉴가 추가된 것이 보입니다. 그 아래 Dynamic DNS를 선택하고 설정하시면 됩니다. 사용하시는 서비스에 따라 설정이 다를 수 있으니 역시 자세한 내용은 패스. 저는 Google Domains 사용하는데 항상 잘 됩니다.
ACME (서버 인증서 받기)
해당 패키지 설치하면
opkg install acme
opkg install luci-app-acme
역시 서비스 메뉴아래 Acme Certs 가 나타납니다. 개발자가 자세한 위키 페이지를 운용합니다만 뭔가 좀 복잡하고 저는 잘 모르겠어서 OpenWrt 에 설명 되어 있는 대로 따라 했습니다. 뭐 그냥 됩니다. 인증서 발급까지 한 2-3초?
Reverse Proxy
인증서 발급이 성공적이면 nginx 설정을 건드려 리버스 프록시를 설정할 차례지요.
여기서 좀 삽질을 했는데 이유는 OpenWrt nginx가 일반 nginx와 한두가지 점에서 차이가 있더라고요. 자세한 설명은 해당 페이지를 참조하시면 되는데 기본적으로
1. 설정이 OpenWrt 자체 UCI 시스템과의 호환성을 고려해 약간 다르다는 점,
2. OpenWrt 버젼 nginx는 모듈을 별도 설치하게 되어 있지 않다는 점.
입니다. 모든 모듈을 다 포함해 컴파일 한 nginx 패키지도 있는데 그건 또 luci와 호환성이 보장된 게 아닌 듯 해서 패스.
하여간 삽질 후 내린 결론은
1. 가상 서버 설정은 /etc/nginx/conf.d/ 디렉토리에서 직접하는 것이 간단하면서도 관리가 편함
2. TLS/SSL은 passthrough 하지 말고 전부 라우터에서 termination 할 것
입니다. 참고로 제가 사용하는 설정은
/etc/nginx/conf.d/server.example.com.conf
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name server.example.com;
ssl_certificate '/etc/acme/server.example.com/server.example.com.cer';
ssl_certificate_key '/etc/acme/server.example.com/server.example.com.key';
ssl_session_cache 'shared:SSL:32k';
ssl_session_timeout '64m';
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://192.168.1.xxx:8080;
}
}
입니다. acme 디렉토리에 저장된 인증서를 사용해 SSL을 termination해 버리고 내부로는 decrypt 된 트랜잭션을 사용합니다.
기타
1. 위 내용에는 없지만 WireGuard 설정도 OpenWrt 에서 쉽게 됩니다. 설정 파라미터를 QR코드로 출력해주니 폰에서 스캔만 하면 끝. 밖에 나가 인터넷 뱅킹 쓸일 있으면 WireGuard 키고 합니다. VPN 연결되는 데 0.5 초 이내로 되는 듯.
2. 공유기에 USB 단자가 있으면 SAMBA 같은 걸 설치해 간이 NAS로 쓸 수도 있어요. OpenWrt 에서 지원하는 NAS 프로토콜은 여기를 참조. 쓰고 보니 OpenWrt 광고 같기도 하고.
1. 도메인을 구입했습니다 (example.com)
2. 집 컴퓨터의 사진 자료를 저장, 보기 등을 하고 싶어서 서버를 만들었습니다. (photo.example.com)
이걸 가능하게 하려고 공유기에 DDNS를 걸고 포트 포워딩을 했다고 한다면
1. 하나의 서버만 가능합니다. 예를 들어 music.example.com을 같은 방식으로 만들면 겹치 잖아요.
2. 컴퓨터의 서버 포트가 포워딩을 통해 인터넷의 수많은 봇들의 해킹 시도에 노출됩니다.
리버스 프록시를 설치하면 컴퓨터 앞 쪽에서 이를 해결해 줍니다.
1. photo.example.com 경로와 music.example.com 경로를 나누어 두개의 컴퓨터(서버)로 교통정리를 합니다
2. photo.example.com 이나 music.example.com 을 달고 들어오지 않는 모든 패킷을 차단해 줍니다. 인터넷 봇들이 이걸 알고 있을 리가 없으니까 특별히 해킹을 작정하고 사전 뒷조사를 하지 않는 이상은 침입이 거의 불가능하지요.
이상은 제가 막연히 이해하는 내용이고 더 자세한 것은 아래분이
짐농님 우려와 관련해서는 nginx는 라우터 자체 웹 UI를 위해 이미 들어가 있는 것을 빌려 쓰는 것이고
* 디스크 사용량 면에서 위 작업을 위해 가용 플래시 메모리의 약 6 MB (8퍼센트) 썼네요.
* CPU 사용량은 대용량 파일로 테스트 해 봤는데 최대 20% 정도 사용하고 80퍼센트는 놀고 있으니 별 무리는 없어보입니다.
wireguard 쉽게 된다니 관심이 생기는데, 능력이 부족하네요.ㅠㅠ
라우터는 누구나 가지고 있으니 라스베리 파이 정도를 서버로 활용해 이것 저것 해 보고 싶다의 연장선상에 있다고 보시면 좋을 것 같아요.
덧 붙이자면 availability 측면이나 stability 측면에서 라우터가 가장 우수하고 또 그래야 하지 않나요? 라우터가 고장나면 모든 네트워크가 정지되니. 그런 라우터에 이미 nginx가 돌고 있다고 생각하면 리버스 프록시를 설치할 최적의 장소가 아닐까요?
요즘은 nginx도 도커로 올리는게 거의 대세인것 같습니다
OpenWrt 라우터에 홈킷 브리지 올릴 수 있습니다. 약간(?)의 코딩이 필요하지만 서도. 자작 IoT 기기를 mqtt / coap 으로 연결해 아이폰에서 홈앱으로 제어할 수 있어요. 관심있는 분들 도전해 보셔도.