Ubuntu 修改 DNS 的正确做法
先明确目标
- 若只是想让系统用新的 DNS 服务器解析域名(最常见需求),请看第 2 节的“永久修改 DNS”。
- 若要把本机的“域名/主机名”改成别的名字(例如把主机名从 ubuntu 改为 myserver.local),请看第 3 节的“修改主机名与 hosts”。
永久修改 DNS(按你的系统选择一种)
-
使用 systemd-resolved(Ubuntu 18.04 及之后常见)
- 编辑配置文件
sudo nano /etc/systemd/resolved.conf
在 [Resolve] 段设置:
DNS=8.8.8.8 114.114.114.114
FallbackDNS=1.1.1.1
- 使配置生效
sudo systemctl restart systemd-resolved
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
- 验证
resolvectl status | grep “DNS Servers” -A2
nslookup example.com
-
使用 Netplan(Ubuntu 18.04/20.04/22.04 常见,/etc/netplan/*.yaml)
- 编辑 netplan 配置(文件名可能不同)
sudo nano /etc/netplan/01-netcfg.yaml
在相应网卡下添加或修改:
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
- 应用
sudo netplan apply
- 验证
nslookup example.com
-
使用 /etc/network/interfaces(ifupdown,较少见)
- 编辑
sudo nano /etc/network/interfaces
在对应接口(如 eth0)添加:
dns-nameservers 8.8.8.8 114.114.114.114
- 重启网络
sudo systemctl restart networking
- 验证
nslookup example.com
-
使用 NetworkManager(桌面版或 nmcli 管理网络)
- 查看连接名
nmcli con show
- 设置 DNS(将“Your-Connection”替换为实际名称)
nmcli con mod “Your-Connection” ipv4.dns “8.8.8.8;8.8.4.4”
nmcli con up “Your-Connection”(或 nmcli con reload)
- 验证
nslookup example.com
-
临时修改(重启后失效,仅用于测试)
sudo nano /etc/resolv.conf
写入:
nameserver 8.8.8.8
nameserver 8.8.4.4
注意:很多系统由 systemd-resolved 或 NetworkManager 托管该文件,重启或网络重连后可能被覆盖,不建议长期使用。
修改主机名与 hosts(如果你是要“改域名/主机名”)
- 修改主机名
sudo hostnamectl set-hostname myserver.local
- 更新 /etc/hosts(可选,确保本机名能解析)
sudo nano /etc/hosts
将旧主机名替换为新主机名,例如:
127.0.1.1 myserver.local myserver
- 验证
hostname
hostnamectl
说明:/etc/hosts 仅影响本机解析;真正的“域名解析”仍依赖 DNS 服务器配置。
验证与常见问题
- 验证命令
nslookup example.com
dig example.com
resolvectl status(若使用 systemd-resolved)
- 常见问题
- /etc/resolv.conf 被覆盖:确认是由 systemd-resolved 还是 NetworkManager 托管,按上文对应方法设置 DNS,避免直接改 resolv.conf。
- 修改后不生效:检查是否在正确的网络接口/连接上设置;使用 netplan 后执行 sudo netplan apply;使用 NetworkManager 后执行 nmcli con up 或 nmcli con reload。
- 云服务或公司网络:可能存在 DHCP 强制下发 DNS,需要在云控制台或路由器/DHCP 服务器侧调整,或在本地按上文方法强制覆盖。