Ubuntu下修改DNS重启也能用的方法

本文介绍了解决Ubuntu系统中域名解析失败的问题。提供了两种有效的方法来配置DNS服务器:一是通过/etc/network/interfaces文件,二是修改/etc/resolvconf/resolv.conf.d/base文件。这两种方法都能确保更改生效且重启后不会丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载于:http://yubosun.akcms.com/tech/ubntu-dns-reset.htm


安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名。想重新设置一下DNS,打开/etc/resolv.conf

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

内容是一段警告:说这个文件是resolvconf程序动态创建的,不要直接手动编辑,修改将被覆盖。

果不其然,修改后重启就失效了,搜索了Ubuntu下设置DNS的相关资料,总结出两个办法:

方法一 通过/etc/network/interfaces,在它的最后增加一句:

dns-nameservers 8.8.8.8

8.8.8.8是Google提供的DNS服务,这里只是举一个例子,你也可以改成电信运营商的DNS。重启后DNS就生效了,这时候再看/etc/resolv.conf,最下面就多了一行:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8

方法二 通过修改:

/etc/resolvconf/resolv.conf.d/base(这个文件默认是空的)

在里面插入:
nameserver 8.8.8.8
nameserver 8.8.4.4

如果有多个DNS就一行一个

修改好保存,然后执行

resolvconf -u

再看/etc/resolv.conf,最下面就多了2行:

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4

可以看到我们的设置已经加上了,然后再ping一个域名,当时就可以解析了,无需重启。

附:CentOS下修改DNS则容易的多了,直接修改/etc/resolv.conf,内容是:
nameserver 8.8.8.8
nameserver 8.8.4.4

保存就生效了,重启也没问题。

<think>好的,我现在需要帮助用户解决在Ubuntu 20上配置DNS并使其重启后依然生效的问题。首先,我需要回顾一下用户的问题,确保我理解正确。用户想要配置DNS,并且这个配置在系统重启后仍然有效。这意味着不能只是临时修改,而是需要永久性的配置。 接下来,我需要考虑Ubuntu 20使用的网络管理工具。从Ubuntu 17.10开始,系统默认使用Netplan来管理网络配置,而不再是传统的/etc/network/interfaces文件。因此,用户可能需要通过Netplan的YAML配置文件来进行设置。不过,也有用户可能使用NetworkManager,尤其是桌面版用户。因此,我需要覆盖这两种方法,确保用户可以根据自己的情况选择合适的方式。 首先,使用Netplan的情况。Netplan的配置文件通常位于/etc/netplan/目录下,文件名可能是01-netcfg.yaml或者其他以.yaml结尾的文件。用户需要编辑这个文件,添加DNS服务器的配置。这里需要注意的是,YAML文件的语法对缩进非常敏感,所以必须正确使用空格,并且每个层级要对齐。比如,在ethernets部分下,对应的网络接口(如ens33)下,需要设置nameservers的addresses字段,填入DNS服务器地址,如8.8.8.8和8.8.4.4。同时,可能需要设置dhcp4为no,如果用户使用静态IP的话,或者保持为yes如果继续使用DHCP但覆盖DNS设置。不过,这里可能需要进一步确认,是否在DHCP模式下设置DNS会被保留,或者是否应该使用静态IP配置。如果用户使用的是DHCP,可能需要设置optional: true,或者确保DHCP不会覆盖DNS设置。此外,配置完成后,应用更改需要使用netplan apply命令,这会生成并应用新的配置到systemd-networkd或NetworkManager,具体取决于Netplan的renderer设置。 其次,使用NetworkManager的情况。对于桌面用户,可能更习惯使用NetworkManager的图形界面或者nmcli命令。通过nmcli修改连接配置,设置ipv4.dns参数,并且将ipv4.ignore-auto-dns设为yes,这样可以防止DHCP自动分配的DNS覆盖用户的手动设置。这种方法适用于使用NetworkManager管理的网络连接,配置完成后需要重启NetworkManager服务或者重新激活连接,使设置生效。 另外,用户可能需要直接修改/etc/systemd/resolved.conf文件,配置DNS服务器,并启用systemd-resolved服务。这种方法会设置全局的DNS配置,适用于使用systemd-resolved的系统。需要编辑该文件,设置DNS字段,并取消注释,然后重启服务。同时,可能需要创建符号链接将/etc/resolv.conf指向systemd-resolved的解析文件,以确保DNS配置生效。 在思考过程中,我需要确认这些方法的适用性和区别。例如,Netplan是Ubuntu推荐的配置方式,适用于服务器和桌面版,而NetworkManager更适合桌面用户,尤其是需要动态管理网络的情况。而直接修改resolved.conf可能适用于更底层的配置,但需要注意与其他工具的兼容性。 用户还可能关心如何验证配置是否生效,可能需要指导用户使用nslookup或dig命令测试DNS解析,或者查看/etc/resolv.conf的内容,确认是否指向了正确的DNS服务器。不过,需要注意在systemd-resolved的情况下,/etc/resolv.conf可能是一个符号链接,实际配置在/run/systemd/resolve/resolv.conf或其他位置,因此需要特别提醒用户检查正确的位置。 此外,用户的问题中提到“重启也生效”,所以必须确保配置是永久性的,而不是临时的。比如,使用nmcli修改连接时,需要保存配置,而Netplan的配置本身就是持久的,因为修改的是YAML文件,应用后生成对应的服务配置。而直接修改resolved.conf并重启服务也会使配置持久化。 需要考虑到用户可能的不同网络环境,比如是使用静态IP还是DHCP。如果使用DHCP,可能需要额外的设置来防止DHCP服务器覆盖DNS配置。例如,在Netplan中设置dhcp4-overrides的use-dns为false,或者在NetworkManager中设置ignore-auto-dns。这些细节需要明确写出,避免用户配置后因为DHCP的原因导致DNS被覆盖。 同时,要提醒用户备份原有的配置文件,避免配置错误导致网络不可用。例如,在编辑Netplan文件前,建议备份原文件,或者在修改resolved.conf前备份。此外,在应用配置后,如何测试网络连接是否正常,比如ping一个域名,看是否能正确解析。 可能还需要解释一些术语,比如DNS服务器的作用,为什么要配置特定的DNS(比如提升解析速度,访问特定资源等)。但用户可能已经了解这些,所以可能不需要深入,除非用户的问题背后有更深层次的需求。 最后,需要组织这些信息,分步骤说明,确保清晰易懂。可能分为几个方法,每种方法详细说明步骤,并指出适用场景。同时,给出验证配置生效的方法,以及常见问题的解决方法,比如配置后DNS不生效的可能原因(拼写错误、服务未重启、DHCP覆盖等)。</think>在 Ubuntu 20.04 中配置 DNS 并确保重启生效,可以通过以下方法实现。根据需求选择适合的方式: --- ### **方法 1:通过 Netplan(推荐,适用于服务器/桌面版)** Ubuntu 20.04 默认使用 `Netplan` 管理网络配置。 #### **步骤**: 1. **编辑 Netplan 配置文件** 找到 `/etc/netplan/` 目录下的 YAML 文件(如 `01-netcfg.yaml`): ```bash sudo nano /etc/netplan/01-netcfg.yaml ``` 2. **添加 DNS 配置** 在对应网络接口下添加 `nameservers` 字段(假设使用静态 IP): ```yaml network: version: 2 renderer: networkd # 或 NetworkManager(桌面版) ethernets: ens33: # 网卡名称(通过 `ip a` 查看) dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] # 自定义 DNS 服务器 ``` - 若使用 DHCP 但覆盖 DNS,保留 `dhcp4: yes` 并添加 `nameservers`。 3. **应用配置** ```bash sudo netplan apply ``` --- ### **方法 2:通过 NetworkManager(桌面用户常用)** 适用于图形界面用户,通过 `nmcli` 或 GUI 配置。 #### **步骤**: 1. **查看当前连接名称** ```bash nmcli connection show ``` 2. **修改 DNS 设置** 替换 `Your-Connection-Name` 为实际连接名称(如 `Wired Connection 1`): ```bash sudo nmcli connection modify "Your-Connection-Name" ipv4.dns "8.8.8.8 8.8.4.4" sudo nmcli connection modify "Your-Connection-Name" ipv4.ignore-auto-dns yes ``` 3. **重启连接生效** ```bash sudo nmcli connection down "Your-Connection-Name" && sudo nmcli connection up "Your-Connection-Name" ``` --- ### **方法 3:直接修改 `/etc/resolv.conf`(临时方案,不推荐)** 默认情况下,`/etc/resolv.conf` 由系统自动生成,直接修改可能被覆盖。若需强制生效: 1. **禁用自动生成** ```bash sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf ``` 2. **配置 systemd-resolved** 编辑配置文件: ```bash sudo nano /etc/systemd/resolved.conf ``` 取消注释并修改以下行: ```ini [Resolve] DNS=8.8.8.8 8.8.4.4 Domains=~. ``` 3. **重启服务** ```bash sudo systemctl restart systemd-resolved ``` --- ### **验证 DNS 是否生效** ```bash # 检查当前 DNS 服务器 systemd-resolve --status # 或测试域名解析 nslookup google.com ping ubuntu.com ``` --- ### **注意事项** 1. **优先级**:推荐优先使用 **Netplan**(服务器)或 **NetworkManager**(桌面)。 2. **备份配置**:修改前备份原文件(如 `sudo cp /etc/netplan/01-netcfg.yaml ~/`)。 3. **DHCP 覆盖**:若使用 DHCP,确保设置 `ignore-auto-dns` 或 `use-dns: false`(在 Netplan 中通过 `dhcp4-overrides` 配置)。 按上述步骤操作后,DNS 配置将在重启后永久生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值