Debian 系统中,将某一域名的全部子域名解析到同一 IP 地址的方法

注:如下方法不针对 Debian。Ubuntu、Linux Mint 等都可以参考。

1 背景介绍

电脑上部署了一个服务,其要求是将域名 example.com 及其全部子域名(比如 a.example.combbb.example.com)都解析到 127.0.0.1

传统方法是修改 /etc/hosts 来自定义域名对应的 IP 地址,但这样存在 2 个问题:

  1. /etc/hosts 不支持通配符,需要将每一条子域名都写进去。
  2. 目前并不知道 example.com 都有哪些子域名。

2 操作方法

2.1 安装 Dnsmasq

Dnsmasq 是一款轻量级 DNS 服务器,且支持域名泛解析。该软件就在 Debian 的默认软件源中,包名称为 dnsmasq

2.2 修改 Dnsmasq 的配置文件

编辑 /etc/dnsmasq.conf,在其中添加如下两行:

  1. address=/example.com/127.0.0.1,此行的作用是将所有结尾为 example.com 的域名都解析到 127.0.0.1
  2. 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  

学习一下