Ubuntu 能PING IP但不能PING主機域名的解決方法

-------------------------------------------------------------------------------數據庫

-------------------------------------------------------------------------------服務器

vi /etc/nsswitch.conf網絡

hosts: files dnsdom

networks: files分佈式

改爲:函數

hosts: files dns wins性能

networks: files測試

若是不同的話,就在hosts:原來那行後面加個wins 就好了。.net

-------------------------------------------------------------------------------code

-------------------------------------------------------------------------------

 

最近碰到了這麼一個問題: ping一個域名domain_name的時候提示」ping: unknown host domain_name「,可是ping域名對應的IP地址 (使用host或nslookup獲取) 卻沒有問題。

so-name, real-name && linker-name
  Linux共享庫 (shared object) 的real-name命名規則爲: libname.so.x.y.z。其中x表示主 (Major) 版本號,不一樣主版本號的庫之間是不兼容的;y表示次 (Minor) 版本號,它表示庫的增量升級,高的次版本號的庫向後兼容 (Backwards Compatible) 低的次版本號的庫;z表示發佈 (Release) 版本號,表示庫的一些修正,性能的改進等。

  共享庫的so-name是在real-name的基礎上去掉次版本號和發佈版本號。so-name文件通常都是一個指向對應的real-name文件的一個軟連接。

  共享庫的linker-name是應用程序連接的時候的搜索名,一般是so-name的一個軟連接。

  運行ldconfig時,系統會更新全部的軟連接,使它們指向最新版本的共享庫。

libc && glibc
  標準C庫 (the standard C library) 實現了ISO C標準,包含了一套全部C程序均可以使用的函數。libc一般被用做the standard C library的簡寫。

  libc也被用做一個標準C庫的實現的名字。在19世紀90年代早期,Linux內核的開發者把glibc 1.x獨立了出來 (forked glibc),並把它稱爲」Linux libc」,也簡稱爲libc。Linux libc主要發佈了2, 3, 4, 5四個版本。

  1997年,FSF發佈了glibc 2.0,它對POSIX標準有更好的支持,而且代碼的可移植性更好。所以,如今全部主要的Linux發行版都是使用glibc

  Linux libc的最後的so-name是libc.so.5。所以後來的glibc 2.x使用的so-name是libc.so.6。

網絡信息服務(Network Information Service, NIS)
  NIS也曾被稱YP (Yellow Pages),它是一個基於RPC (Remote Procedure Call Protocol) 的客戶機/服務器系統,容許一個NIS域中的一組機器共享一系列配置文件。在NIS環境中,有主服務器、從服務器和客戶機三種類型的主機。服務器的做用是充當主機配置信息的中央數據庫。主服務器上保存着這些信息的權威副本,而從服務器則是保存這些信息的冗餘副本。客戶機依賴於服務器向它們提供這些信息。

DNS Resolver
  一個域名 (Domain Name) 由一個或多個標籤 (label) 組成,標籤之間用點隔開。最右端的標籤表明頂級域 (top-level domain,TLD)。DNS (Domain Name System, 域名解析系統) 是互聯網的一項核心服務,它是一個分佈式層次化的系統,可以將域名和IP地址相互映射。DNS經過容許一個域名服務器把它的一部分域名解析服務委託給子服務器而實現了一種層次化的域名空間。DNS由解析器 (Resolver) 和域名服務器兩部分組成。

  DNS系統的客戶端被稱爲DNS解析器 (DNS Resolver)。在Linux系統上,解析器並非特指某個應用程序,而是指解析器庫。這個庫包含了標準C庫中的一系列函數,最主要的兩個函數是gethostbyname()gethostbyaddr()。能夠對DNS解析器進行配置,使得它們查找/etc/hosts中的信息、查詢DNS服務器或者使用網絡信息服務系統的配置信息。libc使用/etc/host.conf配置文件;glibc使用/etc/nsswitch.conf配置文件。

  /etc/host.conf中主要的選項有:(1) order指定域名解析的查找順序,其中hosts表示/etc/hosts配置文件;bind表示查詢DNS服務器;nis表示查詢NIS系統的配置信息。(2) multi [on|off]指定/etc/hosts中的主機是否能夠有多個IP地址。

  /etc/nsswitch.conf是名字服務開關 (name service switch) 的配置文件,其中對應DNS解析器的數據庫名字是hosts:。它的主要選項有:(1) dns表示使用DNS解析地址 (2) files表示使用/etc/hosts/etc/network配置文件 (3) nis或nisplus。

  DNS服務器在/etc/resolv.conf中配置。

ping
  ping命令用來測試網絡上的一臺主機是否可以連通。ping命令向目標主機發送ICMP (Internet Control Message Protocol) 回聲請求消息而後等待目標主機的迴應,與此同時計算消息從源主機到目標主機的往返時間 (round-trip time,RTT)。

問題解決
  首先,可以ping域名對應的IP,顯然不多是服務器禁止了ping服務 (使用防火牆等)。host和nslookup可以返回域名對應的IP地址,那麼/etc/resolv.conf中的DNS設置也是沒有問題的。

  事實上,使用ping命令處理一個域名的時候,是使用gethostbyname()函數返回對應的主機信息 (參加源代碼); 而host和nslookup則是直接使用/etc/resolv.conf中的DNS服務器。所以,須要查看/etc/nsswitch.conf中的hosts:數據庫是否打開了dns選項。

相關文章
相關標籤/搜索