天天看點

VPC DHCP類型的ECS修改DNS問題背景DHCP的虛機如何修改DNS

客戶内部有域名解析,需要用到自己的DNS伺服器,客戶VPC下的執行個體開的是DHCP的網絡類型,導緻客戶更改/etc/resolve.conf檔案之後,一重新開機就失效。

怎樣解決重新開機之後DNS失效?

Centos的虛機修改DNS比較簡單,有兩種方法:

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

重新開機網絡之後,如圖所示,/etc/resolv.conf中的DNS已經變成我自己的了。

2.直接修改/etc/resolv.conf檔案,将DNS修改成自己的,然後chattr +i /etc/resolv.conf。

如果是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

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

聽起來ubuntu 14的系統修改DNS也不是那麼難,如果僅僅是這樣,确實是不難,我們在給客戶解決方案的時候,踩了不少的坑,根據網絡上給兩種方式,最終檢視 /etc/resolv.conf ,最頂部的還是預設的兩個 DNS 伺服器:

最終利用大殺器,用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選項中定義。