本文首發於:微信公衆號「運維之美」,公衆號 ID:Hi-Linux。linux
「運維之美」是一個有情懷、有態度,專一於 Linux 運維相關技術文章分享的公衆號。公衆號致力於爲廣大運維工做者分享各種技術文章和發佈最前沿的科技信息。公衆號的核心理念是:分享,咱們認爲只有分享才能使咱們的團體更強大。若是你想第一時間獲取最新技術文章,歡迎關注咱們!git
公衆號做者 Mike,一個月薪 3000 的雜工。從事 IT 相關工做 15+ 年,熱衷於互聯網技術領域,認同開源文化,對運維相關技術有本身獨特的看法。很願意將本身積累的經驗、心得、技能與你們分享交流,篇篇乾貨不要錯過喲。若是你想聯繫到我,可關注公衆號獲取相關信息。github
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
。docker
項目地址:https://github.com/AdguardTeam/AdGuardHomebootstrap
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 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
後,咱們須要經過瀏覽器打開 http://IP:3000
對 AdGuard Home
進行初始化設置。首次初始化會要求設置服務運行端口、帳號、密碼等信息,配置過程當中設置的密碼必定請牢記,下次登陸管理後臺時須要使用。
首先,咱們點擊 「開始配置」 ,來設定網頁管理界面和 DNS
服務的端口。
其次,點擊 「下一步」 後,爲 AdGuard Home
網頁管理界面設置一個用戶名和密碼。
最後,點擊 「下一步」 後,AdGuard Home
會展現以上配置的彙總信息。
至此,使用 AdGuard Home
默認配置的設置就算大功告成了。
使用 AdGuard Home
默認配置設置完成後,咱們能夠在「儀表盤」上看到 DNS
查詢次數、被過濾器封鎖的網站、查詢 DNS
請求的客戶端 IP
地址等等信息。
AdGuard Home
默認的配置比較簡單,爲了更強力地攔截廣告,咱們能夠對 AdGuard Home
配置進行一些優化。
AdGuard Home
默認配置的狀況下只勾選了「使用過濾器和 Hosts 文件以攔截指定域名」這一個選項,你能夠根據自身狀況決定是否啓用「使用 AdGuard 瀏覽安全網頁服務」、「使用 AdGuard 家長控制服務」和「強制安全搜索」等特性。
不只如此,你還能夠很方便的屏蔽一些比較流行的網站。固然這些網站原本對咱們都是不可用的,也就不用畫蛇添足進行設置了,哈哈!
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
請求日誌記錄來針對某個域名進行快速的攔截和放行操做。
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
設置,來享用 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