不過 Ubuntu 預設安裝的 dnsmasq 並不是那麼容易設定,因此我習慣都會關掉它,並且自己安裝 dnsmasq。
關掉的方法很簡單,只要開啟 /etc/NetworkManager/NetworkManager.conf,並且把 dns=dnsmasq 這一行註解掉就可以了,例如:
#dns=dnsmasq
不要因此移除任何 Ubuntu 上預設安裝的 package,像是 dnsmasq-base,那可能會導致一些其他的異常狀況出現。
接著我們可以安裝自己的 dnsmasq,像是單純的 apt-get install dnsmasq 即可完成這個簡單的步驟,並且試情況修改 /etc/dnsmasq.conf,一個值得嘗試的選項是 cache-size,也由於我沒有看到有針對這個數值的實驗數據,只有一些支字片語提到最好不要設定太大,所以我自己是設定為 4096。
另外比較少為人所知的是,dnsmasq 提供一個選項 --all-servers,它會將 /etc/dnsmasq.conf 裡面的每一個 server 做一個同步查詢的動作,比如說設定了三個 servers,分別是 8.8.8.8、8.8.4.4、168.95.1.1,那只要 --all-servers 有被指定,那 dnsmasq 就會一次全部向這些 servers 送出 DNS 請求,看誰先回應就用誰的,有點像是平行處理的行為,雖然這樣可能會增加一些 DNS 的網路流量。
指定 --all-servers 的方法是在 dnsmasq 啟動時指定,因此我的方法是直接修改 /etc/init.d/dnsmasq 這個 script 檔案,在 119 行下方新增 --all-servers 的參數。原本那一個段落長這樣:
108 start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON -- \ 109 -x /var/run/dnsmasq/$NAME.pid \ 110 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \ 111 ${MAILTARGET:+ -t $MAILTARGET} \ 112 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \ 113 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \ 114 ${DHCP_LEASE:+ -l $DHCP_LEASE} \ 115 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \ 116 ${RESOLV_CONF:+ -r $RESOLV_CONF} \ 117 ${CACHESIZE:+ -c $CACHESIZE} \ 118 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \ 119 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} \
我們在 119 行下方新增一行,變成這樣:
108 start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON -- \ 109 -x /var/run/dnsmasq/$NAME.pid \ 110 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \ 111 ${MAILTARGET:+ -t $MAILTARGET} \ 112 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \ 113 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \ 114 ${DHCP_LEASE:+ -l $DHCP_LEASE} \ 115 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \ 116 ${RESOLV_CONF:+ -r $RESOLV_CONF} \ 117 ${CACHESIZE:+ -c $CACHESIZE} \ 118 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \ 119 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} \ 120 --all-servers \
之後重新啟動就完成了:
sudo service dnsmasq restart。
正常的話,隨便一個 DNS 請求,都會平行送出給每個指定的 server,像以下圖中指定四個 servers,當我查詢 tw.yahoo.com 的時候,可以看到請求以及回應被平行送出與處理:
沒有留言:
張貼留言