안녕하세요, log 쌓는 MK 입니다.
최근에 깨져버린 스마트폰을 Spotify 전용 머신으로 만들어 사용하면서 아쉬운 점이 2가지 있었는데요.
- 스피커를 수동으로 켰다 껐다 해야한다.
- 스마트폰의 배터리 때문에 전원을 연결해 놔야한다.
1번의 경우 스피커를 상시 켜놓으면 해결되기도 하지만 2번의 경우는 배터리 스웰링이 발생할 수 있어 조심스러웠습니다. 그래서 가지고 있던 오래된 HK네트웍스 SP30A 스마트 플러그를 이용해 보기로 했어요.
HK네트웍스는 사실 2021년에 폐업했기 때문에 지원을 전혀 받을 수 없는데, 사실 알고보니 중국의 Orvibo 제품으로 밝혀져서 계속 사용할 수 있게 된 제품이에요.
SP30A은 Orvibo의 B25 모델로 등록이 가능했는데 이 모델을 제가 제어하기 위해서는 플러그가 부팅할 때 homemate.orvibo.com:10001 으로 가는 걸 가로채서 제 로컬에서 등록해서 제어할 수 있게 만들어야 해요.
[B25 플러그] → homemate.orvibo.com:10001
↓ (DNS 스푸핑)
[내 로컬 서버]
이런 구조입니다.
공유기에서 특정 도메인을 로컬 IP로 매핑하는 기능을 제공한다면 쉽게 처리할텐데 사용 중인 ipTIME 공유기에서는 이런 기능을 찾을 수 없었어요.
그래서 뭘 이용할 까 찾아보던 중 가장 손쉬운 방법으로 Dnsmasq 선택하게 됐습니다.
Dnsmasq는 소규모 시스템에서 사용할 수 있는 간단한 DHCP/DNS 서버로 Docker를 이용하면 쉽게 제가 원하는 기능을 구동할 수 있었습니다.
docker-compose.yml
version: '3'
services:
dnsmasq:
image: andyshinn/dnsmasq
container_name: dnsmasq
ports:
- "53:53/tcp"
- "53:53/udp"
cap_add:
- NET_ADMIN
command: >
--server=8.8.8.8
--server=8.8.4.4
--address=/homemate.orvibo.com/192.168.0.10
restart: unless-stopped
이런식으로 구성이 되는데요. --address=/homemate.orvibo.com/192.168.0.10 이 부분이 제게 필요했던 옵션입니다. 이렇게 설정을 하면 homemate.orvibo.com 으로 DNS 쿼리가 오면 접속이 들어올 때 192.168.0.10 으로 내려주게 됩니다.
이때 중요한 건 ipTIME 공유기에서 DNS 주소를 수동으로 Dnsmasq가 설치된 서버를 지정해줘야 한다는 겁니다.
예를 들어, 제 맥이 192.168.0.2 이면, ipTIME 공유기에서 DHCP의 DNS 설정에서 DNS 주소를 192.168.0.2로 설정해 주어야 합니다.
flowchart LR
A[B25 플러그] -->|1. DHCP 요청| B[ipTIME 공유기]
B -->|2. DNS: 192.168.0.2 배포| A
A -->|3. homemate.orvibo.com 쿼리| C[dnsmasq\n192.168.0.2:53]
C -->|4. 192.168.0.10 응답| A
A -->|5. TCP:10001 접속| D[orvibo-b25 서버\n192.168.0.10:10001]
D -->|6. 제어 API| E[curl / Python]
이런 흐름입니다.
저는 최종적으로 Raspberry Pi Zero WH 모델에 설치해 사용했고, Pi 성능이 Docker를 지원하기에 어려움이 있어 일반 설치로 진행을 했습니다.
sudo apt install dnsmasq로 설치할 수 있으며 /etc/dnsmasq.conf를 이용해 필요한 설정을 적용할 수 있습니다.
저처럼 로컬에서 간단한 용도로 특정 도메인을 로컬 IP로 매핑하시는 경우 Dnsmasq로 손쉽게 구성해 보시기 바랍니다.