如何將Raspberry Pi用作DNS伺服器?

如果您正在尋找用於家庭或小型企業網路的DNS伺服器,Raspberry Pi將會是一個便宜、可靠且節能的選擇。
首先,讓我們來瞭解一下什麼是DNS伺服器。

究竟什麼是DNS伺服器?

DNS代表“網域名稱系統”。DNS伺服器將人性化的功能變數名稱轉換為電腦可以使用的IP位址。
這樣您就可以透過輸入“deviceplus.com”來訪問這個網站了,而不是IP位址13.52.144.235—誰能記得住呢?

raspberry pi

更好的一點是,如果我們將此網站移至具有新IP位址的新伺服器,我們只需要更新我們的DNS記錄即可,其他人不會受到影響。

擁有您自己的DNS伺服器的好處

只要網站載入了出來,您就已經在使用DNS伺服器了。
您的互聯網供應商幾乎都是允許您使用他們的DNS伺服器的,如果您對此不滿意,可以隨時使用公共DNS伺服器。
這也許就是您想要自己的DNS伺服器的原因。

提升您的網頁流覽速度

從您的本地網路獲取某些內容總是比從互聯網上獲取要快。前者有時可以將頁面載入時間縮短幾百毫秒。這不會給生活帶來什麼改變,但是效果是顯著的。
而這種加快只有在您的本地DNS伺服器已經有相關記錄的情況下才有效。否則,仍然必須從互聯網上獲取內容。
在本地網路上保持整個DNS一直更新是不切實際的。相反,伺服器會將這些記錄進行緩存,直到它們的“生存時間”值(TTL)到期。
大多數作業系統和網路流覽器也會在您的電腦上緩存這些相同的記錄,因此如果它只是一台使用了互聯網連接的電腦,那麼擁有自己的DNS伺服器並不會帶來任何區別。
當多個擁有多台設備的人在本地網路上,並共用互聯網連接時,自己擁有DNS伺服器會更有意義。這種情況下,將所有內容緩存在一個地方將可以減少需要離開網路的請求數量。

將域加入黑名單

如果您想完全阻止某些域,使用DNS伺服器將會非常好用且高效。一些政府以這種方式審查整個國家的網路。
作為家長,您可能希望以同樣的方式阻止您的孩子訪問特定網站。請注意,這僅在他們透過該網路訪問互聯網時有效,並且許多孩子已經有足夠的專業知識透過配置一個不同的DNS伺服器來規避這一點了。
您可能還想阻止某些您覺得具有侵擾性或者令人生厭的域。
甚至還有一個用於Raspberry Pi的DNS伺服器程式,叫Pi-Hole,可以立即阻止廣告。

添加自訂域

您還可以為本地網路上的設備提供各自的功能變數名稱,僅對其他本地機器可見。
您可以為印表機、媒體中心,甚至冰箱和咖啡機(如果它們連接到了您的網路中)命名。
這將使您不必追蹤辦公室或家中所有設備的IP位址。

瞭解更多有關互聯網的資訊

也許您只是想更好地瞭解一下DNS,但是學習DNS的話也是必要瞭解一下互聯網的。

確保您的Raspberry Pi具有保留IP

如果您的Raspberry Pi DNS伺服器有一個動態分配的IP,那將會很頭疼。每隔一段時間,它就會被分配一個不同的IP位址,網路上的其他設備也將不再連接到它。
這就是為什麼您要為這個Raspberry Pi保留一個IP。您可以透過登錄路由器的儀錶板來執行該操作。
這一部分的確切步驟會因您的設備不同而略有不同。如果您遇到困難,請使用搜尋引擎查找您設備的手冊。

設置您的作業系統並安裝Dnsmasq

現在您的設備已經有了固定IP,讓我們開始安裝將要使用的軟體:Dnsmasq。
最好從重新安裝一個Raspberry Pi OS開始。您也許希望更改預設密碼,並在raspi-config中設置ssh訪問。
首先,透過輸入以下內容更新您的作業系統:
sudo apt update && sudo apt upgrade -y

然後安裝Dnsmasq。
sudo apt install dnsmasq -y

就是這樣!現在您就擁有一個DNS伺服器了!

配置Dnsmasq

您可以開始向Raspberry發送DNS請求了,但是需要對預設設置進行調整才能發揮最大作用。輸入以下命令打開設定檔:
sudo nano /etc/dnsmasq.conf

這個檔對有用的命令有詳細的注釋,所以您可以盡情查閱對其進行瞭解。有幾個部分需要特別注意。

不要將本地流量轉發到上游伺服器

在設定檔的頂部附近,您會發現寫有“#domain-needed”和“#bogus-p”的行。
設置#domain-needed選項將會阻止DNS伺服器向上游尋找不在域中的主機,而bogus-priv選項將會阻止它向上游查找私有IP位址。
在公司網路上,也許您會想在上游伺服器中查找這些東西。但是在公共互聯網上尋找它們沒有任何意義,所以我們使用這些選項。
您可以透過刪除行開頭的注釋符號來應用它們。

配置上流DNS伺服器

向下滾動,並查找顯示“#no-resolv”的行。刪除注釋字元以應用該選項。往下幾行後,有一行顯示“#server=/localnet/192.168.0.1”,刪除這一行。我們將要輸入自己的設置。
我通常使用Google的DNS伺服器。它們的快速可靠會帶來幫助,但是老實說,這主要是因為IP地址非常容易記住。
對此的配置如下:
server=8.8.8.8
server=8.8.4.4

如果您不想使用Google服務,那麼可以使用您的互聯網供應商或其他公共DNS伺服器。例如CloudFlare。

添加自訂域和阻止域

往下不遠的地方有一行顯示“#address=/double-click.net/127.0.0.1”。
這對於將域分配給本地網路上的設備很有用。公共互聯網上未使用的任何內容都可以,我通常為其使用頂層網域.lan。
複製這一行的語法。在本專案中,是將我的媒體和復古遊戲裝備放置在了retropie.lan上,如下所示:
address=/retropie.lan/192.168.0.6

不要忘記為路由器中對應的設備保留這些IP位址。
您還可以在此處阻止特定域,方法是將它們定向到私人IP。
address=/www.nickelback.com/127.0.0.1

如果您對阻止廣告伺服器更感興趣,那麼可以很容易在網上找到列表。
您可以隨意將域定向到公共IP。這對於網站在上線前測試網站遷移很有用。
請注意,這些域僅用於使用此DNS伺服器的設備。如果您想要一個功能變數名稱出現在公共DNS上,您必須購買它。

設置緩存大小

預設情況下,Dnsmasq將緩存最多150條記錄。即使是非常輕量的網路流覽器也可以將其占滿。
該緩存保存在記憶體中,如果空間太大會影響性能。
但是我們在這裡服務的是一個小型網路,現在的記憶體比幾十年前編寫Dnsmasq時更加充足,而且這些記錄每個只使用100個位元組。我們可以在其中放入幾百萬位元組的內容。
向下滾動到顯示“#cache-size=150”的地方,您需要向下滾動得多一些。刪除前面的注釋字元並將該數位設置的更大。
我只是添加了幾個零,以使其成為15000,這比小型網路的DNS伺服器緩存的記錄要多得多。

完成配置編輯後

當您對設置感到滿意時,保存並退出,然後輸入以下內容重新開機服務:
sudo systemctl restart dnsmasq

配置您的設備以使用該DNS伺服器

現在您的DNS伺服器已經啟動並運行,我們來開始使用它。
將其配置為整個網路的預設DNS伺服器的最簡單方法是在路由器中進行配置。
電腦和其他設備通常也可以在設置或控制台中單獨進行配置。

設置自動安全更新

不要對這裡的安全兩個字大意。DNS伺服器可能會是線上犯罪分子的重要目標,他們可以將您重定向到惡意網站。
我們已將其設置為只能從您的本地網路內訪問,這降低了很多風險。但是自動應用安全更新仍然是一個好主意。
有一個便利的套裝軟體可以為我們執行該操作,叫無人職守自動更新軟體。我們來安裝它。
sudo apt install unattended-upgrades -y

該安裝包在Raspberry Pi OS Buster中的預設配置是每天進行安全更新。
如果您還沒有更改預設密碼,也不要忘記更改!為SSH訪問設置基於證書的身份驗證也是一個很好的主意。