URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

BINDのゾーン情報をPowerDNSへインポート

 PowerDNS関連の一連のインストールが完了したので、ゾーンを作成していきます。
 今回は既存のDNSサーバ(BIND 9)をリプレースするので、まずはBINDのゾーンファイルの内容を移行することにします。

 環境の前提はCentOS 7へPowerDNSとPowerDNS-Adminのインストールが完了していること。

 既存のDNSサーバから"named.conf"を含む設定ファイル一式をコピーしてきます。CentOSでchrootを使っている環境であれば、標準構成では"/var/named/chroot"配下が該当すると思います。
 今回は、この設定ファイル一式をPowerDNSサーバの"/tmp/bind"へ配置しました。

# cd /tmp/bind
# ls
dev  etc  run  usr  var
# ls ./etc
localtime  named  named.conf  named.iscdlv.key  named.rfc1912.zones  named.root.key
pki  protocols  rndc.key  services
# ls ./var/named/
chroot  data  dynamic  example.local.zone  named.ca  named.empty  named.localhost
named.loopback  slaves

 この設定ファイル一式はCentOS標準のBINDを使っているDNSサーバの"/var/named/chroot"配下を全てコピーしてきたものです。そのため、"dev"等の移行に関係ないファイル/ディレクトリも含まれています。
 また、"example.local.zone"というファイルが独自のゾーンファイルで、以下のような内容になっています。

$TTL 3600 @ IN SOA ns.example.local. root.example.local. ( 2019010801 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS ns.example.local. ns IN A 172.16.11.250 gw01 IN A 172.16.11.1 www1 IN A 172.16.11.2 www2 IN A 172.16.11.3 db01 IN A 172.16.11.4

 これらのゾーンファイルをPowerDNSのデータベースへインポートするには、PowerDNSのパッケージに含まれている"zone2sql"コマンドを使います。このコマンドは、ゾーンファイルの内容をPowerDNSデータベースへインポートするためのSQL文へ変換します。
 ただし、今回の環境では単純に実行するとエラーになります。
 読み込む"named.conf"に記載されている関連ファイルのパスが、現在の配置場所"/tmp/bind"に合うように修正して再実行します。
 (下記の例では機械的に置き換えていますが、修正が必要な部分は"named.conf"の内容によって異なります。)

# sed -i "s/\/etc/\/tmp\/bind\/etc/g" ./etc/named.conf
# sed -i "s/\/var/\/tmp\/bind\/var/g" ./etc/named.conf
# sed -i "s/\/run/\/tmp\/bind\/run/g" ./etc/named.conf

 "zone2sql"を実行する際には、元となる"named.conf"の場所やデータベースの種類(今回はMySQL互換のため"--gmysql"を指定)を指定します。

# zone2sql --named-conf=./etc/named.conf --gmysql > zone.sql

 正常に完了すれば対象となったドメインやレコードの数が表示され、リダイレクト先のファイル(ここでは"zone.sql")へSQL文が出力されます。
 また、"named.conf"でタイプがMASTERゾーンであっても変換した後はNATIVEゾーンになってしまうため、必要に応じて修正します(SLAVEゾーンについては変換時に"--slave"オプションを付与すると"SLAVE"のまま維持される)。

# sed -i "s/NATIVE/MASTER/g" ./zone.sql

 作成したSQLをPowerDNS用データベースへ実行します。

# mysql -h 127.0.0.1 -u pdns -p powerdns < zone.sql

 PowerDNS-Adminへログインすると、インポートしたゾーン情報を確認することができるはずです。



 これで、今後はPowerDNS-Adminを使ってゾーン情報を管理できそうですね。
 ここでは省略しますが、念のため別のPC等からインポートしたゾーンの名前解決ができることも確認しておけばOKでしょう。