2022-11-05 分類(lèi): 網(wǎng)站建設(shè)
你是否是一個(gè)使用國(guó)外 DNS 的中國(guó)網(wǎng)民?你是否發(fā)現(xiàn)使用國(guó)外 DNS 之后訪問(wèn)某些國(guó)內(nèi)網(wǎng)站奇慢無(wú)比?這不是 DNS 慢,而是電信到聯(lián)通的線路太慢。如果你愿意小小地折騰一下,那么跟隨本文,你可以解決這一問(wèn)題。
一、為什么要用國(guó)外 DNS
由于眾所周知的問(wèn)題,國(guó)內(nèi) DNS 服務(wù)器解析國(guó)外網(wǎng)站會(huì)遭到 DNS 污染和投毒,使之解析到完全虛構(gòu)的 IP 上,造成「開(kāi)了 VPN 也沒(méi)法訪問(wèn) Twitter 或 Facebook」等問(wèn)題。以下是一個(gè)例子:
wzyboy@vermilion:~$ dig twitter.com @8.8.8.8 +short
199.59.148.82
199.59.149.230
199.59.148.10
wzyboy@vermilion:~$ dig twitter.com @221.228.255.1 +short
93.46.8.89
Twitter 正確的 IP 地址應(yīng)該是 199.59.148.0/24 里的那幾個(gè),但是如果用 221.228.255.1 這臺(tái)中國(guó)電信的 DNS 服務(wù)器查詢(xún),查到的就是不知道什么鬼地址了,地理信息是在意大利,亂七八糟的。正是因?yàn)檫@樣的 DNS 解析不正確的情況出現(xiàn),不少人轉(zhuǎn)而使用了國(guó)外的 DNS 服務(wù)器,如老牌的 OpenDNS 以及這幾年新崛起的好記又好用的 Google Pulic DNS 即 8.8.8.8 和 8.8.4.4。使用它們進(jìn)行查詢(xún),再配合以 VPN 或者瀏覽器的遠(yuǎn)程 DNS 解析,便可避免 DNS 污染的情況出現(xiàn),從而解析出正確的地址。
此外,拒絕使用電信的 DNS 服務(wù)器,還可以避免煩人的「114 上網(wǎng)導(dǎo)航」頁(yè)面……
二、為什么使用國(guó)外 DNS 會(huì)「慢」
我是在「慢」上加了引號(hào)的,因?yàn)檫@其實(shí)不是國(guó)外 DNS 慢,而是你要訪問(wèn)的網(wǎng)站的 CDN 分配錯(cuò)誤,慢。由于國(guó)內(nèi)各大運(yùn)營(yíng)商之間的主干線路帶寬太窄,所以導(dǎo)致「最遠(yuǎn)的距離是從電信到網(wǎng)聯(lián)通」,電信用戶(hù)訪問(wèn)聯(lián)通的服務(wù)器非常慢,聯(lián)通用戶(hù)訪問(wèn)電信的服務(wù)器也非常慢,相信這都是大家有體驗(yàn)的。因此,國(guó)內(nèi)不少網(wǎng)站都用了雙線 CDN,在電信的機(jī)房里放點(diǎn)服務(wù)器,再在聯(lián)通的機(jī)房里放點(diǎn)服務(wù)器。運(yùn)用智能 DNS 技術(shù),當(dāng)你訪問(wèn)網(wǎng)站的時(shí)候,DNS 根據(jù)你的來(lái)源 IP 判斷你是電信用戶(hù)還是聯(lián)通用戶(hù),然后再返回相應(yīng)的 IP 地址,這樣你會(huì)訪問(wèn)到就近的、同運(yùn)營(yíng)商的服務(wù)器,訪問(wèn)速度就大大提升了。而如果使用國(guó)外的 DNS 的話(huà),你的查詢(xún)來(lái)源來(lái)自國(guó)外,國(guó)內(nèi)網(wǎng)站的 DNS 無(wú)法判斷你是電信用戶(hù)還是聯(lián)通用戶(hù),就胡亂分配你一個(gè)服務(wù)器。比如我是一個(gè)江蘇電信的用戶(hù),但當(dāng)我訪問(wèn)淘寶網(wǎng)的時(shí)候,淘寶的 DNS 把我解析到青島聯(lián)通的服務(wù)器上,奇慢無(wú)比。所以:
很多人認(rèn)為 Google Public DNS, OpenDNS 等「慢」,主要不是查詢(xún)慢,而是電信到聯(lián)通之間太慢。
當(dāng)然了,如果硬要比較查詢(xún)的話(huà),倒也是會(huì)慢很少一點(diǎn)的:
;; 使用 8.8.8.8 解析 www.google.com 耗時(shí) 79 毫秒
;; Query time: 79 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Sep 6 17:20:37 2012
;; MSG SIZE rcvd: 143
;; 使用中國(guó)電信 221.228.255.1 服務(wù)器解析 www.google.com 耗時(shí) 6 毫秒
;; Query time: 6 msec
;; SERVER: 221.228.255.1#53(221.228.255.1)
;; WHEN: Thu Sep 6 17:20:44 2012
;; MSG SIZE rcvd: 284
別看 6 毫秒和 79 毫秒差別很大的樣子,但是人類(lèi)是很難感覺(jué)出來(lái)的,而且,這只是查詢(xún)時(shí)間,與實(shí)際的訪問(wèn)速度無(wú)關(guān),就算你一整天都在刷 www.google.com,也就每小時(shí)慢個(gè)幾百毫秒的樣子,根本感覺(jué)不出來(lái)。真正慢的原因,還是上文所說(shuō)的「電信到聯(lián)通」的問(wèn)題。
三、問(wèn)題的解決思路
現(xiàn)在問(wèn)題明確了:使用國(guó)外 DNS 之后,查詢(xún)來(lái)源變成國(guó)外的 IP,使用了 CDN 加速的國(guó)內(nèi)網(wǎng)站的 DNS 會(huì)無(wú)法判斷你的來(lái)源,胡亂給你分配一個(gè)地址,如果不是同一個(gè)運(yùn)營(yíng)商的,訪問(wèn)速度便會(huì)很慢。
那解決方案也就出現(xiàn)了:讓國(guó)內(nèi)網(wǎng)站的 DNS 服務(wù)器知曉你的來(lái)源,從而給你分配正確的服務(wù)器 IP。于是 Google 起草了一個(gè)專(zhuān)有協(xié)議,叫 EDNS,在 DNS 查詢(xún)請(qǐng)求中包含源地址,這樣淘寶就知道查詢(xún)來(lái)源不是 Google 服務(wù)器,而是電信的某用戶(hù),就不會(huì)把你扔到聯(lián)通服務(wù)器上了 。聽(tīng)起來(lái)很美好是吧?不過(guò)這個(gè)協(xié)議不開(kāi)放,目前幾乎沒(méi)有人用,所以,問(wèn)題絲毫沒(méi)有解決。
新思路是:訪問(wèn)那些會(huì)因 CDN 加速解析錯(cuò)誤而極其緩慢國(guó)內(nèi)網(wǎng)站的時(shí)候,直接向國(guó)內(nèi)的服務(wù)器發(fā)送請(qǐng)求,讓 DNS 知曉你的來(lái)源,給你分配個(gè)正確的 IP。訪問(wèn)其他網(wǎng)站的時(shí)候,再通過(guò)國(guó)外的 DNS 查詢(xún)。
聽(tīng)起來(lái)很簡(jiǎn)單的樣子,實(shí)現(xiàn)起來(lái)也不難:用 dnsmasq 在本地搭個(gè) DNS 緩存服務(wù)器,規(guī)定哪些域名用哪個(gè)服務(wù)器查就好了。
四、安裝及配置 dnsmasq
安裝 dnsmasq
dnsmasq 是一個(gè)非常輕量的 DNS 緩存及 DHCP 服務(wù)器,在我的 Arch Linux 上只占用了 368 KiB 的磁盤(pán)空間,相比功能極其強(qiáng)大的 BIND9 來(lái)說(shuō)小多了(BIND9 的安裝體積是 6.23 MiB)。不光是體積小,它的功能也很專(zhuān)一,配置起來(lái)也是十分方便的,五分鐘就可以搞定。
Ubuntu 12.04 及之后的版本應(yīng)該自帶了 dnsmasq。如果沒(méi)有,可以使用 sudo apt-get install dnsmasq 安裝。Arch Linux 直接 sudo pacman -S dnsmasq 即可。我的筆記本電腦需要給手機(jī) DHCP 及 IP 轉(zhuǎn)發(fā)用,因此早就安裝了 dnsmasq,但是直到今天才想起這么用它……
配置 dnsmasq
dnsmasq 的各參數(shù)可以通過(guò) man dnsmasq 查看,配置文件中也有許多清晰明了的注釋。默認(rèn)的配置文件位于 /etc/dnsmasq.conf,打開(kāi)它,可以更改這幾個(gè)地方:
no-resolv
no-poll
server=8.8.8.8
server=8.8.4.4
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
server=/tbcache.com/114.114.114.114
server=/tdimg.com/114.114.114.114
第一行的 no-resolv 和第二行的 no-pull 讓 dnsmasq 不要通過(guò) /etc/resolv.conf 確定上游服務(wù)器,也不要檢測(cè) /etc/resolv.conf 的變化(因?yàn)槲覀兙褪且帽緳C(jī)當(dāng)服務(wù)器嘛),接下來(lái)兩行指定 dnsmasq 默認(rèn)查詢(xún)的上游服務(wù)器,此處以 Google Public DNS 為例,喜歡用 OpenDNS 的也可以改 OpenDNS。接下來(lái)就是規(guī)定一張名單了,把一些國(guó)內(nèi)網(wǎng)站的域名寫(xiě)在這里即可。比如 server=/cn/114.114.114.114 便是把所有 .cn 的域名全部通過(guò) 114.114.114.114 這臺(tái)國(guó)內(nèi) DNS 服務(wù)器來(lái)解析,你也可以改成其他的國(guó)內(nèi) DNS 比如你的運(yùn)營(yíng)商提供的 DNS。接下來(lái)四行是淘寶的幾個(gè)域名,讓它們也通過(guò)國(guó)內(nèi)的 DNS 服務(wù)器解析。
這樣分流操作之后,默認(rèn)所有域名都通過(guò) 8.8.8.8 和 8.8.4.4 解析,但是所有的 .cn 域名以及淘寶的域名通過(guò) 114.114.114.114 這臺(tái)國(guó)內(nèi) DNS 服務(wù)器解析。當(dāng)然,除了淘寶網(wǎng),你也可以添加更多的域名,根據(jù)自己的喜好,把經(jīng)常訪問(wèn),但是使用國(guó)外服務(wù)器解析到很慢的服務(wù)器上的網(wǎng)站域名都可以添加進(jìn)去,不過(guò):如果這個(gè)網(wǎng)站本身就只能一臺(tái)服務(wù)器,沒(méi)有 CDN 加速,那再怎么添加也是無(wú)濟(jì)于事的,得讓網(wǎng)站管理員去買(mǎi)雙線機(jī)房……另外,在寫(xiě)這篇文章的時(shí)候,發(fā)現(xiàn) @felixonmars 維護(hù)了一張國(guó)內(nèi)常用的、但是通過(guò)國(guó)外 DNS 會(huì)解析錯(cuò)誤的網(wǎng)站域名的列表,據(jù)他所說(shuō),這是他在公司里部署這一套東西之后,公司里其他人報(bào)怨「慢」的網(wǎng)站域名收集來(lái)的,應(yīng)該囊括了絕大多數(shù)有此問(wèn)題的網(wǎng)站,值得依賴(lài),歡迎選用。如果覺(jué)得直接把這么多域名加在 /etc/dnsmasq.conf 里不爽的話(huà),可以在 dnsmasq.conf 里把 conf-dir=/etc/dnsmasq.d 這一行取消注釋?zhuān)缓蟀言?/etc/dnsmasq.d 里弄點(diǎn)列表。比如我就是把 @felixonmars 維護(hù)的列表放在 /etc/dnsmasq.d/china.conf 里。
配置好之后,保存,Ubuntu 可用 sudo service dnsmasq restart,Arch Linux 可用 sudo rc.d restart dnsmasq 重啟 dnsmasq。如果沒(méi)有錯(cuò)誤的話(huà),這時(shí)本地的 dnsmasq 已經(jīng)跑起來(lái)了。
測(cè)試 dnsmasq
測(cè)試一下:
wzyboy@vermilion:~$ dig www.taobao.com @8.8.8.8 +short
www.gslb.taobao.com.danuoyi.tbcache.com.
scorpio.danuoyi.tbcache.com.
119.167.195.251 → 這是淘寶的青島聯(lián)通的服務(wù)器,我用江蘇電信連奇慢無(wú)比
119.167.195.241 → 這也是青島聯(lián)通
wzyboy@vermilion:~$ dig www.taobao.com @127.0.0.1 +short
www.gslb.taobao.com.danuoyi.tbcache.com.
scorpio.danuoyi.tbcache.com.
222.186.49.251 → 解析到常州電信了,快!
61.155.221.241 → 這是上海電信
wzyboy@vermilion:~$ dig twitter.com @127.0.0.1 +short
199.59.150.7 → Twitter 還是用 8.8.8.8 解析的,所以解析出來(lái)是未經(jīng)污染的正確地址
199.59.148.82
199.59.149.230
效果很明顯,這時(shí)可以把本地的 DNS 設(shè)為 127.0.0.1 了。大部分 Linux 用戶(hù)直接更改 /etc/resolv.conf 的內(nèi)容為
nameserver 127.0.0.1
即可。Ubuntu 12.04 及以后的用戶(hù),可能需要對(duì) resolv.conf 做一些手腳,具體參考這里。如果不愿意改的話(huà),可能每次聯(lián)網(wǎng)都要手工改一次 resolv.conf,或者在 NetworkManager 中手工指定 127.0.0.1 為 DNS。DHCP 用戶(hù)的話(huà),可以通過(guò) /etc/resolv.conf.head 之類(lèi)的文件來(lái)保證 127.0.0.1 在第一行。
這樣配置完之后,如果你沒(méi)有在 dnsmasq 里限定查詢(xún) IP,那么你的家人、朋友們也是可以把你的電腦作為 DNS 服務(wù)器的。如果你本地是 VPN 全局翻墻的話(huà),需要把你選擇的國(guó)內(nèi) DNS 服務(wù)器通過(guò)路由表加入直連的范圍內(nèi)。當(dāng)然,已經(jīng)使用 chnroutes 的就不需要了。
五、我不是 Linux 用戶(hù)怎么辦?
如果你是 Windows 用戶(hù)
參考這個(gè)問(wèn)題,去配個(gè) BIND9 的 Windows 版本試試吧?;蛘呖梢匝b個(gè) dnsmasq 的 Windows 代替品。
如果你是 Mac OS X 用戶(hù)
Mac OS X 的 resolver 比較獨(dú)特,似乎有比較簡(jiǎn)陋的解決方法,參考這篇文章。另外,OS X 似乎也是自帶 named 的,所以……
其實(shí)還有更通用的方法
聽(tīng)說(shuō)過(guò) VirtualBox 嗎?開(kāi)源、免費(fèi)、強(qiáng)大的虛擬機(jī)軟件??梢匝b個(gè)最配置非常低下的虛擬機(jī),比如 32 MiB 內(nèi)存甚至 16 MiB 內(nèi)存的虛擬機(jī)(要知道 64M 內(nèi)存的 Linux 已經(jīng)可以跑 WordPress 這龐然大物了),裝個(gè)最簡(jiǎn)單的小 Linux,比如只有 37M 的 Ubuntu Core,然后裝上依賴(lài)包幾乎沒(méi)有的 dnsmasq,再把 Windows / OS X 的 DNS 設(shè)為虛擬機(jī)的 IP 地址,于是便可以用了。在當(dāng)今內(nèi)存動(dòng)輒 4 GiB 的情況下,拿 16MiB 內(nèi)存出來(lái)?yè)Q個(gè)更舒暢的上網(wǎng)體驗(yàn),還是很不錯(cuò)的。
六、尾聲
祝各位讀者折騰成功,上網(wǎng)愉悅。
補(bǔ)充:其實(shí)這樣本地 DNS 緩存服務(wù)器,還有這樣的好處:
wzyboy@vermilion:~$ dig wzyboy.im
;< >DiG 9.9.1-P2 < >wzyboy.im
;; global options: +cmd
;wzyboy.im. IN A
wzyboy.im. 103 IN A 198.244.51.13
;; Query time: 307 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep 6 21:32:07 2012
;; MSG SIZE rcvd: 54
wzyboy@vermilion:~$ dig wzyboy.im
;< >DiG 9.9.1-P2< >wzyboy.im
;; global options: +cmd
;wzyboy.im. IN A
wzyboy.im. 95 IN A 198.244.51.13
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep 6 21:32:15 2012
;; MSG SIZE rcvd: 43
看出來(lái)了吧?
當(dāng)前標(biāo)題:使用國(guó)外DNS造成國(guó)內(nèi)網(wǎng)站訪問(wèn)慢的解決方法
標(biāo)題URL:http://aaarwkj.com/news19/210869.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、電子商務(wù)、網(wǎng)頁(yè)設(shè)計(jì)公司、動(dòng)態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容