在Linux系统中,DNS(域名系统)配置是网络通信的基础,它负责将人类可读的域名转换为机器可识别的IP地址,正确的DNS配置能确保系统高效访问互联网或内部网络资源,本文将详细介绍Linux下配置DNS的多种方法,涵盖临时配置、永久配置、系统服务配置及DNS服务器搭建等场景,并针对不同发行版提供具体操作步骤。
临时配置DNS(适用于快速测试)
直接修改/etc/resolv.conf
文件是最直接的临时配置方法,但该配置在系统重启或网络服务重启后可能会被覆盖,适合临时调试或快速验证DNS解析。
操作步骤:
- 使用文本编辑器(如
vi
或nano
)打开/etc/resolv.conf
文件:sudo vi /etc/resolv.conf
- 在文件中添加或修改
nameserver
指令,指定DNS服务器IP地址(如公共DNS:8.8.8.8或114.114.114.114,或内网DNS服务器):nameserver 8.8.8.8 nameserver 114.114.114.114
- 保存文件后,使用
nslookup
或dig
命令测试DNS解析是否生效:nslookup www.baidu.com
注意事项:
- 该方法为临时配置,若网络服务重启(如
systemctl restart NetworkManager
)或系统重启,配置可能恢复默认。 - 避免直接修改该文件,因部分系统会通过网络管理工具自动覆盖,建议优先使用永久配置方法。
永久配置DNS(通过网络管理工具)
不同Linux发行版使用不同的网络管理工具,以下是主流发行版的永久配置方法:
基于NetworkManager的发行版(Ubuntu、CentOS 7+、RHEL 7+等)
NetworkManager是桌面版和部分服务器版Linux的默认网络管理工具,可通过图形界面或命令行配置DNS。
命令行配置(nmcli)
- 查看当前网络连接名称(如
eno1
、wlan0
或eth0
):nmcli connection show
- 修改指定连接的DNS服务器(以
eno1
为例,添加8.8.8.8和114.114.114.114):sudo nmcli connection modify eno1 ipv4.dns "8.8.8.8 114.114.114.114"
- 重启网络连接使配置生效:
sudo nmcli connection down eno1 && sudo nmcli connection up eno1
配置文件修改
编辑对应网卡的配置文件(路径为/etc/sysconfig/network-scripts/ifcfg-eno1
或/etc/NetworkManager/system-connections/eno1.nmconnection
),添加或修改以下内容:
DNS1=8.8.8.8 DNS2=114.114.114.114 PEERDNS=no # 禁用NetworkManager自动覆盖DNS配置
保存后重启网络服务:sudo systemctl restart NetworkManager
。
基于netplan的发行版(Ubuntu 18.04+、Debian 10+等)
netplan是Ubuntu等系统使用的网络配置工具,通过YAML文件配置。
- 编辑netplan配置文件(通常位于
/etc/netplan/
目录下,如01-netcfg.yaml
):sudo vi /etc/netplan/01-netcfg.yaml
- 在配置文件中添加DNS服务器,示例(以以太网连接为例):
network: version: 2 ethernets: eno1: dhcp4: no addresses: [192.168.1.100/24] # 静IP地址(若使用DHCP可省略) gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114] search: [localdomain] # 可选,添加域名后缀
- 应用配置并测试:
sudo netplan apply nslookup www.google.com
基于systemd-networkd的发行版(Debian、Arch Linux等)
-
编辑网卡配置文件(如
/etc/systemd/network/eno1.network
):sudo vi /etc/systemd/network/eno1.network
-
添加DNS配置:
[Match] Name=eno1 [Network] DHCP=no Address=192.168.1.100/24 Gateway=192.168.1.1 DNS=8.8.8.8 114.114.114.114
-
重启systemd-networkd服务:
sudo systemctl restart systemd-networkd
通过systemd-resolved配置DNS(现代系统)
systemd-resolved
是systemd提供的本地DNS解析服务,支持缓存、LLMNR等功能,常用于Ubuntu 18.04+、CentOS 8+等系统。
- 启用并启动
systemd-resolved
服务:sudo systemctl enable --now systemd-resolved
- 修改
/etc/systemd/resolved.conf
文件:sudo vi /etc/systemd/resolved.conf
取消注释并修改以下内容:
DNS=8.8.8.8 114.114.114.114 FallbackDNS=1.1.1.1 DNSStubListener=yes
- 创建
/etc/resolv.conf
的软链(指向systemd-resolved管理的本地DNS):sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
- 重启服务:
sudo systemctl restart systemd-resolved
。
配置DNS服务器(以BIND9为例)
若需搭建本地DNS服务器,可使用BIND9(Berkeley Internet Name Domain)。
- 安装BIND9:
sudo apt install bind9 # Debian/Ubuntu sudo yum install bind bind-utils # CentOS/RHEL
- 修改主配置文件
/etc/bind/named.conf.options
:sudo vi /etc/bind/named.conf.options
添加 forwarders(转发外部DNS查询)和区域配置:
options { directory "/var/cache/bind"; forwarders { 8.8.8.8; 114.114.114.114; }; allow-query { any; }; };
- 创建正向区域文件(如
example.com
):sudo vi /etc/bind/db.example.com ``` 示例: ```plaintext $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL IN NS ns1.example.com. IN A 192.168.1.10 IN MX 10 mail.example.com. ns1 IN A 192.168.1.10 www IN A 192.168.1.20
- 创建反向区域文件(解析IP到域名):
sudo vi /etc/bind/db.192.168.1 ``` 示例: ```plaintext $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL IN NS ns1.example.com. IN PTR example.com. 10 IN PTR ns1.example.com. 20 IN PTR www.example.com.
- 重启BIND9服务:
sudo systemctl restart bind9
,并使用dig
测试解析:dig @localhost www.example.com
不同配置方法对比
方法 | 适用场景 | 永久性 | 重启要求 | 示例发行版 |
---|---|---|---|---|
修改/etc/resolv.conf | 临时测试、快速调试 | 否 | 网络服务重启 | 所有发行版 |
NetworkManager | 桌面版、服务器版(CentOS 7+) | 是 | 重启网络连接 | Ubuntu、CentOS、RHEL |
netplan | Ubuntu 18.04+、Debian 10+ | 是 | 执行netplan apply |
Ubuntu、Debian |
systemd-resolved | 现代系统(支持systemd) | 是 | 重启systemd-resolved | Ubuntu 18.04+、CentOS 8+ |
BIND9 | 搭建本地DNS服务器 | 是 | 重启bind9 | 所有发行版 |
相关问答FAQs
Q1:为什么修改/etc/resolv.conf后重启系统,DNS配置又恢复默认?
A:/etc/resolv.conf
文件通常由网络管理工具(如NetworkManager、systemd-networkd)自动管理,若直接修改该文件,工具下次运行时会覆盖配置,解决方法:通过对应网络管理工具永久配置DNS(如NetworkManager中设置PEERDNS=no
,或使用netplan修改配置文件),避免直接编辑/etc/resolv.conf
。
Q2:如何验证DNS配置是否生效?
A:可通过以下命令测试:
nslookup 域名
:查询域名对应的IP地址,若返回指定DNS服务器的解析结果,则配置生效。dig 域名 @DNS服务器IP
:指定DNS服务器进行查询,可确认是否使用目标DNS(如dig www.baidu.com @8.8.8.8
)。ping 域名
:通过域名测试网络连通性,若能解析IP并通包,说明DNS配置正常。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20165.html