侧边栏壁纸
  • 累计撰写 55 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux上更换DNS设置的教程

米粒儿
2025-02-09 / 0 评论 / 0 点赞 / 21 阅读 / 0 字
温馨提示:
本文最后更新于2025-02-13,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。


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 设置服务(如 dhclientNetworkManager),这些设置可能会覆盖 /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 "脚本执行完成。"

0

评论区