以前の記事でお家DNSとして簡単にdnsmasqを導入しました。 ローカルIPを名前解決してもらえるだけで、感動していたのですが、友人が自宅のDNSの設定を変えただけで、ブラウジングが快適になったというので、私もやってみることに。まず最初に現状を計測してみました。
現状把握
$dig google.com
; <<>> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25727
;; 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. 252 IN A 172.217.31.174
;; Query time: 9 msec
;; SERVER: 192.168.2.6#53(192.168.2.6)
;; WHEN: Sat Oct 16 05:41:02 JST 2021
;; MSG SIZE rcvd: 55
一応ローカルの192.168.2.6に問い合わせてますが、google.comを解決するのに9msぐらいかかっています。これは何度やっても同じでした。
試しに、最速と言われている1.1.1.1に問い合わせしてみます。
$ dig @1.1.1.1 google.com
; <<>> DiG 9.10.6 <<>> @1.1.1.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40694
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 251 IN A 216.58.220.110
;; Query time: 7 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Oct 16 05:41:54 JST 2021
;; MSG SIZE rcvd: 55
あれ、ローカルDNSよりも速い・・・ということで、色々調べてみたら、何段も重なっているようでした。
自PC > dnsmasq > ubuntu内蔵DNS > ホームルータ > プロバイダDNS > 外のDNS
これでは遅いなーということで、以下を目指します。
自PC > dnsmasq(キャッシュさせる) > プロバイダDNS > 外のDNS
プロバイダDNS挟まなくても良いかと思われるかもしれませんが、試しにプロバイダDNSに直接問い合わせたら5msで帰ってきたので、プライマリにしたいと考えています。
dnsmasqを設定する
設定は簡単です。dnsmasq.conf を編集して、dnsmasqのサービスを再起動するだけです。dnsmasq.conf に追加した設定は以下です。説明をコメントに書きます。
$vi dnsmasq.conf
no-resolv #ubuntu内蔵のDNS機能を使用しません
no-poll #ubuntu内蔵のDNS設定ファイル resolv.conf の定期的な確認を行いません
bogus-priv #ローカルIPであった場合上位のDNSサーバーに問い合わせを行いません
server=100.200.100.222 #プロバイダーのDNSサーバーです
server=1.1.1.1 #CloudflareのDNSサーバーです
server=8.8.8.8 #googleのDNSサーバーです
cache-size=1000 #キャッシュする件数です。デフォルトだと150件らしい
min-cache-ttl=3600 #キャッシュするTTLを強制的に最低3600秒としています。
$sudo systemctl restart dnsmasq
効果は?
さて、内部にキャッシュするようにDNSサーバーを設定しました。果たして効果は?digを2回ほど叩いてみます。
$ dig google.com
; <<>> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3711
;; 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. 37 IN A 216.58.197.206
;; Query time: 0 msec
;; SERVER: 192.168.2.6#53(192.168.2.6)
;; WHEN: Sat Oct 16 06:16:07 JST 2021
;; MSG SIZE rcvd: 55
やりました!0 msec です!!
もちろん1回目は7msぐらいかかっていたのですが、2回目実行したらなんと 0ms WEBブラウジングもサクサク感が非常に増しました。みなさんも是非お家にDNSサーバーをお考えください。
参考サイト
http://akira-arets.blogspot.com/2017/10/linux-centos7-dnsmasq.html
http://akira-arets.blogspot.com/2017/04/centos6-dnsmasq-settings.html