序
如果還沒有看過第一篇的請先去服用。
花媽的料理教室 DoReMiSo
這篇我們來介紹一下如何安裝 AdGuard Home ,這邊使用 Docker 來安裝,這樣一來就不用特地管什麼平台惹。
首先我們需要什麼?
- 一台 24h 開著的主機且可以
ssh
且可以外連port-forward
- 主機安裝了
docker
&docker-compose
- 一個長期穩定的 domain (建議付費)
- domain 託管於 CloudFlare (本篇示範)
製造憑證
都 9102 年了,免費的憑證到處飛,這邊使用簡單的 Let’s Encrypt 搭配 Certbot 自動產生以及 Renew 憑證,假設已經把 domain 託管到 CloudFlare 上了之後開啟這個網頁進入個人 CloudFlare 帳號頁面。
輸入帳號後,通過 Google ReCaptcha 驗證複製 Global API Key
貼到 Certbot/cloudflare.ini
第一行則填入你的 CloudFlare 登入信箱如下圖。
準備好後便可以來產生憑證,進入 Certbot
資料夾後,將
&
內的標示換成實際參數。
docker run --name certbot --rm -it \
-v "${PWD}/ssl:/etc/letsencrypt" \
-v "${PWD}/cloudflare.ini:/cloudflare.ini" \
certbot/dns-cloudflare \
certonly --dns-cloudflare \
--dns-cloudflare-credentials /cloudflare.ini \
--preferred-challenges dns-01 \
--agree-tos -m \
-d
理論上 Certbot
底下會多一個 ssl
資料夾,裡面 live
應該會出現一個你域名的資料夾。完成後就準備好了。
自動更新憑證
什麼這麼煩?
對 不爽去買憑證。
依照 Let’s Encrypt 白皮書,他發放的憑證有效期限只有幾個月,但我總不可能幾個月就手動 Renew
一次吧,太擾民了。其實我們只需要把 Certbot
指令修改一下,放到 crontab
下他自己執行即可。
crontab -e
接著選擇自己喜愛的編輯器,在底下插入,並請依照實際路徑修改
0 0 * * * docker run -it --rm --name certbot -v /Certbot/ssl:/etc/letsencrypt -v /Certbot/cloudflare.ini:/cloudflare.ini certbot/dns-cloudflare renew >/dev/null 2>&1
安裝 AdGuard Home
進入 AdGuardHome 資料夾後進入我個人最愛的環節 欸!
先別急著啟動,先將註解的 docker-compose.yml
開啟,並且將第八行註解的地方修改成剛剛上面產生的憑證的部分,就是你的域名,請務必記得將 #
刪除。
- ../Certbot/ssl/archive/blog.tdccc.com.tw:/ssl
修改完畢後直接使用最棒的指令。
docker-compose up
確認沒有啟動失敗後可以直接 ctrl+z
丟去後台,並啟動瀏覽器進去, http://
ip
即是你架設的地點,接著基本上就是一直按下一步了。
接著就會進入儀表板的介面,接著點擊 Settings
做一些詳細的設定。
第一項是黑名單的更新頻率,這邊建議直接更改為 1 hour
。
接著 Logs
查詢/封鎖 紀錄如果有隱私疑慮建議直接關閉不要勾選。
底下還可以一鍵封鎖指定網站 當然我建議直接把抖陰直接弄爛
設定完後,別忘記點擊 Save
儲存設定,接著來到 Encryption Settings
開啟加密之後,輸入上面設定好的網域,並且開啟自動轉址到 HTTPS
。
往下轉來到輸入憑證的地方,依序貼上。
/ssl/fullchain1.pem
& /ssl/privkey1.pem
即可。如果出現錯誤的話,例如找不到資料夾請先檢查在製造憑證時是否有成功,並且 docker-compose.yml
有正確掛載將 #
拿掉,如果還是出現問題可以在下方留言 :)
接著儲存後就完成了。
Filter 到底要裝哪些?
上一篇文章已經提過可以到 filterlist 裡找尋答案。這邊建議可以使用幾個關鍵字來尋找,不過還是要再說一次。
過度訂閱列表,會影響電腦效能以及影響頁面呈現畫面,請自行斟酌訂閱,如果遇到頁面打不開不妨先關掉 AdGuard 並重新整理看看 :)
- Coin 或 Mining (挖礦)
- Malware (惡意軟體)
- Phishing (釣魚網頁)
這邊也公開一下我個人訂閱的列表給大家好惹
家中其他設備?
如果家中有其他設備想要使用,但懶得一台一台設定的話呢 … ?其實也十分簡單,開啟家中的路由器,將 DNS
指向設定好的 AdGuard Home
就可以了。
Router
PC
這個我放棄,我根本不用 Windows
或是參考下面的方法,使用 docker
架設 knot
Android
大概是最簡單的最快速ㄉ
如果是有安裝 AdGuard
在手機的也可以這麼做。
Mac / Linux
Mac 必須先安裝 brew
brew install knot-resolver services
Linux 其他 Distro 則是按照官網說明比較快
在編寫設定檔之前先將驗證憑證的 CA
下載好
Mac: curl -o /usr/local/etc/kresd/DigiCertGlobalRootCA.crt -L "https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt"
Linux: curl -o /etc/knot-resolver/DigiCertGlobalRootCA.crt -L "https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt"
接著打開 knot
的設定檔路徑如下。
Linux 設定檔路徑 /etc/knot-resolver/kresd.conf
Mac 設定檔路徑 /usr/local/etc/kresd/config
請用自己喜愛的編輯器開啟,例如 vim
(?),在最尾端加上並請依照實際狀況修改!!!!
policy.TLS_FORWARD({{'', hostname='.',ca_file='' }})
儲存退出之後將 knot
重啟即可。
Linux: systemctl start [email protected]{1..4}.service
1
Mac: sudo brew services restart knot-resolver
檢查一下 Log
是否有啟動失敗的問題。
Mac: tail -f /usr/local/var/log/kresd.log
Linux: tail -f /var/log/kresd.log
如果有遇到顯示找不到 root.key
的話可以嘗試先將它註解 --
🤔
接著我們可以使用 dig
這套工具來測試是否解析正常,語法也十分簡單。
$ dig @127.0.0.1 google.com
; <<>> DiG 9.10.6 <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27757
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 300 IN A 172.217.160.78
;; Query time: 58 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Dec 03 11:22:59 CST 2019
;; MSG SIZE rcvd: 55
如果有正確解析就是正常的囉!,那有沒有測試正常阻擋 ...?也超級簡單ㄉ。
$ dig @127.0.0.1 sa.bbc.com
; <<>> DiG 9.10.6 <<>> @134.209.108.164 sa.bbc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 44462
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;sa.bbc.com. IN A
;; AUTHORITY SECTION:
sa.bbc.com. 10 IN SOA fake-for-negative-caching.adguard.com. hostmaster.sa.bbc.com. 100500 1800 900 604800 86400
;; Query time: 96 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Dec 03 11:25:28 CST 2019
;; MSG SIZE rcvd: 109
只要看到 fake-for-negative-caching.adguard.com. hostmaster.sa.bbc.com. 100500 1800 900 604800 86400
就是直接被阻擋囉,真的舒服。當一切就緒時,就能去修改電腦本機的 DNS
指向 127.0.0.1
ㄌ
Linux 則是編輯 /etc/resolv.conf
將底下替換成 127.0.0.1
就可以囉。
EnJoy It
Ref
- https://certbot-dns-cloudflare.readthedocs.io/en/stable/
- https://hub.docker.com/r/adguard/adguardhome
- https://github.com/docker/compose
- https://www.digicert.com/digicert-root-certificates.htm
- https://knot-resolver.readthedocs.io/en/stable