一、出現問題的原因
最近由於linux需要使用外網,發現ping不通地址,經過一番查找分析后發現是DNS服務配置丟失,在這里有兩種方法可以解決該問題。
![]()
1:你可以手動修改/etc/sysconfig/network-scripts/ifcfg-lo(這是我linux上的網卡,一般來說系統上第一塊網卡默認是/etc/sysconfig/network-scripts/ifcfg-eth0)的進行DNS配置,
使用vim到/etc/sysconfig/network-scripts/ifcfg-lo修改添加如下:
PEERDNS=no
DNS1=192.168.1.1
DNS2=192.168.1.2
然后wq!保存退出,再使用vim指令在/etc/resolv.conf里添加配置(一說resolv.conf是一個link文件會隨着ifcfg-eth0里DNS配置自動修改):
nameserver 192.168.1.1
nameserver 192.168.1.2
2:使用dhclient指令自動獲取ip地址(其實原理是一樣的,下面詳細介紹第二種方法)
二、問題詳解
1:文件說明
/etc/hosts hostname對應的IP存檔
/etc/resolv.conf 當需要解析域名時,讀取該文件獲取DNS 服務器IP
resolv.conf的關鍵字主要有四個,分別是:
/etc/nsswitch.conf 這個檔案決定先使用/etc/hosts還是/etc/resolv.conf的設定
當電腦要訪問一個域名時,要將域名翻譯成IP地址。
這個過程通常會先訪問/etc/hosts,看本地是否有對應的hostname -- IP記錄。
如果沒有就去查詢DNS服務器,通過/etc/resolv.conf 得到dns服務器地址
當在eth接口啟用DHCP后,本地resolv.conf文件將被修改,resolv.conf文件中的DNS地址將被改為從DHCP獲取到的地址。這種從DHCP獲得的DNS即是Peer DNS。 啟用DHCP后即便修改/etc/resolv.conf,不久又恢復成原樣。
如何解決這個問題?此時,你得要在 /etc/sysconfig/network-scripts/ifcfg-eth0 等相關檔案內,增加一行: PEERDNS=no,然后重新啟動網絡即可
2:使用dhclient指令自動獲取ip地址
dhclient指令的使用:
語法:dhclient(選項)(參數)
選項:
0:指定dhcp客戶端監聽的端口號;
-d:總是以前台方式運行程序;
-q:安靜模式,不打印任何錯誤的提示信息;
-r:釋放ip地址。
參數:
網絡接口:操作的網絡接口
實例:
dhclient -r #釋放IP
dhclient #獲取IP
使用dhclient指令獲取ip,在這里需要使用sudo權限進行操作

這里普及一下sudo和權限的操作,sudo權限需要切換到root用戶進行授權
a.你可以vim 進入 /etc/sudoers 找到如下位置進行增加:

在后面添加 NOPASSWD 則不需要輸入密碼
b.修改文件或目錄的權限
chmod u+-=rwx 文件名或者目錄
g+-=rwx 文件名或者目錄
o+-=rwx 文件名或者目錄
(或用數字授權ugo=》7 5 1 rwx =》4 2 1)
將sudoer添加寫權限: chmod u+w /etc/sudoers
追加如下內容:echo "hadoop ALL=(ALL)NOPASSWD;ALL">>/etc/sudoers
收回寫權限:chmod u-w /etc/sudoers
dhclient的指令詳解見: https://blog.csdn.net/u011857683/article/details/83722466
3:重啟網絡服務:service network restart
4:查看dns解析情況

三、結果
1:再次ping一個地址:

2:我們再用cat指令查看/etc/resolv.conf 和/etc/sysconfig/network-scripts/ifcfg-lo的內容發現:
1) /etc/resolv.conf里面多了個search(search 參數指定域名查找順序)和nameserver(本機的網關地址(路由器的地址))
2)/etc/sysconfig/network-scripts/ifcfg-lo多了個BROADCAST(廣播地址)和ONBOOT=yes(設置為網卡自動開啟)

問題已解決!
