樹莓派搭建 DNS 伺服器 | 樹莓派小無相系列
自建 DNS 伺服器,可以規避運營商的 DNS 劫持,還可以一定程度上加速網路訪問。除此之外,在自定一些配置之後,能實現廣告攔截及其他的一些功能。在這裡我們通過在樹莓派使用 dnsmasq 搭建這樣一個 DNS 伺服器。
安裝 dnsmasq
sudo apt-get install dnsmasq
配置 dnsmasq
首先備份一下原配置檔案,命令列如下:
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
接著編輯配置檔案,命令列如下:
sudo vi /etc/dnsmasq.conf
這裡,我們首先按下 esc 進入命令模式,然後使用快捷鍵 yddG 清空檔案,之後使用 i 進入插入模式,ctrl+v 貼上如下配置內容,貼上完成後按下 esc,最後使用 :wq 儲存檔案:
resolv-file=/etc/my_dns.conf
strict-order
cache-size=10000
listen-address=127.0.0.1,192.168.1.37
address=/pi.com/192.168.1.37
其中 192.168.1.37
為樹莓派的區域網 ip,address=/pi.com/192.168.1.37
是為了測試規則並將樹莓派上的網站解析到 pi.com
。
其餘各項解釋:
resolve-file:定義 dnsmasq 的上游DNS伺服器,預設是 /etc/resolv.conf。但是 resolv.conf 在每次樹莓派重啟後就會被系統重置,因此我們指定 resolve-file 檔案
strict-order:表示嚴格按照 resolv-file 檔案中的順序從上到下進行DNS解析
listen-address:定義 dnsmasq 監聽的地址,預設是監控本機的所有網絡卡上。為使區域網其他裝置得以使用需要加上樹莓派的區域網 ip
cache-size:快取條數
address:自定義域名解析的 ip 地址,以 pi.com 這個域名為例。也可以在其他檔案中配置,配置檔案放在 /etc/dnsmasq.d/ 中即可。例如可以在 /etc/dnsmasq.d/ 下新建檔案test.conf,加入該規則,效果等同
編輯 my_dns.conf,命令列如下:
sudo nano /etc/my_dns.conf
貼上如下內容:
nameserver 127.0.0.1
nameserver 119.29.29.29
nameserver 182.254.116.116
ctrl+o 儲存,之後 回車 確認,然後 ctrl+x 退出。
附註,各大 dns(推薦 DNSpod):
114 dns:
114.114.114.114
114.114.115.115
阿里 dns:
223.5.5.5
223.6.6.6
DNSpod:
119.29.29.29
182.254.116.116
廣告攔截及其他配置
dnsmasq 會優先檢測 hosts 檔案,並通過其解析 ip,我們可以通過修改樹莓派 hosts 檔案實現攔截廣告的需求和其他的一些需求。
在使用者目錄(/home/pi)建立 hosts 資料夾,在資料夾內放置一個 hosts.sh 指令碼,修改檔案許可權:
cd ~
mkdir hosts
cd hosts
touch hosts.sh
sudo chmod 777 hosts.sh
之後編輯檔案,命令列如下:
nano hosts.sh
貼上如下內容:
#!/bin/sh
cd /home/pi/hosts/
echo "***下載 g hosts 檔案***"
wget --no-check-certificate https://raw.githubusercontent.com/googlehosts/hosts/master/hosts-files/hosts -O hosts_g.txt;
echo "***下載 ad hosts 檔案***"
wget --no-check-certificate https://raw.githubusercontent.com/vokins/yhosts/master/hosts -O hosts_ad.txt;
echo "***合併 hosts 檔案***"
cat hosts_g.txt hosts_ad.txt > hosts.txt
echo "***複製 hosts 檔案***"
sudo cp hosts.txt /etc/hosts
echo "***hosts 檔案更新完成"
ctrl+o 儲存,之後 回車 確認,然後 ctrl+x 退出。
編輯完成之後執行一下,命令列如下:
sudo sh hosts.sh
設定定時執行更新 hosts 指令碼,命令列如下:
sudo crontab -e
新增如下內容至檔案末行(每天三點半執行一次):
30 3 * * * sh /home/pi/hosts/hosts.sh
重啟 dnsmasq
sudo service dnsmasq restart
檢視 dnsmasq 狀態
sudo service dnsmasq status
檢視網路狀態
可以通過 dig 一下相關網址來測試 dns 是否生效。
如果未安裝 dnsutils,則通過如下命令安裝:
sudo apt-get install dnsutils
之後可以通過如下命令列簡單測試:
dig pi.com
在其他裝置使用 dns
可以只在裝置上單獨設定,如下:
macOS:
開啟網路設定-高階-dns,配置為樹莓派 ip 即可。
Windows:
控制面板-網路和Internet項-檢視網路狀態和任務-更改介面卡設定-右鍵正在使用的本地連線-屬性-雙擊Internet協議4(TCP/IPV4),將內容填寫至相關部分即可。
在這裡,建議在路由器配置,即配置路由器 LAN 口的 DNS 為樹莓派 ip,這樣便無需單獨為裝置配置。
例如:華碩路由器(RT-AC68U),設定 內部網路-DHCP 伺服器-DNS Server 1 為樹莓派 ip,之後應用即可,其他裝置大同小異。
系列說明
小無相功是小說《天龍八部》中「逍遙派」的一門內功,講究不著形相,無跡可尋,熟悉後再瞭解其他武功招式便可依仗威力習得,甚至青出於藍而勝於藍。而樹莓派形似小無相功,同具無限可能,瞭解一些基礎便可輕鬆上手,去探尋其他更多未知。因此,系列以此為題,帶來一系列樹莓派相關的教程,同時也是對個人長期折騰樹莓派以來的一個歸檔整理。