AWS VPC DHCP多域名配置导致cloud-init异常拼接主机名问题求解
问题根因
AWS VPC DHCP选项集的标准Domain Name字段仅支持填写单个域名,你在该字段空格分隔填写多个域名属于不符合规范的配置,会导致DHCP客户端解析时错误将多个域名拼接为单个后缀,才会出现主机名被拼接所有域名、resolv.conf的search字段出现无效拼接条目的问题。多搜索域的需求需要通过配置DHCP自定义选项119(Domain Search)实现。
解决方案
方案1:修正DHCP选项集配置(推荐,无需额外修改系统配置)
- 编辑当前使用的VPC DHCP选项集:
Domain name字段仅保留你需要作为主机名后缀的单个域名,如仅需默认VPC后缀就填ec2.internal- 新增自定义DHCP选项:
- 选项编号:
119 - 值:按逗号分隔填写所有需要的搜索域:
ec2.internal,privatedomain_1.com,privatedomain_2.com,publicdomain.com
- 选项编号:
- 保存修改后将该DHCP选项集关联到对应VPC,重启实例的DHCP客户端或直接重启实例即可:
- 主机名后缀只会保留
Domain name字段填写的单个域名,不会出现拼接问题 /etc/resolv.conf的search字段会自动正确列出所有配置的搜索域,无无效条目
- 主机名后缀只会保留
方案2:不修改DHCP配置,在系统侧强制固化配置
如果暂时无法调整DHCP配置,可以在操作系统侧做如下设置(以RHEL/CentOS/Amazon Linux为例,Debian/Ubuntu配置逻辑类似):
- 禁止DHCP修改主机名
编辑主网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,添加或修改如下参数:
执行命令固化静态主机名:PEERDNS=no DHCP_HOSTNAME=你需要设置的固定主机名hostnamectl set-hostname 你的固定主机名 --static - 固定resolv.conf配置防止被覆盖
先编辑/etc/resolv.conf为你需要的正确配置:
给文件添加不可修改属性:search ec2.internal privatedomain_1.com privatedomain_2.com publicdomain.com nameserver 10.*.*.2
如果你使用NetworkManager管理网络,可以额外修改chattr +i /etc/resolv.conf/etc/NetworkManager/NetworkManager.conf,在[main]段添加配置:
重启NetworkManager服务生效:dns=nonesystemctl restart NetworkManager - 重启实例验证配置即可。
内容的提问来源于stack exchange,提问作者Rahul Sahotay
相关产品推荐
相关产品推荐

