在Linux中设置域名解析主要通过以下几种方式:
1. 主要配置文件
/etc/hosts - 本地主机名解析
# 格式:IP地址 主机名 别名
127.0.0.1 localhost localhost.localdomain
::1 localhost ip6-localhost ip6-loopback
192.168.1.100 server01.example.com server01
192.168.1.101 server02.example.com server02
/etc/resolv.conf - DNS服务器配置
# DNS服务器配置
nameserver 8.8.8.8 # Google DNS
nameserver 114.114.114.114 # 国内DNS
nameserver 192.168.1.1 # 本地路由器DNS
# 搜索域配置
search example.com company.local
domain example.com
# 选项配置
options timeout:2 # 查询超时时间(秒)
options attempts:3 # 重试次数
options rotate # 轮询使用DNS服务器
2. NetworkManager配置(现代Linux发行版)
nmcli命令配置DNS
# 查看网络连接
nmcli connection show
# 为指定连接设置DNS(临时)
nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8,114.114.114.114"
# 添加DNS服务器(不覆盖现有)
nmcli connection modify "Wired connection 1" +ipv4.dns "192.168.1.1"
# 设置搜索域
nmcli connection modify "Wired connection 1" ipv4.dns-search "example.com,local"
# 应用更改
nmcli connection up "Wired connection 1"
nmtui文本界面配置
nmtui # 启动文本界面工具,可图形化配置DNS
3. systemd-resolved(systemd系统)
resolved配置文件 /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 114.114.114.114 # DNS服务器列表
FallbackDNS=1.1..11 # Fallback DNS
Domains=example.com #搜索域
LLMNR=yes #启用LLMNR
MulticastDNS=yes #启用mDNS
DNSSEC=allow-downgrade #DNSSEC设置
Cache=yes #启用缓存
DNSStubListener=yes #监听53端口
resolved控制命令
systemctl status systemd-resolved #检查服务状态
systemctl restart systemd-resolved #重启服务
systemctl enable systemd-resolved #启用服务
#刷新DNS缓存
systemd-resolve --flush-caches
#查看DNS统计信息
systemd-resolve --statistics
##4./etc/nsswitch.conf-名称服务切换配置
# hosts数据库的查找顺序
hosts: files dns myhostname
#解析顺序:files(/etc/hosts)→dns(DNS服务器)→myhostname(系统主机名)
##5.DHCP自动获取DNS
如果使用DHCP客户端,会自动从DHCP服务器获取DNS配置:
/etc/dhcp/dhclient.conf
#请求DHCP服务器提供特定选项
option rfc3442-classless-static-routes code121 = array of unsigned integer8;
send host-name = gethostname();
request subnet-mask,broadcast-address,time-offset,routers,
domain-name-servers,domain-name,host-name;
#自定义prepend语句添加额外DNS(优先级更高)
prepend domain-name-servers192 .168 .l.l;
##6.DNS测试和验证命令
nslookup www.google.com #基本域名查询
dig www.google.com #详细域名信息查询
dig @8 .g.g.g www.google.com #指定DNS服务器查询
host www.google.com #简单主机查询
ping www.google.com #测试连通性和解析
systemd-resolve google.com #
systemd系统专用)
cat /etc/resolv.conf #
检查当前生效的DNS配置
netstat -rn #
查看路由表和网关信息
##7.DNS缓存管理
根据不同系统和安装的服务清理缓存:
#
Systemd systems (Ubuntu18+,RHEL8+)
sudo systemd-resolve --flush-caches
#
NetworkManager systems
sudo systemctl restart NetworkManager
#
NSCD(Name Service Cache Daemon)
sudo systemctl restart nscd
#
BIND(dnsmasq)
sudo systemctl restart dnsmasq
#
Windows Subsystem for Linux(WSL)
sudo /etc/init.d/dns-clean start
##永久性配置建议
对于生产环境推荐以下持久化方案:
- 云服务器:
使用NetworkManager或修改
/etc/sysconfig/network-scripts/下的网卡配置文件
- 容器环境:
在Dockerfile或Kubernetes配置中设置
- 传统服务器:
直接编辑
/etc/resolv.conf并设置不可变属性(chattr +i)防止被覆盖
内容由零声教学AI助手提供,问题来源于学员提问




