Linux 更新 DNS 设置教程
正确配置 DNS 设置有助于提高上网速度和增强在线安全。本文将介绍如何通过命令行界面更改 Linux 系统的 DNS 设置。
步骤 1:打开网络配置
不同的 Linux 发行版可能有不同的网络配置方法,本教程主要使用命令行界面(CLI),兼容性较广。
步骤 2:备份当前的设置
在进行任何更改之前,建议先备份当前的 DNS 配置。运行以下命令:
sudo cp /etc/resolv.conf /etc/resolv.conf.backup
这将把当前的 DNS 配置复制到备份文件,以便在需要时恢复。
步骤 3:编辑 DNS 设置
使用文本编辑器(例如 nano
)打开 /etc/resolv.conf
文件:
sudo nano /etc/resolv.conf
在文件中,您会看到类似以下内容的行:
nameserver 192.168.1.1
这些行表示当前的 DNS 设置。要更改 DNS,您可以修改现有的 nameserver
行或添加新的行。例如,要使用 Google 公共 DNS,可以添加如下内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
保存并退出编辑器:
在
nano
中,按CTRL + X
,然后按Y
,最后按Enter
。
步骤 4:重新启动网络服务
更改 DNS 后,您需要重新启动网络服务以使更改生效:
sudo systemctl restart NetworkManager
或者,根据您使用的 Linux 发行版,可以使用以下命令:
sudo /etc/init.d/networking restart
步骤 5:验证 DNS 更改
为确保 DNS 设置已成功更改,您可以使用以下命令检查:
cat /etc/resolv.conf
该命令将显示当前的 DNS 配置。如果您看到了新的 nameserver
地址,表示更改已生效。
注意事项
某些 Linux 发行版使用动态 DNS 设置服务(如
dhclient
或NetworkManager
),这些设置可能会覆盖/etc/resolv.conf
的更改。如果您的更改没有生效,请参考您的发行版文档,或者考虑使用图形界面工具(如 Network Manager)进行 DNS 设置。
额外提示:
在对关键系统进行配置更改之前,建议先在非关键系统上进行测试。
一键脚本:
#!/bin/bash
# 检查是否是 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "请使用 root 权限运行此脚本"
exit 1
fi
# 设置 DNS 地址
primary_dns="1.1.1.1"
secondary_dns="8.8.8.8"
# 检查必要命令是否存在
for cmd in systemctl nmcli; do
if ! command -v "$cmd" &>/dev/null; then
echo "$cmd 命令未找到,正在尝试安装 NetworkManager..."
# 默认安装 NetworkManager(Debian)
if [ -f /etc/debian_version ]; then
apt update
apt install -y network-manager
fi
# 再次检查 nmcli 是否已安装
if ! command -v nmcli &>/dev/null; then
echo "安装失败,无法找到 nmcli 命令。请手动安装 NetworkManager。"
exit 1
fi
fi
done
# 禁用 systemd-resolved(如果启用)
if systemctl is-active --quiet systemd-resolved; then
echo "正在禁用 systemd-resolved 服务..."
systemctl stop systemd-resolved
systemctl disable systemd-resolved
# 删除并重新创建 /etc/resolv.conf
if [ -L /etc/resolv.conf ]; then
rm /etc/resolv.conf
fi
touch /etc/resolv.conf
echo "已禁用 systemd-resolved 并重建 /etc/resolv.conf"
fi
# 配置 NetworkManager 来使用自定义 DNS
echo "正在配置 NetworkManager 来使用自定义 DNS..."
# 获取当前连接的网络配置文件
connection_file="/etc/NetworkManager/system-connections/$(nmcli -t -f NAME connection show --active)"
# 检查文件是否存在
if [ ! -f "$connection_file" ]; then
echo "找不到当前连接的配置文件,无法修改 DNS。"
exit 1
fi
# 备份当前配置文件
cp "$connection_file" "$connection_file.bak"
echo "已备份当前连接配置文件:$connection_file.bak"
# 修改 DNS 设置
nmcli connection modify "$(basename "$connection_file")" ipv4.dns "$primary_dns $secondary_dns"
nmcli connection modify "$(basename "$connection_file")" ipv4.ignore-auto-dns yes
# 重新加载 NetworkManager 配置并重启网络
echo "正在重启网络服务..."
systemctl restart NetworkManager
# 验证 DNS 配置是否成功
echo "验证 DNS 设置..."
resolv_conf=$(cat /etc/resolv.conf)
if echo "$resolv_conf" | grep -q "$primary_dns" && echo "$resolv_conf" | grep -q "$secondary_dns"; then
echo "DNS 设置已成功更改为:$primary_dns 和 $secondary_dns"
else
echo "DNS 设置失败,请检查配置。"
exit 1
fi
echo "脚本执行完成。"
评论区