电脑学堂
第二套高阶模板 · 更大气的阅读体验

在家用路由器上搭个局域网主机名解析服务,告别记IP

发布时间:2026-02-10 21:20:30 阅读:5 次

家里几台电脑、NAS、树莓派、智能音箱全连在同一个Wi-Fi下,每次想从笔记本访问NAS,得先查它的IP(比如 192.168.3.12),输错一位就打不开;朋友来串门,想投屏到客厅电视盒子,你得翻手机看盒子IP再填进播放器——烦不烦?其实只要给局域网加个‘小电话簿’,输入 nas.localtv-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