dnsmasq(DNS キャッシュサーバ)を使ったサイトアクセス制限

2018年2月18日

この記事は最初の投稿日から18年経過しています。内容が古い可能性があります。

DNS のキャッシュサーバとしてつかえる、dnsmasq というソフトウェアがあります。

ちょっと前から DHCP サーバの機能まで内蔵してしまったようでして LAN 内で便利に使えるソフトになっています。

もちろん、外部の DNS サーバへの問い合わせおよびそのキャッシュにもつかえるのですが、dnsmasq には、/etc/hosts の内容を読み、それを応答として返却する機能があります。

つまり、内部向けのプライベート DNS サーバとして使うことができ、LAN 内の WWW サーバに、www.localnet といった名前を簡単につけることができます。

この機能を使って次のようなことができます。

あまりアクセスしたくない(させたくない) Webサイトがあったとします。

例えば、広告ばかり出しているサイト、クリックしたら何やら ActiveX をインストールしようとするところ、どう考えても「追跡」が目的でしょうと思われるサイト….。

そういったサイトがある時、hosts に以下のように登録してやります。(ここでは、仮に、www.example.com とします。)

127.0.0.1  www.example.com

すると、dnsmasq がこの行を読み、LAN内のクライアントから、www.example.com の名前を引くと、127.0.0.1 が返却される、つまり、アクセス不能になります。*1

ずっとこれでやっていたのですが、面倒な場合が出てきました。

複数のホスト名があるときです。

この場合、複数行定義する必要があります。

127.0.0.1  www1.example.com
127.0.0.1  www2.example.com
127.0.0.1  www3.example.com
127.0.0.1  www4.example.com

これだと、ホスト名が増えたり変更になっても即応できませんし、そもそも書くのが面倒です。

何か良い方法はないかと思っていたのですが、そのものずばりの機能が、dnsmasq に存在していました。

dnsmasq の設定ファイル(dnsmasq.conf )のサンプルに、

# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
#address=/doubleclick.net/127.0.0.1

という設定があります。

まさにこれです。

release 1.12 で追加されたようなので、結構昔から合ったようです。ちゃんとドキュメントは読まないといけませんね。

早速これのコメントアウトをはずし、

# Add domains which you want to force to an IP address here.
# The example below send any host in doubleclick.net to a local
# webserver.
address=/example.com/127.0.0.1

とすると、example.com 配下の全ホストの名前解決が 127.0.0.1 になるようになりました。

address= を何行も並べると複数のドメインの定義が可能です。

*1:当然ながら、名前解決をしない、つまり IP アドレスを使っているリンクに対しては無力。

gentoo

Posted by toshyon