本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一 ...
本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi-Linux。
「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一時間獲取最新技術文章,歡迎關註我們!
公眾號作者 Mike,一個月薪 3000 的雜工。從事 IT 相關工作 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有自己獨特的見解。很願意將自己積累的經驗、心得、技能與大家分享交流,篇篇乾貨不要錯過喲。如果你想聯繫到我,可關註公眾號獲取相關信息。
什麼是 AdGuard Home
AdGuard Home
是一款全網廣告攔截與反跟蹤軟體,AdGuard Home
項目是著名廣告攔截器提供商 AdGuard
開源的一個 DNS Server
版本。AdGuard Home
可以將廣告與追蹤相關的功能變數名稱屏蔽,同時你不再需要安裝任何客戶端軟體。AdGuard Home
的工作原理是在 DNS
的功能變數名稱解析過程里攔截網頁上的廣告。
簡單來說 AdGuard Home
是一個支持廣告過濾和家長控制的開源公共 DNS
服務,如同 Google 的公共 DNS 服務 8.8.8.8。AdGuard Home
同時也支持 DNS over TLS
和 DNS over HTTPS
。
項目地址:https://github.com/AdguardTeam/AdGuardHome
AdGuard Home 的主要功能介紹
- 攔截隨處可見的廣告
- 註重隱私保護
- 家庭保護模式
- 自定義過濾規則
在繼續講解前,我們先來看一看 AdGuard Home
強大的功能演示和管理後臺。
安裝 AdGuard Home
AdGuard Home
使用 Golang
開發,具有良好的原生跨平臺性。它可以部署在 X86
架構的各種操作系統上,也可以部署在樹莓派上,甚至你還可以藉助 Docker
部署在群暉 NAS
上。
使用預編譯的二進位版本安裝
這裡我們以 Linux
系統為例,其它系統可參考官方幫助文檔:https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#installation 。
# 下載並解壓 AdGuard Home
$ wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.98.1/AdGuardHome_linux_amd64.tar.gz
$ tar -zxvf AdGuardHome_linux_amd64.tar.gz
# 為了方便使用,我們將二進位文件拷貝到 PATH 所包含的位置
$ cd AdGuardHome_linux_amd64
$ cp ./AdGuardHome /usr/local/bin/
# 啟動 AdGuard Home
$ AdGuardHome
上面的方法,很顯然是在前臺運行的。前臺運行必然還是存在一些弊端的,比如:當前 SHELL
中斷必然會引起程式中斷等。如果你想長期穩定的運行 AdGuard Home
,最後好方法必然是將 AdGuard Home
運行成一個服務。要想將 AdGuard Home
在各平臺部署為服務也是很簡單的,只需運行下麵這一條命令就可實現。
# Linux 下使用的服務管理器是 systemd 、Upstart 或 SysV,macOS 下使用的服務管理器是 Launchd。
$ AdGuardHome -s install
AdGuard Home
服務安裝後好,你可以使用以下命令來管理它。
# 啟動 AdGuardHome 服務
$ AdGuardHome -s start
# 停止 AdGuardHome 服務
$ AdGuardHome -s stop
# 重啟 AdGuardHome 服務
$ AdGuardHome -s restart
# 查看 AdGuardHome 服務狀態
$ AdGuardHome -s status
# 卸載 AdGuardHome 服務
$ AdGuardHome -s uninstall
使用 Docker 來安裝
如果你會一點點 Docker
知識的話,我們當然還是建議你直接使用 Docker
來安裝。雖然通過預編譯的二進位版本安裝已經很簡單了,但如果使用 Docker
來安裝,你會發現僅僅只需一條指令就可以搞定了。
$ docker pull adguard/adguardhome
# -v 參數後面指定的宿主機上的目錄主要用作永久保存 AdGuard Home 的數據文件和配置文件,可自行根據實際情況修改。
$ docker run --name adguardhome -v /home/mike/workdir:/opt/adguardhome/work -v /home/mike/confdir:/opt/adguardhome/conf -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -d adguard/adguardhome
你可能會發現上面一共是兩條指令,前面不是說好了是一條指令的嗎?是不是發現被騙了,我怎麼可能騙你呢,這絕對是不可能的!其實這兩條指令,你只需直接執行第 2 條指令就可以完成所有安裝操作了。這裡分開寫出來僅僅是為了完整演示 Docker
整個運行過程,能讓一些還不會 Docker
的同學能更容易理解一些。前面既然啰嗦了這麼多,這裡就再延伸說一點 Docker
容器的基本管理操作。
# 啟動 AdGuard Home 容器
$ docker start adguardhome
# 停止 AdGuard Home 容器
$ docker stop adguardhome
# 刪除 AdGuard Home 容器
$ docker rm adguardhome
使用 AdGuard Home
使用預設配置來設置 AdGuard Home
運行 AdGuard Home
後,我們需要通過瀏覽器打開 http://IP:3000
對 AdGuard Home
進行初始化設置。首次初始化會要求設置服務運行埠、賬號、密碼等信息,配置過程中設置的密碼一定請牢記,下次登錄管理後臺時需要使用。
首先,我們點擊 “開始配置” ,來設定網頁管理界面和 DNS
服務的埠。
其次,點擊 “下一步” 後,為 AdGuard Home
網頁管理界面設置一個用戶名和密碼。
最後,點擊 “下一步” 後,AdGuard Home
會展示以上配置的彙總信息。
至此,使用 AdGuard Home
預設配置的設置就算大功告成了。
使用 AdGuard Home
預設配置設置完成後,我們可以在「儀錶盤」上看到 DNS
查詢次數、被過濾器封鎖的網站、查詢 DNS
請求的客戶端 IP
地址等等信息。
AdGuard Home 配置進階
AdGuard Home
預設的配置比較簡單,為了更強力地攔截廣告,我們可以對 AdGuard Home
配置進行一些優化。
- 常規設置
AdGuard Home
預設配置的情況下只勾選了「使用過濾器和 Hosts 文件以攔截指定功能變數名稱」這一個選項,你可以根據自身情況決定是否啟用「使用 AdGuard 瀏覽安全網頁服務」、「使用 AdGuard 家長控制服務」和「強制安全搜索」等特性。
不僅如此,你還可以很方便的屏蔽一些比較流行的網站。當然這些網站本來對我們都是不可用的,也就不用多此一舉進行設置了,哈哈!
- 設置上游 DNS
AdGuard Home
預設使用 Cloudflare
的 DNS over HTTPS
作為上游伺服器。如果你在國內使用 Cloudflare DNS
做為上游 DNS
,可能延遲會比較高。
我們可以設置為國內的公共 DNS
,如:騰訊的 119.29.29.29
、阿裡的 223.5.5.5
和 114.114.114.114
等,但壞處是這些國內公共 DNS
暫時不支持 DNS over TLS
。
這裡有一個比較折中的解決方法就是通過啟用 「通過同時查詢所有上游伺服器以使用並行查詢加速解析」選項來在每次查詢的時候對所有的上游 DNS
同時查詢,以加速解析速度。
- 過濾器
雖然 AdGuard Home
本身內置了比較知名的 AdGuard
、AdAway
廣告過濾規則,但這些規則在國內顯然有點水土不服。如果你想要更完美的實現廣告屏蔽還需要自己添加規則,比較幸運的是 AdGuard Home
是可以相容 Adblock
過濾規則語法的。這樣,你就可以很方便的使用一些比較知名的 Adblock
過濾規則,比如:由 Adblock Plus
團隊維護的 EasyList
。
目前好用的廣告過濾規則還是有很多的,它們都針對不同的用途。下麵推薦一些比較常用的:
- EasyList China : 國內網站廣告過濾的主規則。
鏈接:https://easylist-downloads.adblockplus.org/easylistchina.txt
- EasyPrivacy : EasyPrivacy 是隱私保護,不被跟蹤。
鏈接:https://easylist-downloads.adblockplus.org/easyprivacy.txt
- CJX's Annoyance List : 過濾煩人的自我推廣,並補充 EasyPrivacy 隱私規則。
鏈接:https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt
- 廣告凈化器規則 : 支持國內大部分視頻網站的廣告過濾。
鏈接:http://tools.yiclear.com/ChinaList2.0.txt
- I don't care about cookies : 我不關心 Cookie 的問題,屏蔽網站的 cookies 相關的警告。
鏈接:https://www.i-dont-care-about-cookies.eu/abp/
除了使用已有的過濾規則外,當然你也可以根據自己的需求自定義過濾規則,要自定義過濾規則其實也很簡單。
下麵是自定義過濾規則的一些語法說明。
||example.org^ – 攔截 example.org 功能變數名稱及其所有子功能變數名稱
@@||example.org^ – 放行 example.org 及其所有子功能變數名稱
127.0.0.1 example.org – 將會把 example.org(但不包括它的子功能變數名稱)解析到 127.0.0.1。
! 註釋符號,表示這是一行註釋
# 這也是註釋符號,同樣表示這是一行註釋
/REGEX/ – 正則表達式模式
更多規則可以參考官方幫助文檔:https://kb.adguard.com/en/general/dns-filtering-syntax
- 查詢日誌
AdGuard Home
管理界面中也為我們提供了 DNS
請求日誌查詢功能,在這裡,我們不但能看見所有設備最近 5000 條的 DNS
請求日誌記錄。你還可以根據 DNS
請求日誌記錄來針對某個功能變數名稱進行快速的攔截和放行操作。
- 調整配置參數,以提升 QPS 能力
AdGuard Home
所有的配置參數都保存在一個名為 AdGuardHome.yaml
的配置文件中。這個配置文件預設路徑通常為 AdGuard Home
二進位文件 AdGuardHome
所在的目錄,比如:/usr/local/bin/AdGuardHome.yaml
。
這裡我們只需調整以下兩個參數,就是可以明顯提升 AdGuard Home
的 QPS
能力。
ratelimit :
DDoS
保護,客戶端每秒接收的數據包數。預設值是 20,建議禁用該參數(將值改為 0)。blocked_response_ttl :
TTL
緩存時間,預設值是 10,建議設置為 60 。
這裡在把 AdGuard Home
的配置文件完整版本也展示一下,有興趣的同學可以自行研究下其它參數的用途喲!。
$ cat AdGuardHome.yaml
bind_host: 0.0.0.0
bind_port: 80
auth_name: mike
auth_pass: "123456"
language: zh-cn
rlimit_nofile: 0
dns:
bind_host: 0.0.0.0
port: 53
protection_enabled: true
filtering_enabled: true
blocking_mode: nxdomain
blocked_response_ttl: 60
querylog_enabled: true
ratelimit: 0
ratelimit_whitelist: []
refuse_any: true
bootstrap_dns:
- 1.1.1.1:53
- 1.0.0.1:53
all_servers: true
allowed_clients: []
disallowed_clients: []
blocked_hosts: []
parental_block_host: ""
safebrowsing_block_host: ""
blocked_services: []
parental_sensitivity: 13
parental_enabled: true
safesearch_enabled: true
safebrowsing_enabled: true
resolveraddress: ""
rewrites: []
upstream_dns:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
- 119.29.29.29
- 223.5.5.5
tls:
enabled: false
server_name: ""
force_https: false
port_https: 443
port_dns_over_tls: 853
certificate_chain: ""
private_key: ""
filters:
- enabled: true
url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
name: AdGuard Simplified Domain Names filter
id: 1
- enabled: false
url: https://adaway.org/hosts.txt
name: AdAway
id: 2
- enabled: false
url: https://hosts-file.net/ad_servers.txt
name: hpHosts - Ad and Tracking servers only
id: 3
- enabled: false
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
name: MalwareDomainList.com Hosts List
id: 4
- enabled: true
url: https://easylist-downloads.adblockplus.org/easylistchina.txt
name: EasyList China
id: 1569209532
user_rules:
- '@@mps.ts'
dhcp:
enabled: false
interface_name: ""
gateway_ip: ""
subnet_mask: ""
range_start: ""
range_end: ""
lease_duration: 86400
icmp_timeout_msec: 1000
clients: []
log_file: ""
verbose: false
schema_version: 4
設置客戶端 DNS
所有以上設置完成後,最後當然是修改所有客戶端的 DNS
設置,來享用 AdGuard Home
帶來的強大的去廣告功能。
這個其實真的不用寫,我想聰明的你應該都知道這個怎麼設置。寫這個標題僅僅是為了保持文檔完整性,如果你真的不會設置,那就請自行使用「一些好用」的搜索引擎搜索相關方法吧!
總結
AdGuard Home
不但支持了 macOS
、Windows
、Linux
、樹莓派等多個系統平臺,也提供了二進位和 Docker
的部署方式,讓安裝變得非常簡單。AdGuard Home
自身提供的強大和直觀的管理和統計系統,讓它使用起來也是非常方便的。如果你打算自建一個支持去廣告功能的公共 DNS
,AdGuard Home
是非常值得一試的不二選擇。
參考文檔
https://www.google.com
https://zhuanlan.zhihu.com/p/56804257
https://www.xiaoz.me/archives/12318
https://www.yangcs.net/posts/adguard-home/
https://github.com/AdguardTeam/AdGuardHome#getting-started