与路由器自带的内网名称解析功能不同,连接在交换机下的内网设备之间无法通过主机名互相访问。如果需要,可以通过 dnsmasq 实现。

我用 docker 在内网 marketing.local(192.168.8.168) 主机上部署了 pi-hole,并设置路由器的 DHCP 的 DNS 为 192.168.8.168,任何接入局域网的客户端都会自动使用 pi-hole 的 dns 服务。

#!/bin/bash

sudo docker pull pihole/pihole

sudo docker rm -f pihole

sudo docker run -d --name pihole \
    -v "$PWD/pihole/config:/etc/pihole/" \
    -v "$PWD/pihole/dnsmasq.d:/etc/dnsmasq.d/" \
    -e ServerIP="192.168.8.168" \
    -e TZ="Asia/Shanghai" \
    -p 888:80 \
    -p 53:53/tcp \
    -p 53:53/udp \
    --restart=unless-stopped \
    --cap-add=NET_ADMIN \
    --dns=127.0.0.1 --dns=1.1.1.1 \
    pihole/pihole:latest

配置 dnsmasq 只要在 pihole/dnsmasq.d/ 文件夹中创建一个 custom.conf 配置文件即可,在里面添加内网的各个主机名:

local=/marketing.local/
domain=marketing.local

local=/backnas.local/
domain=backnas.local

local=/pi.hole/
domain=pi.hole

不需要重启,保存配置立即可以实现内网主机名访问。

Reference