b-shock. Fortress

PowerDNS Recursorの導入

経緯

FreeBSDのpkgngに、PowerDNS 4.1の更新が来た。
いつもどおりChefレシピを走らせて更新したら、どうやら動かなくなってしまっていた様だ。 こんなログを吐いていた。

1
2017-12-05T06:38:11.652799+09:00 dev3 pdns[50216]: Fatal error: Trying to set unknown parameter 'recursor'

従来のPowerDNSにはフォワードの機能があり、pdns.confに recursor=8.8.8.8 なんて 書いておけば、自分自身が知らないゾーンのクエリーをGoogleに丸投げすることができた。
設計思想上これはアリなのか?と思わないこともなかったが、コンテンツサーバとキャッシュサーバの いいとこどりで、LAN向けのネームサーバで使う分には悪くないと思って使ってたのだが。

ログをすぐみてわかった。ああ、recursor機能が使えなくなったのだなと。 公式にはご丁寧にも、こんなドキュメントまで用意されていた。

Migrating from using recursion on the Authoritative Server to using a Recursor

セキュリティ上、この仕様変更が必要だったことは理解するけど、メジャーバージョンアップでも ないところにこんな影響範囲が大きな修正、普通入れるか?ちょっとアレだなぁと思ったよ。

愚痴は程々にして、上記ドキュメントで案内している通り、仕方なくPowerDNS Recursorを導入する ことにした。
ウチの構成だとLAN内と開発環境に各1、都合ふたつのキャッシュサーバが必要。 開発環境向けのものをFreeBSDに、LAN向けのものをUbuntu Server(先日構築した録画サーバと同居) に構築していく。

Ubuntu Serverに導入

53/udpが競合する為、事前にsystemd-resolvedとかいうへんなのを止める必要あり。

1
2
sudo systemctl disable systemd-resolved
sudo service systemd-resolved stop

止めたらRecursorをインストール。

1
2
sudo apt install pdns-recursor
sudo systemctl enable pdns-recursor

systemctlを叩いたら怒られたので(以下)、

1
2
Synchronizing state of pdns-recursor.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pdns-recursor

指示通り以下を実行。

1
sudo /lib/systemd/systemd-sysv-install enable pdns-recursor

/etc/powerdns/recursor.confはこんな感じにした。

  • local-addressを0.0.0.0に設定しないと、ローカル(127.0.0.1)からしか接続できない。
  • allow-fromは見ての通り。これを指定しないと、ローカルアドレス全てを許可してしまう。
  • forward-zonesは、ゾーンとコンテンツサーバの関係を記述。

キャッシュサーバと、LANのゾーン情報を!レッツらまぜまぜ!って感じです。
recursor.confを書き換えたら、Recursorを再起動。できあがり!

1
sudo service pdns-recursor restart

FreeBSDに導入

引き続き同様に、Mac内にあるFreeBSDの仮想環境にRecursorを導入する。
MacのホストOS、全てのゲストOSがこのキャッシュサーバを参照して名前解決を行い、 外出中でも開発環境上での作業を円滑に進められるようにする。
さきほどUbuntuに導入したものと構成は似ており、開発環境のゾーン情報を持ったPowerDNSの コンテンツサーバをRecursorでラップし、外の名前解決も可能とする構成。

まず、既存の/usr/local/etc/pdns/pdns.confを修正する。

注目すべきはlocal-addressとlocal-port。
local-addressはともかく、53/udpがこの後インストールするRecursorと競合する為、 ポートをずらす対応は必須。ここでは10053にしている。
設定したらPowerDNSを再起動。

1
2
su
service pdns restart

ここまでお膳立てを整えたら、早速Recursorをインストールする。

1
2
3
su
pkg install powerdns-recursor
sysrc pdns_recursor_enable="YES"

先ほどと同様、/usr/local/etc/pdns/recursor.confを作成。

  • さきほどのLAN(192.168.100.1/24)に加え、開発環境(192.168.101.0/24)からのアクセスも許可。
  • LANのゾーン情報に加え、開発環境のゾーン情報も追加。

複数のフォワードを行うときは、この様にカンマで区切ることが出来る。
また、先ほどのPowerDNSのポートを10053にずらしたが、この場合は :10053 と書き加えて ポートを明示的に指定する。
以前は、このフォワードに相当する機能を実現する為にゾーン転送を行っていたが、今後は この様な大仰な対応は不要。関連する設定を削除している。この点ではシンプルになった。

キャシュサーバと!LANのゾーン情報と!開発環境のゾーン情報を!レッツらまぜまぜ! (もういい)