pdns-recursorでAAAAフィルタをかける


大変恥ずかしい話ではあるのですが、実家のネットワークはIPv6に今でも対応しておらず、しかもフレッツのアドレスが降ってくる為、IPv6のAAAAレコードが引ける状態だとそっちにアクセスしようとしてタイムアウトまで時間がかかる、という事が結構あります。そのうち対応する予定ですが、ひとまずAAAAフィルタでこの状況を凌ぐ事に。

ただし、フレッツ情報サイトにはアクセスさせる必要があるため、flets-east.jpだけは除外させます。

pdns-recursorでの設定方法

筆者の実家のDNSサーバーはpdns-recursorを利用しています。pdns-recursor自体にAAAAフィルタはありませんが、Luaスクリプトを組み込む事が可能で、これを使うと実現できます。

スクリプトの配置

AAAAフィルタのスクリプトはgithubを漁ったら見つけました。

/etc/pdns-recursor/scriptsというディレクトリを作成し、このスクリプトをそこに置きます。今回は下記のように配置しました。

$ cat /etc/pdns-recursor/scripts/filter-aaaa.lua
-- PowerDNS recursor: Filter AAAA records
-- Copyright (c) 2013-2019 SATOH Fumiyasu @ OSS Technology Corp., Japan
--               https://github.com/fumiyas/pdns-scripts
--               https://fumiyas.github.io/
(以下略)

除外ドメインの設定

スクリプトでは除外するドメインを指定する事ができるようになっていました。今回はflets-east.jpを除外させたいので、下記のように編集しました。

exclude_domains = {
  newDN('flets-east.jp'), <<<< 追加
  --newDN('google.com'),
  --newDN('microsoft.com'),
}

最後の「,」はあってもなくても大丈夫なようです。また、「--」はLuaスクリプトではコメント行です。最初から入ってるgoogleやmicrosoftはコメントされており機能しません。

pdns-recursorへの設定

除外ドメインの編集ができたらrecursor.confに下記の設定を加えます。

lua-dns-script=/etc/pdns-recursor/scripts/filter-aaaa.lua

設定したら再起動すれば有効になります。

# systemctl restart pdns-recursor

動作テスト

実際にv6アドレスがflets-eastを除いてアドレスが引けなくなっているか確認します。

$ dig @127.0.0.1 www.google.com AAAA +short
$ dig @127.0.0.1 facebook.com AAAA +short
$ dig @127.0.0.1 flets-east.jp AAAA +short
2404:1a8:ff29:3701::15

IPv6アドレスを持っているGoogleやfacebookは結果が返ってきませんが、flets-east.jpに限り結果が返ってきます。良い感じです。