譯者 | 范曉波
審校 | 孫淑娟 梁策
如果你在過去幾年里已經聽說了很多關于“云”的討論,那么你可能也聽說過關于“邊緣側”一些相關概念。
從邊緣計算的概念可以看出云是有邊界的。要連接到云的這些邊界,你的數據必須與云提供的物理數據中心之一連接。在一些配置下,將數據從用戶計算機傳輸到服務器群集可能很快,但它對地理位置和網絡結構的依賴程度很大。云本身可以盡可能快速和強大,但它無法抵消你的數據進行往返所需的時延。
答案就是使用區域網絡和云的邊緣側。當在邊緣的服務器上進行初始化服務或計算時,它會加快用戶與云的交互速度。
根據同樣的原理,你可以通過在家用服務器上運行一些服務來創建自己的邊緣側,以最大限度地減少往返時延。不要讓特殊術語嚇到你。邊緣計算可能像物聯網設備或運行一個服務連接到聯邦服務頗為特別有用且簡單的改變,你就可以使你的家用或企業網絡性能得到增強,即運行DNS緩存服務。
什么是域名解析?
域名系統(DNS)使我們能夠將服務器的IP地址轉換為像opensource.com這樣友好的網站名稱,無論他們是上云服務還是沒有上云的服務。
每個域名的背后都是一串數字,而名字是來方便人們的,因為他們更有可能記住幾個單詞,而不是一串數字。當你在Web瀏覽器中鍵入example.com內容時,Web瀏覽器會靜默地通過端口53向 DNS 服務器發送請求,去引用域名example.com的注冊地址,然后返回根據該域名分配的最后一個已知IP地址。
這是從你的計算機到互聯網的一次往返。
有了正確的IP地址,你的Web瀏覽器就會發出第二個請求,這次是用IP地址而不是用域名直接訪問你的目的地址。
這是另一次往返。
更糟糕的是,你的計算機(和你的配置有關)也可能會向你本地網絡上指定DNS服務器發送域名請求。
你可以使用本地緩存切斷所有這些額外的流量。在你的網絡上運行DNS緩存服務時,一旦你網絡上的任何一臺設備獲得一個域名對應的IP地址,該IP地址就會被存儲在本地,因此你的網絡就不再需要再次請求這個地址;此外,運行你自己的DNS緩存服務器還可以屏蔽廣告,而且通常也能用一些互聯網的一些底層技術控制你的網絡上的任何設備進行交互。
在Linux上安裝Dnsmasq
使用包管理器安裝 Dnsmasq
在 Fedora、CentOS、Mageia 和類似系統上:
安裝命令:
$ sudo dnf install dnsmasq dnsmasq-utils
在Debian和基于Debian的系統上,請使用apt方式代替dnf。
配置Dnsmasq
Dnsmasq的默認配置文件中有許多選項。
它的默認配置文件的位置在/etc/dnsmasq.conf下,注釋很完善。因此你可以通過閱讀它,選擇適合你網絡的配置。
以下是我喜歡的一些選項。
保存你的本地域在本地:
#不轉發純名稱(沒有點分格式或部分域名)
domain-needed
#不轉發非路由地址空間中的地址
bogus-priv
忽略來自常見廣告網站的內容。以下語法將第一個正斜杠之間的字符串替換為尾部的地址:
#替換廣告網站域名用一個沒有廣告的ip地址
address=/double-click.net/127.0.0.1
設置緩存大小。默認建議是150,但我不覺得150個網站足夠。
#替換廣告網站域名用一個沒有廣告的ip地址
address=/double-click.net/127.0.0.1
查找 resolve.conf
在大多數 Linux 系統上,systemd的reslved服務管理配置文件/etc/resolv.conf,該文件控制你的計算機可以訪問哪些DNS服務器進行IP地址解析。
您可以禁用resolved并單獨運行dnsmasq,也可以同時運行它們,指向其自己的解析文件。
禁用:resolved
$ sudo systemctl disable --now systemd-resolved
或者,同時運行它們:
在這個示例中,home.local是我給定的一個要么是DHCP,要么是本地的域名,所有的這些設備都在我的家用網絡里,enterprise 和 yorktown是我的家用服務器,通過在此處列出它們及其本地IP地址,我就能借助dnsmasq通過域名連接他們。最后,這些域名服務項目指向互聯網上已知的比較好的域名服務器。你可以使用此處列出的名稱服務器,也可以使用ISP提供的域名服務器或你喜歡的任何公共域名服務器。
在你的dnsmasq.conf文件中,設置resolv-file的值為resolvmasq.conf:
resolv-file=/etc/resolvmasq.conf
啟動dnsmasq
某些發行版可以安裝后自動啟動dnsmasq。別的版本當你準備好的時候,你可以自己啟動它。無論哪種方式,你都可以使用 systemd 啟動dnsmasq服務:
$ sudo systemd enable --now dnsmasq
使用dig命令對其進行測試。
當你首次聯系服務器時,查詢時間可能在50到500毫秒之間(希望不超過此時間):
$ dig example.com | grep Query\ time
;; Query time: 56 msec
然而,下次嘗試時,查詢時間會大大減少:
$ dig example.com | grep Query\ time
;; Query time: 0 msec
結果好多了!
為你的整個網絡啟用 dnsmasq
Dnsmasq在一臺設備上就已是很有用的工具,如果你能讓網絡上的所有設備都使用它那只會更好。
以下是怎樣開放dnsmasq服務給你的全部本地網絡的方法:
獲取運行dnsmasq服務的服務器的 IP 地址
在運行的計算機上運行dnsmasq,獲取本地 IP 地址:
$ dig example.com | grep Query\ time
;; Query time: 0 msec
在這個示例中,我運行dnsmasq的樹莓派的IP地址是 10.0.170.170。由于樹莓派現在是我的網絡結構的重要組成部分,因此我讓它的地址是由我的 DHCP 路由器靜態分配。如果我允許它獲得一個動態的IP地址,它可能不會改變(DHCP被設計成以這種方式提供幫助),但如果它這樣做,那么我的整個網絡將不能使用dnsmasq提供優化。
修改服務器的防火墻以允許端口53上的流量
使用 firewall-cmd打開你的服務器防火墻中的端口,以便它允許 DNS 請求和發送響應。
$ sudo firewall-cmd --add-service dns --permanent
將服務器的IP地址添加到你家用路由器的域名服務項中。
知道了我的本地DNS服務器的地址是10.0.170.170(記住,在你自己的網絡上幾乎肯定是不同的),我可以添加它在家用路由器上作為主要域名服務器。
現在有很多路由器,沒有單一的接口。
但是,任務是相同的,不同模型的工作流通常是相對相似的。
在我的Turris Omnia路由器中,高級接口允許DNS轉發,這會將DNS請求發送到我選擇的服務器。
在此處輸入10.0.170.170(我的dnsmasq服務器的IP地址)會強制所有DNS流量通過 Dnsmasq 進行路由以進行緩存和解析。另一方面,在我的TP-Link路由器中,DNS設置是在DHCP面板中配置的。
可能需要再多做些探索,所以無需擔心在你路由器的接口界面中尋找DNS服務設置。當你找到它后,輸入你的Dnsmasq服務器地址,然后保存更改。
某些型號要求路由器在進行更改時需要重新啟動。
你的網絡上的所有設備都從路由器繼承設置,因此現在從設備傳遞到互聯網的所有 DNS 流量都將通過 Dnsmasq 服務器。
靠近邊緣側
隨著越來越多的網站被添加到服務器的DNS緩存中,比本地Dnsmasq服務器上的DNS流量傳輸更遠的DNS流量將越來越少。
盡可能在本地快速計算的原則推動了邊緣計算的發展。僅通過這個練習,你就可以想象這項技術在利用地理位置策略加速互聯網交互方面是多么的重要。
無論你是在家中、在工作中還是作為云架構師從事邊緣計算工作,邊緣都是云的重要組成部分,你可以利用它來讓自己的優勢盡情發揮。
譯者介紹
范曉波,51CTO社區編輯,資深網絡安全工程師。精通SDN、SD-WAN、VPN、NFV等網絡相關技術。精通二三層網絡轉發。熟悉DPDK、VPP、OVS高性能網絡開源框架。喜歡打羽毛球、烹飪美食。
原文標題:??Boost your home network with DNS caching on the edge??,作者:Seth Kenlon