VPC DHCP类型的ECS修改DNS

简介: 本文从strace工具使用角度分析来提供一种解决VPC实例DNS配置重启失效的思路。

问题背景

客户内部有域名解析,需要用到自己的DNS服务器,客户VPC下的实例开的是DHCP的网络类型,导致客户更改/etc/resolve.conf文件之后,一重启就失效。

怎样解决重启之后DNS失效?

DHCP的虚机如何修改DNS

Centos的虚机

Centos的虚机修改DNS比较简单,有两种方法:

1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 , 在结尾追加:

       DEVICE=eth0
       BOOTPROTO=dhcp
       ONBOOT=yes
       DNS1=10.0.1.1
       DNS2=10.0.1.2

重启网络之后,如图所示,/etc/resolv.conf中的DNS已经变成我自己的了。

2.直接修改/etc/resolv.conf文件,将DNS修改成自己的,然后chattr +i /etc/resolv.conf。

Ubuntu虚机

如果是ubuntu 16的虚机,可以通过上述方法2,将DNS配置文件写保护来达到修改DNS的目的。如果是ubuntu 14的虚机,用chattr系统会提示错误:chattr: Operation not supported while reading flags on /etc/resolv.conf.

可以通过这种方式:

1.vim /etc/resolvconf/resolv.conf.d/head

将DNS信息写进去:
    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 10.0.1.1
    nameserver 10.0.1.2
    nameserver 10.0.1.3

2.执行resolvconf -u,/etc/resolv.conf就变成自己想要的了:

听起来ubuntu 14的系统修改DNS也不是那么难,如果仅仅是这样,确实是不难,我们在给客户解决方案的时候,踩了不少的坑,根据网络上给两种方式,最终查看 /etc/resolv.conf ,最顶部的还是默认的两个 DNS 服务器:

    A:  vi /etc/network/interfaces 新增:
    
    dns-nameservers 10.0.1.1
    
    dns-nameservers 10.0.1.2
    
    B: sudo vim /etc/resolvconf/resolv.conf.d/base 新增:
    
    nameserver 10.0.1.1
    
    nameserver 10.0.1.2
    
    resolvconf -u

最终利用大杀器,用strace来看resovlconf -u到底是如何工作的,才找到为何每次都将/etc/resolv.conf覆盖的元凶。

strace -s 256 -ff -o /tmp/strace.log resolvconf -u

find . -type f | xargs grep -ri 'resolv.conf' | less 将所有跟修改这个配置文件相关的日志都过滤出来,一行一行查看。


接着查看strace.log,发现resolvconf 执行路径中打开了 /etc/resolvconf/resolv.conf.d/head 并将他的内容写到了DNS配置文件中。

于是才有了上述的方法,修改/etc/resolvconf/resolv.conf.d/head,再执行resolvconf -u果然得到了我想要的结果。将结果反馈给客户,客户尝试也解决了ubuntu 14 DNS重启失效的问题了。

注:/etc/resolvconf/update.d 下面的两个脚本文件也比较有意思,大家可以阅读一下。

还有一种比较推荐的方式:禁止DHCP client去更新DNS配置:
1.修改/etc/dhcp/dhclient.conf 中添加一行在requst前面:supersede domain-name-servers 你的DNS地址1, DNS地址2;
2.重启网络,让dhcp配置生效。
supersede man中的说明, 对有些选项来说,客户端要想使用一个本地配置(locally-configured),就可以在supersede选项中定义。

The supersede statement

       supersede [ option declaration ];

       If for some option the client should always  use  a  locally-configured
       value  or  values rather than whatever is supplied by the server, these
       values can be defined in the supersede statement.
目录
相关文章
|
26天前
|
存储 弹性计算 编解码
ecs实例规格业务类型
阿里云ECS提供多样化实例规格,涵盖通用、计算、内存、存储、GPU、FPGA/ASIC和弹性伸缩型实例,适应不同业务场景。例如,通用型适合日常Web服务,计算型用于高性能计算,内存型适用于内存数据库,GPU实例支持图形和AI计算,而弹性伸缩实例则可根据负载动态调整资源。各规格族内有不同实例大小,满足用户个性化需求。
14 3
|
22天前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
46 0
|
22天前
|
存储 JSON 安全
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
64 1
|
13天前
|
存储 编译器 Linux
解析编程中不可或缺的基础:深入了解结构体类型
解析编程中不可或缺的基础:深入了解结构体类型
31 2
|
22天前
|
算法 Serverless 数据安全/隐私保护
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
34 1
|
25天前
|
存储 机器学习/深度学习 弹性计算
ecs选择实例类型
选择阿里云ECS实例需考虑计算(通用/计算优化)、内存(内存优化)、存储(存储优化)、GPU需求、网络性能、地域/可用区和成本。实例类型包括通用型、计算优化型、内存优化型、GPU实例等,应根据业务需求、网络延迟、吞吐量、成本控制等因素选择。利用阿里云控制台查看实例配置,并使用成本优化策略降低运维成本。
17 2
|
28天前
|
存储 编译器 C语言
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
67 0
|
1月前
|
数据采集 弹性计算 供应链
阿里云服务器节省计划、按量付费、抢占式实例、包年包月四种付费类型区别及适用场景参考
阿里云服务器ECS提供灵活的计费方式,在通过云服务器ECS产品页面购买的时候,默认可选的付费类型为包年包月、按量付费和抢占式实例,而节省计划是在已经持有一定数量的按量付费实例,希望进行成本优化时通过“节省计划购买方案测算”选择的计费模式。本文来为大家介绍一下这些付费类型的主要区别及适用场景参考。
阿里云服务器节省计划、按量付费、抢占式实例、包年包月四种付费类型区别及适用场景参考
|
2月前
|
监控 安全 Linux
服务器是什么?(四种服务器类型)
服务器是什么?(四种服务器类型)
76 0
|
2月前
|
运维 安全 Linux
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?性能有差异?同配置的游戏服务器,如4核16G或8核32G配置等,选择Windows和Linux操作系统差异不太大,如果非要对比的话,Linux系统相对Windows更少占用计算资源,当然如果对Linux不熟悉的话,可以选择Windows。另外,即便是幻兽帕鲁服务器创建成功后,也是可以免费修改操作系统的
105 1

相关产品

  • 云解析DNS
  • 推荐镜像

    更多