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.
目录
相关文章
|
4天前
|
域名解析 网络协议 Linux
使用 Webmin+bind9快速搭建私有DNS服务器
使用 Webmin+bind9快速搭建私有DNS服务器
158 1
|
2天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
4天前
|
Windows
LabVIEW中ActiveX控件、ActiveX服务器和类型库注册
LabVIEW中ActiveX控件、ActiveX服务器和类型库注册
12 4
|
4天前
|
域名解析 存储 缓存
Linux中搭建DNS 域名解析服务器(详细版)
Linux中搭建DNS 域名解析服务器(详细版)
|
4天前
|
存储 数据处理 数据库
|
4天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
4天前
|
存储 缓存 网络协议
【专栏】理解并优化DNS设置对于提高网络速度至关重要
【4月更文挑战第28天】本文探讨了DNS服务器是否能加快网络访问速度。DNS负责将域名转换为IP地址,其查询时间、缓存机制和地理位置都影响网络速度。优化DNS配置,如选择快速的公共DNS服务、使用附近的服务器、确保设备正确配置和利用DNS缓存,都能有效提升网络体验。理解并优化DNS设置对于提高网络速度至关重要。
|
4天前
|
监控 负载均衡 网络协议
|
4天前
|
监控 安全 网络协议
|
4天前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
16 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多