由于歷史原因一直在用經(jīng)典網(wǎng)絡的 ECS,在安全性方面要弱于 VPC,所以決定將服務器遷移到 VPC 中楷拳。給 ECS 配置自定義 DNS 服務器的好處是可以給 ECS 分配自定義后綴的域名狂芋,比如 web01.abc
,這樣在內(nèi)網(wǎng)定位服務器就很方便森篷,不用去記一堆內(nèi)網(wǎng) IP,如果配置得當豺型,還可以通過 host $ip
這個命令尋找 IP 對應的服務器疾宏。
一開始的時候我按照給經(jīng)典網(wǎng)絡 Centos ECS 配 DNS 服務器的方法來操作,直接修改 /etc/resolv.conf
触创,把里面的 nameserver
配置改成了自己內(nèi)網(wǎng)中 DNS 服務器 IP坎藐,但是發(fā)現(xiàn)重啟服務器之后會被重置成阿里云分配的 DNS 服務器。
經(jīng)過研究之后發(fā)現(xiàn)哼绑,是 Ubuntu 的 resolvconf 會在每次啟動的時候?qū)?/etc/resolv.conf
覆蓋岩馍。/etc/resolv.conf
本質(zhì)上是一個軟鏈,會鏈接到 /run/resolvconf/resolv.conf
抖韩,而后者可以通過 resolvconf -u
命令重新生成蛀恩,生成的內(nèi)容來自于兩個地方:
-
/etc/resolvconf/resolv.conf.d/
目錄下的head
base
tail
3 個文件,看文件名就能明白分別是做什么用茂浮,阿里云的 ECS 服務器的 tail 文件里定義了阿里云 DNS 服務器地址双谆。 -
/run/resolvconf/interface/
目錄下的{xx}.dhclient
,在阿里云是eth0.dhclient
席揽,這里也定義了阿里云 DNS 服務器地址顽馋,數(shù)據(jù)來源是 DHCP 服務器。
所有我一開始的思路是:
- 將
/etc/resolvconf/resolv.conf.d/tail
中的阿里云 DNS 替換為我們自己的幌羞。 - 禁用 DHCP寸谜,修改
/etc/network/interfaces
文件,把iface eth0 inet dhcp
改成iface eth0 inet static
属桦,當然還需要補全 ip 地址熊痴、網(wǎng)關(guān)、掩碼等聂宾。
在刪除了 /run/resolvconf/interface/eth0.dhclient
文件之后果善,執(zhí)行 service networking restart && resolvconf -u
之后,發(fā)現(xiàn) /etc/resolv.conf
里的內(nèi)容變成了我們期望的值系谐。
但是后來發(fā)現(xiàn)同一個 VPC 的不同子網(wǎng)之間 ECS 無法互通巾陕,檢查之后發(fā)現(xiàn)是路由表配置不正確,原因就是之前把 DHCP 給改成了靜態(tài) IP,看來 DHCP 是不能禁了惜论,只好重新尋找解決方案。
想到阿里云 DNS 服務器的值是來源于 DHCP止喷,于是就嘗試搜索禁止從 DHCP 獲得 DNS 服務器馆类,找到了一個相關(guān)的問答,有兩種方法弹谁,一是將 /etc/dhcp/dhclient.conf
文件中 request
配置項的 domain-name, domain-name-servers, domain-search
參數(shù)移除乾巧,二是在 /etc/dhcp/dhclient.conf
文件中追加一行 supersede domain-name-servers $dns_ip;
。
為了保險起見预愤,我把兩個方法都用上沟于,然后執(zhí)行 rm -f /run/resolvconf/interface/eth0.dhclient && service networking restart && resolvconf -u
,再重啟了一次服務器植康。檢查 /etc/resolv.conf
符合預期旷太,與其他子網(wǎng) ECS 也能互通,搞定销睁。