DNS 域名解析失效

前述    

    測試環境有個 API 報了一個內部服務錯誤,排查下來發現後臺 php 代碼無法解析域名,nslookup、ping 等工具則是能夠成功解析;php

    index.phpgit

###################################################################github

<?php
echo(gethostbyname('www.baidu.com'));
?>web

###################################################################apache

 

排查 1:dns 解析服務器

    因爲在 terminal 界面用命令行的方式是能夠解析的:緩存

    nslookup www.baidu.com安全

    ping www.baidu.com服務器

    /usr/local/php/bin/php -r "echo(gethostbyname('www.baidu.com'));"網絡

    上述三種方式均可以解析出域名;架構

 

排查 2:dns 公共庫權限

    測試環境 web 架構爲:apache + php 的形式,apache 啓動用戶爲 root + daemon,執行 find / -name libnss*.so 等 dns 要用到的公共庫,查看 other 用戶是否有讀取權限。

    

排查 3:php chroot 開啓

    php-fpm.ini 配置文件中有沒開啓 chroot 功能,即 PHP 的工做環境,在 web 服務器中,爲了保證安全性,有開啓 chroot 的則可能會因爲路徑問題,無法調用公共類庫而致使解析問題。

 

排查 4:dns 緩存

    在另外一臺測試服務器中,發現一樣的配置,另外一臺能夠成功解析,並且出問題的這臺服務器以前一直是能夠成功使用的,解析問題是在沒有修改的狀況下忽然出現的。

    Linux 經過 bind 服務提供 dbs 解析,客戶端處於某臺 DNS 服務器的後面,DNS 服務器經過 bind 服務,提供域名緩存和轉發功能。

    客戶端對外的 DNS 解析結果,除保留在客戶端本地的 DNS 緩存中,一樣會保留在這臺 DNS 服務器上,當咱們修改 named 提供的DNS服務時,也須要刷新緩存。bind 提供的rndc 命令能夠清空緩存的功能:

    rndc flush

可參考:https://my.oschina.net/lenglingx/blog/425020

 

智能 DNS    

    理想狀況下,各地DNS的緩存時間即爲設置的 ttl(Time To Live:域名解析在DNS服務器中存留時間) 時間,因此能夠經過設置 ttl 時間來控制DNS緩存的時間。ttl 時間設置的短,DNS 緩存過時快,在機器故障的時候很快切換到另外一臺 DNS 服務器,對用戶的影響小;可是因爲 ttl 設置的過短,緩存很快過時,要常常一層層的問域名的解析狀況,本地沒有緩存,DNS 解析時間會比較長。以上是理想狀況,真實狀況下,個別的 DNS 服務器並不聽從 ttl 時間,可能有作強制緩存多少時間,這些都沒有辦法控制。

    智能 DNS解析:
    zone 配置文件中添加一個 CNAME 記錄,首先解析到一個域名,而後再解析到 IP


    使用智能 DNS 後,用戶訪問 http://www.baidu.com 的解析狀況
    www.baidu.com. CNAME www.a.shifen.com.

    www.a.shifen.com. A 220.181.112.244
    用戶訪問 http://www.baidu.com 會通過以上的兩層解析來找到ip,第一層解析的ttl時間是由你控制的,能夠設置的長一些,使DNS緩存的久一些,下降DNS查詢時間;第二層解析的ttl時間是由智能DNS提供方來設定的,通常設定的比較短,好比2分鐘,方便故障的時候作到及時切換。

ttl 能夠在 dnspod 和萬網域名解析裏面設置;

 

DNS 污染

    摘自維基《

    域名服務器緩存污染(DNS cache pollution),又稱域名服務器緩存投毒(DNS cache poisoning),是指一些刻意製造或無心中製造出來的域名服務器封包,把域名指往不正確的IP地址。通常來講,在互聯網上都有可信賴的域名服務器,但爲減低網絡上的流量壓力,通常的域名服務器都會把從上游的域名服務器得到的解析記錄暫存起來,待下次有其餘機器要求解析域名時,能夠當即提供服務。一旦有關域名的局域域名服務器的緩存受到污染,就會把域名內的電腦導引往錯誤的服務器或服務器的網址。

    域名服務器緩存污染多是由於域名服務器軟件的設計錯誤而產生,但亦可能由別有用心者透過研究開放架構的域名服務器系統來利用當中的漏洞。

    爲防止局域的域名服務器緩存污染除了要定時更新服務器的軟件之外,可能還須要人手變動某些設定,以控制服務器對可疑的域名封包做出篩選。

參考 github 裏面的 https://github.com/lifetyper/FreeRouter/wiki

相關文章
相關標籤/搜索