(→axfrdnsの起動) |
(→tinydns (ndjbdns)を使う) |
||
行14: | 行14: | ||
TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。 | TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。 | ||
+ | |||
+ | '''tinydnsだけではTCPフォールバックがかかったときにDNSが引けなくなります''' | ||
== リポジトリからインストール == | == リポジトリからインストール == |
2018年9月20日 (木) 00:29時点における最新版
目次
tinydns (ndjbdns)を使う
訳あって、ndjbdnsをCentOS 7に入れて、tinydns/axfrdnsを使うことになったので。
ちなみに、tinydnsは、DNSパケットをUDPのみ受け付けます!
TCPは受け付けてくれないので注意しましょう。
TCP受付はaxfrdnsのお仕事です。
axfrdnsは、標準設定だと、ゾーン転送許可しちゃうので注意しましょう。
いくつかのサイトではtinydnsしか設定していない例を見かけます。
TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。
tinydnsだけではTCPフォールバックがかかったときにDNSが引けなくなります
リポジトリからインストール
EPELを追加します。
yum install epel-release yum update
パッケージを追加
インストール
yum install ndjbdns
設定
/etc/ndjbdns 以下にあるconfファイルを書き換えます
tinydns.conf
大体見れば分かる
IP=0.0.0.0とか、外から見えるIPに書き換えます
専用のユーザやグループを作るなら(その方が良いと思う)、そのUIDやGIDをUID=とGID=に整数値で書きます
標準の場所以外にdata.cdbを作るなら(専用のユーザディレクトリ以下にした方が良いと思う)、そのディレクトリをROOT=に書きます
あとはそのままでOK。
axfrdns.conf
AXFR=""と、""を指定します
指定しないと、ゾーン転送全許可されるので注意してください
UID/GID/ROOTはtinydns.confと同じです。
UID/GIDは別のユーザでも良いですが、ROOT=は、tinydns.confと場所を合わせましょう(じゃないと、TCPで同じデータが返せません)
data
DATA=で指定した場所に置くファイルです。
作った後、そのディレクトリでtinydns-dataって実行すればdata.cdbが作られます。
作り忘れるとDNSの更新が出来ないので注意
なお、オリジナルのMakefileと同様のMakefileを作っておくと楽です。
dataファイルの形式は tinydns側の情報を参照してください。
システム側の設定
firewalldの設定
firewalldでDNSを許可しないと駄目です。
firewall-cmd --add-service=dns --zone=public --permanent firewall-cmd --reload
こんな感じで追加しましょう。
tinydnsの起動
これは簡単です。
systemctl start tinydns
で起動して、
systemctl status -l tinydns
でエラーが出ないことを確認しましょう。
この時点で、53/UDPへの受付が出来ています。
dig any example.com @DNS-Server.example.com +notcp
とかで疎通確認してみましょう。
起動OKなら、
systemctl enable tinydns
として、再起動時に実行するように変更します。
axfrdnsの起動
これ、ハメポイントです。
systemdにはsocketというinetd的なモノがついています(何それ怖い)
ndjbdnsのaxfrdnsは、systemdのsocket経由で起動します。
で、そのsystemdのsocketをコピーして使わないと駄目です。
具体的には次のようにします。
cd /etc/systemd/system cp /lib/systemd/system/axfrdns.socket .
として、axfrdns.socketをコピーしてきます。
そして、コピーした(つまり、/etc/systemd/system/axfrdns.socketを)編集します(何それ怖い
ListenStream=127.0.0.1:53
この行を
ListenStream=0.0.0.0:53
に書き換えます。
どうも、0.0.0.0以外を指定すると、OS起動時にうまく動かないようです(何それ怖い
でも、OS起動後にsystemd start axfrdns.socketすると動きます。つまり、再起動すると起動しない罠にはまります(何それ怖い
そして、
systemctl start axfrdns.socket
で起動します。
この時点で、53/TCPへの受付が出来ています。
dig any example.com @DNS-Server.example.com +tcp
とかで疎通確認してみましょう。
逆に、
dig axfr example.com @DNS-Server.example.com
でエラーになることを確認しましょう!(なんか出てきたらゾーン転送が許可されています)
起動OKなら、
systemctl enable axfrdns.socket
として、再起動時に実行するように変更します。