1. 程式人生 > >解決:connect Network is unreachable 和 ping unknown host www.baidu.com

解決:connect Network is unreachable 和 ping unknown host www.baidu.com

  • 問題:

在虛擬機器上載入了兩個linux系統,一個Ubuntu,一個TD-EXPRESS。很納悶,Ubuntu那邊的網路順暢,ping外面的主機,ping www.baidu.com 都可以ping通,而TD-EXPRESS 那邊只能ping 同一個網段內的,ping 其他ip 像 8.8.8.8就出現了connect Network is unreachable錯誤,ping 其他主機像 www.baidu.com 就出現了 ping unknown host www.baidu.com 錯誤。

  • 問題分析

    • 只能ping通內網: 說明閘道器沒有設定好,不能通過閘道器將請求轉發到路由器
    • ping其他遠端主機出現unknown host:說明DNS伺服器有問題,不能將主機名解析成ip地址,所以更不用說訪問了
  • 問題解決

    • 虛擬機器上的網路配置

      • 開啟虛擬網路編輯器
        這裡寫圖片描述

      • 做如下設定,選用NAT方式共享主機IP,記住,我們的子網號是192.168.8.0,那麼子網下面的主機,理論上應該從192.168.8.1~192.168.8.254 這個範圍裡面選 (因為192.168.8.0表示網路號,而192.168.8.255表示廣播地址,不可以用做子網主機的ip)
        這裡寫圖片描述

      點選“NAT設定”,設定閘道器為192.168.8.2 ,後面需要用到
      這裡寫圖片描述

  • 列表內容

    • 兩個主機的IP設定

      • 第一個主機(Ubuntu)ip的設定
        ubuntu配置的資訊主要在/etc/network/interfaces這個檔案下,具體配置方法這裡省略,可參考其他部落格
        下面展示配置好的結果:
        這裡寫圖片描述
        重要的一點是:其ip必須滿足我們之前的說的那個子網的範圍內,我們設定為192.168.8.130

      • 第二臺主機(TD_EXPRESS)ip的設定
        編輯這個 /etc/sysconfig/network/ifcfg-eth0 檔案,將ip設定為192.168.8.143,子網號設定為255.255.255.0
        這裡寫圖片描述

    • 連通性測試
      使用ping命令測試連通結果,發現Ubuntu正常訪問外部主機,而TD-EXPRESS出現以上談及的兩個錯誤,即:connect Network is unreachable 和 ping unknown host www.baidu.com

    • route命令檢視兩個主機的路由表,發現問題主機缺少預設的路由器,即圖片中的default那一條
      這裡寫圖片描述

    這裡寫圖片描述
    按照個人理解:預設閘道器/路由就是,當主機想訪問某個網路是,就去路由表尋找對應的閘道器,主機把資料交給閘道器,閘道器代為把請求轉發給對應的路由器。
    像第二個路由表中的第一條,192.168.8.0 * 255.255.255.0 U 0 0 eth0 ,表示的就是在訪問192.168.8.0 這個網路時,需要把它提交給閘道器*,而*表示就是在本網路內訪問,可以直接訪問,不需要路由器代為轉發。
    而像第一個路由表中的第一條 ,表示主機在路由表中查詢不到其相想要訪問的網路是,就採用這個閘道器,即先把資料交給192.168.8.2這個閘道器,其代為轉發到路由器,這樣子才能訪問外網。只有通過路由器的轉發才可以訪問外網。
    在第二主機中之所以出現只能ping通內網的主機,而訪問外網失敗,就是因為主機在路由表中找不到對應的網路,比如8.8.8.8就不在其路由表內容,拿它找不到,它就不知道怎麼做了。而有了一條default之後,它找不到對應的閘道器時,就會預設提交給default後面的閘道器!
    有關路由的知識可參見部落格,寫得很詳細:
    http://blog.csdn.net/chenlycly/article/details/52141854

    • 新增預設路由/閘道器
route add default gw 192.168.8.2  

新增完成後,我們再次檢視路由表:
這裡寫圖片描述
發現多了一條預設路由。
ping 8.8.8.8
這裡寫圖片描述
可以成功ping通

但是值得注意的是,這樣子新增路由之後,重啟之後又會沒有的。所以採用如下這個方法在機器啟動時自動新增路由:
http://www.phpernote.com/linux/1247.html
這個部落格將到的是3種開機啟動的方法,我用的是第二種:
將寫好的指令碼(.sh檔案)放到目錄 /etc/profile.d/ 下,系統啟動後就會自動執行該目錄下的所有shell指令碼。
這裡寫圖片描述
指令碼的內容很簡單,主要就是剛才那條命令:
這裡寫圖片描述
寫完儲存就可以了,之後重啟就好自動新增預設路由!

  • 解決unknown host www.baidu.com 問題
    之前測試了ping 8.8.8.8 可以ping通,但是ping www.baidu.com 卻出現了unknown host的問題
    在網上查詢相關的問題解決方法,大同小異,基本上都是在/etc/resolv.conf 下加入常見的域名伺服器
nameserver 202.98.96.68  
nameserver 61.139.2.69  

但是依舊不能解決問題……
最後在某度知道 裡面找到了一個問答,居然把問題解決了。
在那個檔案中第一行加上

nameserver 192.168.8.2 

這個192.168.8.2 也就是跟我們剛剛設定的預設閘道器相同

最後最後,所有問題都解決了!