注:如下方法不针对 Debian。Ubuntu、Linux Mint 等都可以参考。
1 背景介绍
电脑上部署了一个服务,其要求是将域名 example.com 及其全部子域名(比如 a.example.com、bbb.example.com)都解析到 127.0.0.1。
传统方法是修改 /etc/hosts 来自定义域名对应的 IP 地址,但这样存在 2 个问题:
/etc/hosts不支持通配符,需要将每一条子域名都写进去。- 目前并不知道
example.com都有哪些子域名。
2 操作方法
2.1 安装 Dnsmasq
Dnsmasq 是一款轻量级 DNS 服务器,且支持域名泛解析。该软件就在 Debian 的默认软件源中,包名称为 dnsmasq。
2.2 修改 Dnsmasq 的配置文件
编辑 /etc/dnsmasq.conf,在其中添加如下两行:
address=/example.com/127.0.0.1,此行的作用是将所有结尾为example.com的域名都解析到127.0.0.1。server=223.5.5.5,此行的作用是将其他域名都交给阿里云公共 DNS 进行解析。大家也可以根据实际需求设置其他公共 DNS。
编辑配置文件后,执行如下命令,重启 Dnsmasq 服务:
sudo systemctl restart dnsmasq
2.3 让 Dnsmasq 接管系统的域名解析服务
Debian、Ubuntu 等系统默认是让 systemd 管理域名解析服务的,但现在我们需要让 Dnsmasq 来接管域名解析相关功能。需要依次执行如下命令:
#停用 systemd 副域名解析服务
systemctl disable systemd-resolved --now
#备份系统的重要配置文件
mv /etc/resolv.conf /etc/resolv.conf.bak
#让 Dnsmasq 接管域名解析服务
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf