tencent cloud

文档反馈

文档云服务器实践教程如何在 Linux 实例中自定义 DNS 配置
文档云服务器实践教程如何在 Linux 实例中自定义 DNS 配置

如何在 Linux 实例中自定义 DNS 配置

最后更新时间:2024-12-23 16:02:38
要在 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
NM_CONTROLLED=yes
3. 使用传统网络脚本管理的接口:如果接口是由传统网络脚本管理的,配置文件中通常会有一个 NM_CONTROLLED 参数,值为no
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增加如下配置:
[main]
dns=none

非 NetworkManager 方式管理网络

传统的网络脚本来管理网络配置

RHEL/CentOS7

1. 系统通过使用传统的网络脚本来管理网络配置。这些脚本存放在 /etc/sysconfig/network-scripts/ 目录中,而 DNS 配置则位于 /etc/resolv.conf 文件中。为了防止 /etc/resolv.conf 文件被 DHCP 获取的 DNS IP 地址覆盖,您需要修改 /etc/sysconfig/network 文件并添加以下一行内容:
PEERDNS=no
2. 然后重启网络服务生效。

TencentOS Server 2.X

TencentOS Server 2.X 系列默认使用 network 来管理网络。如果 TencentOS Server 2.X 需要切换子网或者切换 VPC,建议先安装 NetworkManager 软件包并改用 NetworkManager 来管理网络。如果不采用 NetworkManager 管理网络您可以锁定文件编辑权限。
采用
NetworkManager
管理网络
1.1 安装 NetworkManager。
yum install NetworkManager
1.2 /etc/NetworkManager/conf.d/90-dns-none.conf 文件中添加如下两行:
[main]
dns=none
采用锁定文件编辑权限,避免 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. 执行如下命令使服务生效。
netplan apply
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. 重启网络使服务生效。
service network restart
注意:
在 Linux 系统中,如果 /etc/sysconfig/network 文件仅设置了 PEERDNS=no,在切换 VPC 和子网的场景中,自定义 DNS 配置可能会被覆盖。
对于非 DHCP 环境的设备,可以参考官方文档中关于 DNS 初始化(非 DHCP 场景)的部分进行处理。详细信息请参见:Cloud-Init 和 Cloudbase-Init 问题
联系我们

联系我们,为您的业务提供专属服务。

技术支持

如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

7x24 电话支持
中国香港
+852 800 906 020 (免费)
美国
+1 844 606 0804 (免费)
英国
+44 808 196 4551 (免费)
加拿大
+1 888 605 7930 (免费)
澳大利亚
+61 1300 986 386 (免费)
EdgeOne 热线
+852 300 80699
更多本地服务热线陆续新增中