要在 Linux 实例中自定义修改 DNS 配置,需要根据不同版本和网络管理方式进行相应的调整。
注意:
以下操作涉及修改配置文件内容,建议您在修改配置文件之前,先进行备份。
NetworkManager 方式管理网络
如何判断是 NetworkManager 在管理网络
方法一:查看 NetworkManager 服务状态。
sudo systemctl status NetworkManager
如果输出显示 NetworkManager 服务正在运行,则表示 NetworkManager 正在管理网络。
示例输出:
● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-11-21 12:34:56 UTC; 1 day 12h ago
方法二:检查网络接口配置文件。
1. 查看网络接口配置文件:传统的网络接口配置文件位于 /etc/sysconfig/network-scripts/
目录下,文件名通常为 ifcfg-<interface-name>。
2. 使用 NetworkManager 管理的接口:如果接口是由 NetworkManager
管理的,配置文件中通常会有一个 NM_CONTROLLED
参数,值为yes
。
3. 使用传统网络脚本管理的接口:如果接口是由传统网络脚本管理的,配置文件中通常会有一个 NM_CONTROLLED
参数,值为no
。
NetworkManager 配置自定义 DNS
TencentOS Server 3.X/TencentOS Server 4.X
如果系统默认通过 NetworkManager 管理网络,并且仅在 /etc/sysconfig/network
文件中设置了 PEERDNS=no
,那么在涉及重启的操作中,自定义的 DNS 设置将会被覆盖。
推荐您修改 /etc/NetworkManager/conf.d/90-dns-none.conf
,该方案在重启或者切换子网切换 VPC 几种场景下经验证均不会被覆盖。
在/etc/NetworkManager/conf.d/90-dns-none.conf
增加如下配置:
非 NetworkManager 方式管理网络
传统的网络脚本来管理网络配置
RHEL/CentOS7
1. 系统通过使用传统的网络脚本来管理网络配置。这些脚本存放在 /etc/sysconfig/network-scripts/ 目录中,而 DNS 配置则位于 /etc/resolv.conf 文件中。为了防止 /etc/resolv.conf 文件被 DHCP 获取的 DNS IP 地址覆盖,您需要修改 /etc/sysconfig/network 文件并添加以下一行内容:
2. 然后重启网络服务生效。
TencentOS Server 2.X
TencentOS Server 2.X 系列默认使用 network 来管理网络。如果 TencentOS Server 2.X 需要切换子网或者切换 VPC,建议先安装 NetworkManager 软件包并改用 NetworkManager 来管理网络。如果不采用 NetworkManager 管理网络您可以锁定文件编辑权限。
1.1 安装 NetworkManager。
yum install NetworkManager
1.2 在 /etc/NetworkManager/conf.d/90-dns-none.conf
文件中添加如下两行:
采用锁定文件编辑权限,避免 resolv.conf 被覆盖。
执行如下命令:
chattr +i /etc/resolv.conf
Systemd-networkd 管理网络配置
Ubuntu 18/20/22
目前常见的发行版本大多使用的是 NetworkManager 服务进行网络管理,修改参见 NetworkManager 管理网络即可。但是从 Ubuntu 18系统开始,网络服务类型为 systemd-networkd,以下是在 Ubuntu 18、Ubuntu 20系统中自定义配置 DNS 的操作步骤: 1. 编辑 /etc/cloud/cloud.cfg
,关闭 cloud-init 中的自动配置网络参数,避免网卡配置文件内容被覆盖。
network:
config: disabled
2. 编辑 /etc/netplan/50-cloud-init.yaml
配置文件,增加自定义 DNS 配置信息。
nameservers:
addresses: [172.10.XX.XX,172.6.XX.XX]
修改后效果如下:
network:
version: 2
ethernets:
eth0:
dhcp4: true
match:
macaddress: 00:11:3e:13:42:7b
set-name: eth0
nameservers:
addresses: [172.10.XX.XX,172.6.XX.XX]
3. 执行如下命令使服务生效。
4. 执行以下命令建立 /run/systemd/resolve/resolv.conf
文件的软链接,避免因为 /etc/resolv.conf
配置文件内容更新而导致配置还原。
sudo ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Networking 管理网络配置
Debian 9/Debian 10/Debian 11/Ubuntu 16
Debian9、Debian 10、Debian 11 和 Ubuntu 16系统使用的网络服务为 networking,以下是在Debian 9、Debian 10、Debian 11 和 Ubuntu 16系统中自定义配置 DNS 的操作步骤:
1. 编辑 /etc/network/interfaces
网卡配置文件。
某些高版本系统网卡配置文件中若配置为 source /etc/network/interfaces.d/*
,则需在文件 /etc/network/interfaces.d/50-cloud-init.cfg
中进行相应修改。编辑 /etc/network/interfaces
添加如下信息:
dns-nameservers [172.10.XX.XX 172.6.XX.XX]
修改后效果如下:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
dns-nameservers [172.10.XX.XX 172.6.XX.XX]
2. 重启网络使服务生效。
systemctl restart networking.service
Wicked 网络管理工具
SUSE Linux 12/SUSE Linux 15/OpenSUSE 15
目前常见的发行版大多使用的是 NetworkManager 服务进行网络管理,但是从 SUSE Linux 12开始,SUSE Linux 使用了 Wicked 网络管理工具进行网络管理。以下是在SUSE Linux 12、SUSE Linux 15、OpenSUSE 15系统中自定义配置 DNS 的操作步骤:
1. 编辑 /etc/resolv.conf
配置文件。
nameserver [223.1.XX.XX]
nameserver [223.2.XX.XX]
2. 编辑 /etc/sysconfig/network/config
配置文件,将 NETCONFIG_MODULES_ORDER
参数的值删除,保留双引号符号(""),如下所示。
NETCONFIG_MODULES_ORDER=""
3. 重启网络使服务生效。
注意:
在 Linux 系统中,如果 /etc/sysconfig/network
文件仅设置了 PEERDNS=no
,在切换 VPC 和子网的场景中,自定义 DNS 配置可能会被覆盖。
本页内容是否解决了您的问题?