家里几台电脑、NAS、树莓派、智能音箱全连在同一个Wi-Fi下,每次想从笔记本访问NAS,得先查它的IP(比如 192.168.3.12),输错一位就打不开;朋友来串门,想投屏到客厅电视盒子,你得翻手机看盒子IP再填进播放器——烦不烦?其实只要给局域网加个‘小电话簿’,输入 nas.local 或 tv-box 就能直接打开,不用背数字。
为什么普通家庭网络缺这个功能?
家用路由器默认只管DHCP分IP,不提供主机名到IP的自动翻译。Windows靠NetBIOS、macOS靠mDNS(.local域名)勉强凑合,但跨平台经常失灵:Windows访问不到macOS共享,安卓设备压根不认.local,树莓派SSH连NAS还得输一长串IP。
最省事方案:用dnsmasq(推荐给新手)
如果你的路由器支持安装插件(比如华硕梅林、OpenWrt、Padavan固件),直接在后台启用 dnsmasq 并加几行配置就行。以OpenWrt为例:
config dnsmasq
option domainneeded '1'
option boguspriv '1'
option filterwin2k '0'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
然后在 /etc/hosts 里加自定义映射:
192.168.3.10 nas.lan
192.168.3.11 tv-box.lan
192.168.3.15 pi-hole.lan
重启dnsmasq服务:/etc/init.d/dnsmasq restart。所有连这台路由器的设备,现在都能直接 ping nas.lan 或 ssh pi-hole.lan 了。
没刷机条件?用树莓派或旧笔记本跑一个
拿一台常年开机的设备(比如做下载机的树莓派),装个轻量DNS服务。Ubuntu/Debian系统执行:
sudo apt update && sudo apt install dnsmasq -y
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
编辑配置:sudo nano /etc/dnsmasq.conf,确保包含:
interface=eth0
bind-interfaces
domain=lan
expand-hosts
addn-hosts=/etc/hosts
保存后,在 /etc/hosts 底部追加你的设备:
192.168.3.10 nas
192.168.3.11 tv-box
192.168.3.15 pihole
启动服务:sudo systemctl enable dnsmasq && sudo systemctl start dnsmasq。最后登录路由器后台,把DHCP分配的DNS服务器地址改成这台树莓派的IP(比如 192.168.3.15)。
顺手解决两个实际问题
问题1:手机APP不支持自定义DNS?
安卓9+和iOS可手动设置Wi-Fi DNS(iOS在Wi-Fi详情页点「配置DNS」→「手动」),填入树莓派IP即可。老安卓机型若不行,换用支持自定义DNS的浏览器(如Kiwi Browser)或投屏工具(如LocalCast)。
问题2:Windows总连不上xxx.lan?
在PowerShell里运行:Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters' -Name 'DomainCompatibilityMode' -Value 0,再重启。这是关闭Windows对NetBIOS的过度依赖,让它老老实实走DNS查询。
小提醒
别用 .local 做后缀——它被mDNS独占,和dnsmasq混用容易冲突;统一用 .lan 或 .home 更稳。另外,每加一台新设备,只需在/etc/hosts里添一行,不用动其他配置,改完 reload 一下服务就行:sudo systemctl reload dnsmasq。