星期三, 11月 04, 2020

處理 AsusWRT-Merlin DNS 查找慢的問題

年初的時候有處理過,那時候感覺還沒這麼慢,最近這一兩個月,慢的感覺愈來愈明顯,看來不處理是不行了。

先進行觀察,通常是第一次查找時會特別慢,之後就會比較順暢。

回想年初的設定是讓 AsusWRT-Merlin 當作是主要 DNS,也有 Cache,當查找不到時才去外面找。那麼,看樣子就是外面的 DNS 伺服器太慢了,導致第一次查找慢。

從網頁管理介面找不到什麼設定可以調整,想到的解決方法是直接用 SSH 連進去改,於是就找到這篇:Asuswrt-merlin 自定義 dnsmasq 解析 │ 坂本 Sakamoto.blog – 探究科技未知領域

步驟如下:

  1. 點選左側的 Administration > System (系統管理 > 系統設定)
    1. Format JFES partiton at next boot -> No
    2. Enable JFFS custom scripts and configs -> Yes
    3. Enable SSH -> LAN only
    4. 把 ~/.ssh/id_rsa.pub 裡的內容複製起來,然後貼到「授權金鑰」欄裡。
  2. 選擇下方的套用
  3. LAN > DNSFilter
    1. Enable DNS-based Filtering 改為 OFF
  4. LAN > DHCP Server
    1. Advertise routers IP in addition to user specified DNS -> Yes
  5. 用 SSH 連線進去,使用者名稱是你登入 web 管理介面用的使用者名稱,例如:ssh root@192.168.1.1
  6. 附加 dnsmasq 設定
    1. touch /jffs/configs/dnsmasq.conf.add
    2. 填入 server=8.8.8.8 (若有多個,記得換行)
    3. 填入 min-cache-ttl=600 ,確保 cache 最少保留 600 秒 (10分鐘)
    4. 填入 max-cache-ttl=1800,確保 cache 最多就保留 1800 秒 (30分鐘)
  7. 加入 dnsmasq 事後設定腳本,這主要是把原有的 servers-file 拿掉。
    1. touch /jffs/scripts/dnsmasq.postconf
    2. 腳本內容請參考後面的腳本
    3. chmod +x /jffs/scripts/dnsmasq.postconf
  8. 重新啟動

經過這樣的設定之後,再來做測試,情況的確比之前好多了,繼續來觀察看看。

dnsmasq 事後設定腳本

#!/bin/sh
# /jffs/scripts/dnsmasq.postconf
CONFIG=$1
source /usr/sbin/helper.sh
pc_delete "servers-file=/tmp/resolv.dnsmasq" $CONFIG

其他參考資料

沒有留言: