VPC DHCP类型的ECS修改DNS

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 本文从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.
目录
相关文章
|
5月前
|
网络协议
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
|
7月前
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
240 4
|
7月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
|
9月前
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
|
10月前
|
域名解析 网络协议 Ubuntu
DHCP与DNS的配置
通过这些步骤,您可以在Linux环境下成功配置和验证DHCP和DNS服务。希望这些内容对您的学习和工作有所帮助。
863 27
|
缓存 监控 网络协议
一文带你了解10大DNS攻击类型,收藏!
【10月更文挑战第23天】
2848 1
一文带你了解10大DNS攻击类型,收藏!
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
1547 2
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
437 3
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
427 1

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS