【 Linux 系统中 /etc/resolv.conf 文件的 DNS 配置】

发布于:2025-03-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

如何在 Linux 系统中修改 /etc/resolv.conf 文件的 DNS 配置

在 Linux 系统中,/etc/resolv.conf 文件用于配置系统的 DNS 服务器。通过修改该文件,可以指定系统使用的 DNS 解析服务器。本文将详细介绍如何通过命令行和脚本修改 /etc/resolv.conf 文件,并提供改进建议,以确保操作的安全性和灵活性。


1. 手动修改 DNS 配置

命令详解:
sudo sed -i 's/nameserver 127.0.1.1/nameserver 10.48.6.41/g' /etc/resolv.conf
echo "change DNS to 10.48.6.41 success!"
  • sudo:以管理员权限运行命令。
  • sed -i:直接修改文件内容。
  • s/old/new/g:将文件中所有的 nameserver 127.0.1.1 替换为 nameserver 10.48.6.41
  • echo:输出成功提示信息。
注意事项:
  1. 密码安全
    • 避免使用 echo <密码> | sudo -S,因为这会暴露密码。建议直接运行 sudo 并手动输入密码。
  2. 文件覆盖问题
    • 在某些系统中,/etc/resolv.conf 是由网络管理工具(如 systemd-resolvedNetworkManager)自动生成的,直接修改可能会被覆盖。如果需要持久化配置,建议通过系统网络配置文件(如 /etc/network/interfacesnmcli)实现。

2. 使用脚本自动修改 DNS 配置

脚本功能:
  • 动态修改 /etc/resolv.conf 文件中的 DNS 配置。
  • 支持通过脚本参数指定 DNS IP。
  • 可选重启浏览器以应用更改。
脚本内容:
#!/bin/bash
# 功能:修改 DNS 配置并重启浏览器

# 检查参数
if [ -z "$1" ]; then
    echo "Usage: $0 <dns_ip>"
    echo "Example: $0 10.48.6.41"
    exit 1
fi

DNS_IP=$1
RESOLV_CONF="/etc/resolv.conf"

# 检查文件是否存在
if [ ! -f "$RESOLV_CONF" ]; then
    echo "Error: $RESOLV_CONF does not exist!"
    exit 1
fi

# 修改 DNS 配置
sudo sed -i "s/nameserver 127.0.1.1/nameserver $DNS_IP/g" "$RESOLV_CONF"
echo "change DNS to $DNS_IP success!!!"

# 重启浏览器(以 Firefox 为例)
pkill firefox
firefox &
使用方法:
  1. 将脚本保存为 change_dns.sh
  2. 赋予执行权限:
    chmod +x change_dns.sh
    
  3. 运行脚本并指定 DNS IP:
    ./change_dns.sh 10.48.6.41
    

3. 改进建议

  1. 避免硬编码密码
    • 不要在脚本中直接写入密码,使用 sudo 并手动输入密码。
  2. 支持动态 DNS IP
    • 通过脚本参数传递 DNS IP,提升灵活性。
  3. 文件检查
    • 在执行修改前检查 /etc/resolv.conf 文件是否存在,避免错误。
  4. 重启浏览器
    • 可选功能,按需重启浏览器以应用 DNS 修改。

4. 适用场景

  • 需要快速修改 DNS 配置的场景。
  • 需要重启浏览器以应用 DNS 修改的场景。
  • 需要灵活指定 DNS IP 的场景。

5. 扩展建议

  • 支持更多浏览器
    扩展脚本以支持更多浏览器(如 Chrome、Edge)。
  • 持久化 DNS 配置
    结合网络管理工具(如 NetworkManager)实现持久化配置。

总结

通过本文介绍的方法,你可以轻松修改 Linux 系统中的 DNS 配置。无论是手动操作还是使用脚本,都可以根据需求灵活调整。同时,遵循安全建议,避免密码泄露和文件覆盖问题,确保系统的稳定性和安全性。

如果你有其他需求或问题,欢迎进一步探讨!