(九)ubuntu解決resolv.conf被重寫問題


解決resolv.conf被重寫問題

來源:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html

第二步中你雖然配置了DNS,但是每次重啟虛擬機或重啟網絡后/etc/resolv.conf文件就會被重寫,也就是又恢復原樣了,你以前的配置就不存在了,每次都要手動配置是極不可取的,所以這步是必須的,首先我們要搞清楚resolv.conf被重寫的原因和機制,這在不同Ubuntu版本下有所差異。那怎么知道呢?一般resolv.conf文件一開頭就告訴你了。

解決該問題其實有兩種辦法,不怕麻煩的想理解原理的請參照方法一(與版本有關),怕麻煩的不想折騰的自覺轉到方法二(與版本無關)。

 

方法一:與版本有關

a)Ubuntu 12.10

打開/etc/resolv.conf后可看到開頭的一句話:

# Generated by NetworkManager

說明resolv.conf這個文件是由NetworkManager這個程序生成的(對應的是network-manager服務),那么解決辦法也就來了:我們關掉network-manager即可,命令如下:

sudo service network-manager stop 
或者
sudo /etc/init.d/network-manager stop

但是這種方法不是一勞永逸的,因為每次重啟系統后還是會自動啟動這個服務,因此我們需要完全禁止network-manager啟動即可。

編輯network manager的配置文件/etc/init/network-manager.conf:

sudo vi /etc/init/network-manager.conf

注釋掉其中的start on部分即可:

復制代碼
# network-manager - network connection manager
#
# The Network Manager daemon manages the system's network connections,
# automatically switching between the best available.

description     "network connection manager"

#start on (local-filesystems
#         and started dbus
#         and static-network-up)
stop on stopping dbus

expect fork
respawn

script
        # set $LANG so that messages appearing on the GUI will be translated. See LP: 875017
        if [ -r /etc/default/locale ]; then
                . /etc/default/locale
                export LANG LANGUAGE LC_MESSAGES LC_ALL
        fi
復制代碼

 

 

b)Ubuntu 13.04

不知道Ubuntu從哪個版本開始不是由NetworkManager生成resolv.conf的了,至少在13.04下是這樣的,因為resolv.conf開頭寫着這樣一句話:

# 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

說是由resolvconf生成,NetworkManager仍然存在,因為它是DHCP上網不可缺少的,但此時禁止NetworkManager啟動 已經不管用了,因為resolv.conf已經不歸它管了,我們試着看看resolv.conf與resolvconf有啥關系,查看:

hadoop@Master:~$ ll /etc/resolv.conf
lrwxrwxrwx 1 root root 29  9月 11  2013 /etc/resolv.conf -> ../run/resolvconf/resolv.conf

說明/etc/resolv.conf 其實只是一個link,它實際上指向的是 /run/resolvconf/resolv.conf,這也就解釋了為什么每次重啟都會被重寫的原因,你改的只是個link,對原文件沒有影響,而每次重啟這個link還得加載原文件的內容,所以對link的修改無效。

解決方法就是:修改真實的原文件,如下:

sudo vi /etc/resolvconf/resolv.conf.d/head

發現這個文件與/etc/resolv.conf文件一模一樣,這就對了,在里面加入你自己的nameserver即可,這樣每次重啟就不會被重寫了。

PS:網上也有人說修改/etc/resolvconf/resolv.conf.d/base這個文件也行,我沒有親自測試,感興趣的可用自己測試。

 

說了這么多,各版本的差異看來挺麻煩的,不知道最新的版本或以后的版本會不會又變樣了,其實這里有個更簡單的與版本無關的方式能夠防止resolv.conf文件被重寫,那就是方法二。

 

方法二:與版本無關

前面提到固定IP的上網方式主要是修改/etc/network/interfaces這個文件,配置IP、網關什么的,其實這里面還有個參數可以配置,那就是DNS了,對應的參數名為dns-nameservers,這里設置的優先級比resolv.conf高,也就是網絡會從這里讀取DNS配置,如果沒配置才去看resolv.conf里面的設置,因此在這里面配置DNS更簡單。

復制代碼
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0

iface eth0 inet static
address 192.168.1.151
netmask 255.255.255.0
gateway 192.168.1.2

dns-nameservers 202.38.64.1
復制代碼
 

== 重啟虛擬機網絡 ==

配置完成后,重啟網絡即可,也有好幾種方法:

sudo service networking restart 
或者
sudo /etc/init.d/networking restart

也可以重啟網卡:

sudo ifconfig eth0 down 
sudo ifconfig eth0 up

重啟網卡對別的網卡無影響,更推薦一些。

趕緊ping下www.baidu.com吧,應該可以上網了。

 

PS:當然也可以通過圖形界面network manager進行配置,但個人感覺這種方式最好,因此推薦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM