Linux禁用IPv6、禁用resolvconf、启用systemd-resolved、启用DoT
Linux禁用IPv6、禁用resolvconf、启用systemd-resolved、启用DoT的完整步骤
前情提要:把主机名写入/etc/hostname
和/etc/hosts
。
一、禁用 IPv6
-
禁用 IPv6
编辑
sysctl.conf
文件以禁用所有 IPv6:1
sudo vim /etc/sysctl.conf
添加以下内容以禁用 IPv6:
1
2
3
4# 禁用 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1保存并退出编辑器。
-
应用设置
运行以下命令使配置生效:
1
sudo sysctl -p
-
验证 IPv6 是否已禁用
执行以下命令来确认没有 IPv6 地址:
1
ip a
预期结果:
- 输出中不应显示任何带
inet6
的地址,表示 IPv6 已被禁用。
- 输出中不应显示任何带
二、删除 resolvconf
并启用 systemd-resolved
-
删除
resolvconf
为了彻底移除旧的
resolvconf
工具,使用apt
完全卸载它:1
sudo apt purge resolvconf
-
删除旧的
/etc/resolv.conf
符号链接删除
/etc/resolv.conf
文件的符号链接,确保系统使用systemd-resolved
提供的配置文件:1
sudo rm /etc/resolv.conf
-
启用并启动
systemd-resolved
服务确保
systemd-resolved
服务已经启用并启动:1
2sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved -
验证
systemd-resolved
服务状态确认
systemd-resolved
正常运行:1
sudo systemctl status systemd-resolved
预期结果:
- 服务状态应为
active (running)
,表示systemd-resolved
正在后台运行。
- 服务状态应为
三、配置 systemd-resolved
使用 DNS-over-TLS (DoT)
-
配置 DNS 服务器并启用 DoT
编辑
systemd-resolved
配置文件/etc/systemd/resolved.conf
:1
sudo vim /etc/systemd/resolved.conf
在
[Resolve]
部分,配置 DNS 服务器,并启用 DNS-over-TLS:1
2
3
4
5
6[Resolve]
DNS=1.1.1.1 8.8.8.8
DNSOverTLS=yes
LLMNR=no
MulticastDNS=no
DNSStubListener=yes保存并关闭文件。
-
重启
systemd-resolved
服务使配置生效:
1
sudo systemctl restart systemd-resolved
四、设置 /etc/resolv.conf
-
创建符号链接
/etc/resolv.conf
由于
/etc/resolv.conf
文件已经被删除,需要创建一个新的符号链接,指向systemd-resolved
提供的配置:1
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
-
验证
/etc/resolv.conf
内容运行以下命令,确认
/etc/resolv.conf
是否正确指向systemd-resolved
的 stub resolver:1
cat /etc/resolv.conf
预期输出:
1
2nameserver 127.0.0.53
options edns0 trust-ad
五、测试 DNS 配置
-
安装
dnsutils
包1
sudo apt install dnsutils
-
使用
dig
命令测试 DNS 查询查询
google.com
的 IPv4 地址:1
dig google.com
查询
google.com
的 IPv6 地址:1
dig AAAA google.com
预期输出:
- 查询的结果应返回正确的 IP 地址。
SERVER
字段应显示为127.0.0.53
,表示 DNS 查询通过systemd-resolved
处理。
六、验证 DNS-over-TLS 是否生效
-
使用
tcpdump
捕获端口 53 的流量使用
tcpdump
捕获端口 53 的流量,看看是否只有localhost
的流量(这表示 DNS 查询在本地通过systemd-resolved
处理,而没有通过外部 DNS 服务器)。运行以下命令:
1
sudo tcpdump -i any port 53
-
使用
tcpdump
捕获端口 853 的流量运行
tcpdump
来捕获端口 853 上的流量,这通常是 DNS-over-TLS 的默认端口:1
sudo tcpdump -i any port 853
这会显示通过端口 853(DNS-over-TLS)发送的流量。因为 DoT 是加密的,流量内容是不可见的,但你可以看到流量的元数据和通信的目标 IP。
-
运行
dig
查询在另一个终端中,运行以下命令测试 DNS 查询:
1
dig google.com
预期结果:
tcpdump
捕获端口 53 的流量输出应显示只有localhost
(127.0.0.53
) 的流量,表示 DNS 查询通过systemd-resolved
本地解析。- 如果
DNS-over-TLS
成功启用,捕获端口 53 的流量不会显示到外部 DNS 服务器的 IP 地址,而是会显示在本地 53 端口的流量。
七、清空 DNS 缓存(可选)
如果你想清空 systemd-resolved
的 DNS 缓存,可以使用以下命令:
1 | sudo resolvectl flush-caches |