我在vmware上使過Ubuntu 6、7和8,它們都存在這樣一個問題:通過DHCP,能夠取到DNS服務器地址,但是不起作用。結果就是導致域名不能解析,除非直接使用IP,否則無法訪問互聯網。
解決辦法就是,不要用DHCP,直接指定靜態IP。具體操作:
sudo sim /etc/resolv.conf
可以看到這個文件存放了取回的DNS服務器地址。把前幾個地址刪掉,只剩下最後一個,也就是當前網絡的網關的地址,在我的機器上是:
search domain
nameserver 192.168.1.1
然後
sudo vim /etc/network/interfaces
把auto eth0部分的內容修改為:
auto eth0
iface eth0 inet static
address 192.168.1.110
netmask 255.255.255.0
gateway 192.168.1.1
最後重啟網絡:
sudo /etc/init.d/networking restart
再ping一下外網,就沒問題了。
但是,過一段時間以後又會連接不上,這時候再查看/etc/resolv.conf,發現又被修改回去了。這時候,只能把/etc/resolv.conf設成只讀,讓別的程序改不了。從網上找到的辦法是:
sudo chattr +i /etc/resolv.conf
但在我的機器上報錯:
chattr: Inappropriate ioctl for device while reading flags on /etc/resolv.conf
我直接用
sudo chmod a-w /etc/resolv.conf
也沒有問題。
防止/etc/resolv.conf被改寫,有幾種不同的辦法,見
http://blog.csdn.-net/xport/archive/2007/05/03/ -1595769.aspx
至於導致這個問題的原因,我開始以為是vmware和ubuntu的兼容性問題,後來在網上一找,無數人遇到過同樣的問題,不運行在vm上的也有,甚至在FreeBSD上也有。有人說這是nat環境下的問題,但我的vm沒有使用nat,而是直接通過bridge連接到家庭局域網。有人歸結為Ubuntu的bug,如果是這樣話,經過這麼多版本還沒有修正,也太過分了。但同一環境下的Fedora 6確實沒有這個問題。