推荐使用systemd-resolved配置per-link域名重定向:先确认有线网卡名(如ens33),再创建/etc/systemd/network/20-ens33-local-dns.network绑定DNS=127.0.0.1及Domains=~test.local ~dev.internal ~lan,最后重启systemd-networkd和systemd-resolved并验证。

您在银河麒麟操作系统中需要让特定域名(如 test.local、dev.internal)始终解析到本机 127.0.0.1 或局域网某台开发服务器,绕过上游DNS,实现本地服务调试或测试环境隔离,避免修改全局DNS影响其他访问。
通过 systemd-resolved 配置 per-link 域名重定向(推荐,精准可控)
该方法利用 resolved 的 link 级 DNS 路由能力,为有线网卡单独绑定域名规则,不干扰无线或其他网卡,且支持通配符匹配,是唯一能真正实现“本地劫持”语义的原生方案。
第一步:确认活跃有线网卡名称
执行 ip -br link | grep UP,排除 lo、wlan0、docker0 等,记下物理有线接口名,例如 【ens33】。
第二步:创建专用 network 配置文件
执行 sudo vim /etc/systemd/network/20-ens33-local-dns.network,写入以下内容(注意:文件名前缀数字决定加载顺序,必须小于 99):
[Match]<br>Name=ens33<br><br>[Network]<br>DNS=127.0.0.1<br>Domains=~test.local ~dev.internal ~lan<br>RouteMetric=200
第三步:重启网络服务链
先执行 sudo systemctl restart systemd-networkd,再执行 sudo systemctl reload systemd-resolved。【必须按此顺序,否则 resolved 不读取新 link 配置】。
第四步:验证劫持是否生效
运行 systemd-resolve --status | grep -A10 "Link ens33",确认输出含 DNS: 127.0.0.1 和 Domains: ~test.local ~dev.internal ~lan;再执行 dig api.test.local @127.0.0.1,应返回 127.0.0.1 地址而非上游响应。
编辑 /etc/hosts 实现静态域名映射(简单直接,无依赖)
适用于仅需固定几个域名指向本机或内网IP的轻量场景,不经过DNS协议栈,解析最快,但无法处理通配符或动态子域名。
用 sudo 权限打开 hosts 文件:sudo nano /etc/hosts。
在文件末尾新增行,格式为 IP地址 + 制表符或空格 + 域名(多个域名用空格分隔):
127.0.0.1 test.local www.test.local api.test.local<br>192.168.1.50 dev.internal docs.dev.internal
保存后无需重启服务,系统立即生效。但注意:【/etc/nsswitch.conf 中 hosts 行必须包含 files】,否则该文件被完全忽略。可执行 grep "^hosts:" /etc/nsswitch.conf 检查,若输出为 hosts: dns,需改为 hosts: files dns myhostname。
配合 dnsmasq 搭建本地权威DNS服务器(高级灵活,支持泛解析)
当需要 *.dev.internal 这类通配符劫持、自定义TTL、或为多台开发机提供统一解析服务时,dnsmasq 是最稳妥的选择。它监听本地 53 端口,将匹配域名强制应答为指定IP。
方法一:安装并启用 dnsmasq
执行 sudo apt install dnsmasq(麒麟V10桌面版)或 sudo yum install dnsmasq(Server版),安装后默认未启动。
方法二:配置劫持规则
编辑主配置:sudo nano /etc/dnsmasq.conf,取消注释并修改:
port=53<br>bind-interfaces<br>interface=lo,ens33<br>address=/test.local/127.0.0.1<br>address=/dev.internal/192.168.1.50<br>address=/.lan/127.0.0.1
最后一行 /.lan/ 表示所有以 .lan 结尾的域名均劫持到 127.0.0.1。
方法三:设为 systemd-resolved 的上游DNS
编辑 sudo nano /etc/systemd/resolved.conf,将 DNS= 改为 DNS=127.0.0.1,确保 FallbackDNS 保留公网地址(如 114.114.114.114),保存后执行 sudo systemctl daemon-reload && sudo systemctl restart systemd-resolved dnsmasq。











