prepend domain-search覆盖而非前置:AWS Linux搜索域配置求助
解决AWS Linux主机resolv.conf搜索域前置/追加及域名句点问题
咱们先理清AWS EC2实例的DNS配置逻辑:默认情况下,dhclient会接收DHCP服务器推送的DNS设置,直接在dhclient.conf里加配置可能因为优先级或语法问题导致没生效,甚至出现域名末尾多句点的情况(这其实是DNS规范里的完全限定域名格式,但如果不需要可以调整)。
一、正确配置dhclient.conf实现前置/追加搜索域
1. 前置自定义搜索域(让自定义域排在最前面)
编辑/etc/dhcp/dhclient.conf,添加以下配置:
# 保留DHCP返回的搜索域,同时前置自定义域 prepend domain-search "mydomain.com"; # 如果不想保留DHCP的搜索域,只用自定义的,就替换成这个: # supersede domain-search "mydomain.com";
这里要注意:
prepend是把自定义域放在DHCP返回的搜索域前面supersede是完全替换DHCP的搜索域,只保留自定义的- 配置里的域名不要加末尾的句点,dhclient会自动处理,若不想让它加句点可以看后面的调整方案。
2. 追加自定义搜索域(把自定义域放在DHCP返回的域后面)
用append指令代替prepend即可:
append domain-search "mydomain.com";
二、解决域名末尾多余句点的问题
默认dhclient会把域名转成完全限定域名(FQDN),所以自动加句点。如果想去掉这个行为,可以通过钩子脚本实现长期生效:
创建或编辑/etc/dhcp/dhclient-exit-hooks.d/remove-trailing-dot,添加以下内容:
#!/bin/bash if [ "$reason" = BOUND ] || [ "$reason" = RENEW ] || [ "$reason" = REBIND ] || [ "$reason" = REBOOT ]; then # 替换resolv.conf里搜索域末尾的句点 sed -i 's/\(search.*\)\.\( \|$\)/\1\2/g' /etc/resolv.conf fi
然后给脚本添加执行权限:
chmod +x /etc/dhcp/dhclient-exit-hooks.d/remove-trailing-dot
如果只是临时测试,也可以直接编辑/etc/resolv.conf删掉末尾句点,但注意dhclient重启后配置会被重新生成,长期生效还是要用上面的钩子脚本。
三、重启网络服务生效
根据你的Linux发行版选择对应命令:
- Amazon Linux 2/CentOS 7:
systemctl restart network
- Amazon Linux 2023/RHEL 8+/Ubuntu:
systemctl restart NetworkManager # 或者直接重新获取DHCP配置 dhclient -r && dhclient
验证配置
重启后查看/etc/resolv.conf,就能看到自定义搜索域按你想要的顺序排列,且没有多余句点:
cat /etc/resolv.conf
比如前置配置生效后会是:
search mydomain.com ec2.internal
nameserver x.x.x.x
内容的提问来源于stack exchange,提问作者Daniel Watrous
相关产品推荐
相关产品推荐

