年初的時候有處理過,那時候感覺還沒這麼慢,最近這一兩個月,慢的感覺愈來愈明顯,看來不處理是不行了。
先進行觀察,通常是第一次查找時會特別慢,之後就會比較順暢。
回想年初的設定是讓 AsusWRT-Merlin 當作是主要 DNS,也有 Cache,當查找不到時才去外面找。那麼,看樣子就是外面的 DNS 伺服器太慢了,導致第一次查找慢。
從網頁管理介面找不到什麼設定可以調整,想到的解決方法是直接用 SSH 連進去改,於是就找到這篇:Asuswrt-merlin 自定義 dnsmasq 解析 │ 坂本 Sakamoto.blog – 探究科技未知領域
步驟如下:
- 點選左側的 Administration > System (系統管理 > 系統設定)
- Format JFES partiton at next boot -> No
- Enable JFFS custom scripts and configs -> Yes
- Enable SSH -> LAN only
- 把 ~/.ssh/id_rsa.pub 裡的內容複製起來,然後貼到「授權金鑰」欄裡。
- 選擇下方的套用
- LAN > DNSFilter
- Enable DNS-based Filtering 改為 OFF
- LAN > DHCP Server
- Advertise routers IP in addition to user specified DNS -> Yes
- 用 SSH 連線進去,使用者名稱是你登入 web 管理介面用的使用者名稱,例如:ssh root@192.168.1.1
- 附加 dnsmasq 設定
- touch /jffs/configs/dnsmasq.conf.add
- 填入 server=8.8.8.8 (若有多個,記得換行)
- 填入 min-cache-ttl=600 ,確保 cache 最少保留 600 秒 (10分鐘)
- 填入 max-cache-ttl=1800,確保 cache 最多就保留 1800 秒 (30分鐘)
- 加入 dnsmasq 事後設定腳本,這主要是把原有的 servers-file 拿掉。
- touch /jffs/scripts/dnsmasq.postconf
- 腳本內容請參考後面的腳本
- chmod +x /jffs/scripts/dnsmasq.postconf
- 重新啟動
經過這樣的設定之後,再來做測試,情況的確比之前好多了,繼續來觀察看看。
dnsmasq 事後設定腳本
#!/bin/sh # /jffs/scripts/dnsmasq.postconf CONFIG=$1 source /usr/sbin/helper.sh pc_delete "servers-file=/tmp/resolv.dnsmasq" $CONFIG
其他參考資料
- 為什麼要用 dnsmasq.conf.add / dnsmasq.postconf ,這是參考 AsusWRT-Merlin 的維基頁面:Custom config files · RMerl/asuswrt-merlin.ng Wiki
- Cache TTL 設定的使用是參考:How long does dnsmasq cache dns? – Server Fault
- 測試 DNS 查找速度
- ldns:用 sudo apt-get install ldnsutils 來安裝,然後用 drill www.microsoft.com | grep “Query time” 來測試。會知道這指令是因為閱讀了 dnsmasq – ArchWiki
- dnsdiag:用 sudo apt-get install dnsdiag 來安裝,然後可以用 dnsping 來查,用法可以參考 farrokhi/dnsdiag: DNS Diagnostics and Performance Measurement Tools
- 驗證 dnsmasq 設定是否正確,可以用 dnsmasq –test
沒有留言:
張貼留言