안녕하세요, log 쌓는 MK 입니다.

최근에 깨져버린 스마트폰을 Spotify 전용 머신으로 만들어 사용하면서 아쉬운 점이 2가지 있었는데요.

  1. 스피커를 수동으로 켰다 껐다 해야한다.
  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로 손쉽게 구성해 보시기 바랍니다.