在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助手提供,问题来源于学员提问


 
                             
         
        
 
         
         
         
         
         
         
        
 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                