小さなRaspberry Piが大好きです。この35ドルのコンピューターは、実用から趣味まで、実に様々な用途があります。でも、実際にAmazon Echoを自作する人はどれくらいいるでしょうか?おそらく少ないでしょう。でも、私がここ1年ほどRaspberry Piの大きな魅力に惹かれている用途が一つあります。それは、シンプルなDNSサーバーです。
リモートサーバーではなくローカルのRaspberry PiからDNSリクエストを行うことで、いくつかのメリットが得られます。ローカルエリアネットワークからあらゆる種類のデータを取得する方が、インターネットから取得するよりも常に高速です。
DNSの仕組みがよくわからない方は、Marco ChiappettaによるDNSの高速化方法に関する記事をお読みください。それでもまだ複雑に感じる場合は、かわいい漫画のサーバーを使ってDNSの仕組みを解説した漫画シリーズがあります。
Linuxプログラムdnsmasqは、DD-WRTなどのルーターOSに搭載されている軽量のDNSおよびDHCPサーバーです。Raspberry Piは他のルーティングやファイアウォール機能には少しパワー不足かもしれませんが、私のRaspberry Pi 2はdnsmasqを実行するには十分すぎるほどのパワーを持っています。さらに、dnsmasqの設定ファイルは他のDNSサーバーよりもはるかに分かりやすいです。
dnsmasq をセットアップするには、Raspberry Pi 上にサーバーをセットアップする必要がありますが、これはそれ自体が独立した作業です。Arch Linux Wiki には dnsmasq のセットアップ方法に関する非常に分かりやすい記事があり、メインの設定ファイル ( /etc/dnsmasq.conf ) についても詳細なドキュメントが用意されています。サーバーのセットアップが初めての方は、Raspberry Pi で Ubuntu を実行することをお勧めします。
1. DNSルックアップをキャッシュして読み込み時間を短縮できる
ローカルDNSサーバーを運用する主なメリットの一つは、サーバーがDNSルックアップをキャッシュして将来利用できることです。これは些細なことのように思えますが(結局のところ、ドメインのIPアドレスを取得するだけなので)、実際には大きな負担になる可能性があります。

ウィンドウの左側のリストには、CNN.com のホームページを開いたときに行われたすべてのドメインリクエストが表示されます。一部のブラウザプラグイン(Buffer など)は独自のリクエストを行うことに注意してください。
ウェブページを読み込む際、デバイスは10回以上のDNSルックアップを実行することがあります。もちろん、ウェブサイト自体もDNSルックアップの対象となりますが、今日のウェブサイトには、アニメーションから分析情報の収集まで、あらゆる機能のためのJavaScriptプラグインが組み込まれている場合があります。各サービスはそれぞれ独自のDNSルックアップを必要とします。ウェブサイトが画像や動画の配信にコンテンツ配信ネットワーク(CDN)を使用している場合は、これもまた別のルックアップとなります。さらに、広告要素やソーシャルメディアボタンなどもDNSルックアップの対象となります。
これらのIPアドレスをキャッシュすることで、Raspberry Piはローカルネットワーク上に存在するため、ネットワーク遅延を削減します。確かにここではほんの一瞬の話ですが、このほんの一瞬こそが、ISPから高帯域幅のインターネットプランを購入する際に人々が支払う料金なのです。
2. ドメインをLAN上のマシンにリダイレクトできます
dnsmasq の優れた機能の一つは、ローカルネットワークに1つ以上のドメインを設定し、デバイスをサブドメインとして自動的に割り当てることです。例えば、「alexlaptop」という名前のラップトップがあり、ネットワークドメインが「campbell.home」の場合、「 ping alexlaptop.campbell.home 」と入力することで、ネットワーク上のラップトップに ping を送信できます。
Dnsmasqでは、他のアドレスを事前に定義することもできます。これは、1台以上のコンピューターで実行しているサービスに便利です。例えば、「media.campbell.home」というアドレスを定義して、EmbyまたはPlexメディアサーバーを実行しているマシンのIPアドレスを指定したり、「ftp.campbell.home」というアドレスを定義して、ローカルFTPサーバーを指定したりできます。
1 台のマシンで複数のサービスを実行する場合は、複数のドメインを同じマシンに誘導し、NGINX をリバース プロキシとして使用してトラフィックを目的のポートにリダイレクトすることができます。
3. 広告に全力で取り組む
広告をブロックする方法は数多くありますが、より低レベルの方法の一つとして、ローカルマシンのhostsファイルを使用する方法があります。hostsファイルは、PCがIPアドレスを検索する際、DNSサーバーにリクエストを送信する前に最初に使用するファイルです。この方法は広告をブロックするのに効果的です。例えば、doubleclick.netのようなドメインを127.0.0.1(localhostとも呼ばれます)として定義することで、そのドメイン全体をブロックできるからです。広告コンテンツ自体を参照しようとすると、読み込みに失敗し、ウェブページ上に空白のセクションが表示されてしまいます。
これは素晴らしい機能ですが、一部のマルウェアや潜在的に望ましくないプログラムがhostsファイルを書き換えてしまう可能性があります。幸いなことに、dnsmasqを使えばPCの負担を軽減できます。
Dnsmasqは、hostsファイルのような動作を実現するいくつかの方法を備えています。まず、Raspberry Pi本体のhostsファイルを使用できます。あるいは、dnsmasqの設定ファイルを使用するようにdnsmasqに指示することもできます。最終的には、ローカルエリアネットワーク全体で有効な、hostsファイルのようなブラックリストが作成されます。

dnsmasq を使用して広告ドメインをブラックリストに登録している場合、この Google 検索の上位 3 つの結果のリンクは事実上壊れてしまいます。
どちらの方法を選択しても、最も一般的な広告ネットワークのドメインを含む、あらかじめ作成されたホストまたは dnsmasq 構成ファイルを見つけることができます。
しかし、核兵器を使うことには注意点があります。それは、壊したくないものを壊してしまうことがあるということです。私がいつも遭遇する例としては、Google検索が挙げられます。
Google検索の上位に表示される広告が、まさに私が求めているもの(例えば、探している企業のホームページ)であることがあります。しかし、「通常の」検索結果の前に表示される広告をクリックすると、リンクが壊れてしまいます。
ブラックリスト方式を使用すると、Google検索が機能しなくなるだけでなく、特定のウェブサイトの機能も一部損なわれます。また、多くのニュースサイトは広告トラフィックに依存して運営されているため、すべての広告ネットワークを一括でブロックすると、実際にサポートしたいサイトに悪影響を与える可能性があります。さらに、あなたのサイトを訪問したり、Wi-Fiを使用したりしたユーザーは、ウェブサイトが突然期待通りに動作しなくなったことに戸惑うかもしれません。
dnsmasq DNSサーバー経由でサイトのブラックリストを一時的に解除したい場合は、PCのDNS設定を手動で編集する必要があります。VPNが独自のDNS設定を提供している場合は、VPNを使用してローカルDNSを回避することもできます。
結論
他のあらゆることと同様に、独自のローカルサービスを運営するということは、自分自身がテクニカルサポートも担うことを意味します。Raspberry Piの電源が突然落ちたり、ネットワークから切断されたりすると、ローカルネットワークでのウェブ接続は事実上停止してしまいます(直接接続のIPアドレスは引き続き機能します)。そのため、私は通常、DHCP設定にバックアップDNSサーバーのIPアドレス(Googleの8.8.8.8など)を必ず設定するようにしています。こうすることで、デスクトップがシャットダウンされない限り(またはDHCPリースが期限切れにならない限り)、DHCPクライアント(私のデスクトップなど)はバックアップDNSサーバーに頼ることができます。
もう一つの懸念事項はセキュリティです。Raspberry Piは自宅のLANのファイアウォールとNATの内側に安全に配置できますが、それでも最新のセキュリティパッチを適用する必要があります。これは簡単な作業ですが、定期的なメンテナンス作業が必要になります。
とはいえ、コマンドラインでのハッキングに慣れていて、ローカルネットワークをもう少し細かく制御したい場合は、Raspberry PiをDNSサーバーとして使用することを検討してください。万が一、Raspberry Piが故障しても、DHCPとDNSの制御をルーターに委ねることができます。