(→tinydns (ndjbdns)を使う) |
(→tinydns (ndjbdns)を使う) |
||
(同じ利用者による、間の5版が非表示) | |||
行14: | 行14: | ||
TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。 | TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。 | ||
+ | |||
+ | '''tinydnsだけではTCPフォールバックがかかったときにDNSが引けなくなります''' | ||
== リポジトリからインストール == | == リポジトリからインストール == | ||
行29: | 行31: | ||
== 設定 == | == 設定 == | ||
/etc/ndjbdns 以下にあるconfファイルを書き換えます | /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を使う#tinydns.2Faxfrdns.E7.94.A8.E3.81.AE.E3.83.87.E3.83.BC.E3.82.BF|tinydns]]側の情報を参照してください。 | ||
+ | |||
+ | |||
+ | == システム側の設定 == | ||
+ | |||
+ | === firewalldの設定 === | ||
+ | |||
+ | firewalldでDNSを許可しないと駄目です。 | ||
+ | |||
+ | <pre>firewall-cmd --add-service=dns --zone=public --permanent | ||
+ | firewall-cmd --reload</pre> | ||
+ | |||
+ | こんな感じで追加しましょう。 | ||
+ | |||
+ | === tinydnsの起動 === | ||
+ | これは簡単です。 | ||
+ | |||
+ | <pre>systemctl start tinydns</pre> | ||
+ | |||
+ | で起動して、 | ||
+ | |||
+ | <pre>systemctl status -l tinydns</pre> | ||
+ | |||
+ | でエラーが出ないことを確認しましょう。 | ||
+ | |||
+ | この時点で、53/UDPへの受付が出来ています。 | ||
+ | |||
+ | <pre>dig any example.com @DNS-Server.example.com +notcp</pre> | ||
+ | |||
+ | とかで疎通確認してみましょう。 | ||
+ | |||
+ | 起動OKなら、 | ||
+ | |||
+ | <pre>systemctl enable tinydns</pre> | ||
+ | |||
+ | として、再起動時に実行するように変更します。 | ||
+ | |||
+ | === axfrdnsの起動 === | ||
+ | |||
+ | これ、ハメポイントです。 | ||
+ | |||
+ | systemdにはsocketというinetd的なモノがついています(何それ怖い) | ||
+ | |||
+ | ndjbdnsのaxfrdnsは、systemdのsocket経由で起動します。 | ||
+ | |||
+ | で、そのsystemdのsocketをコピーして使わないと駄目です。 | ||
+ | |||
+ | 具体的には次のようにします。 | ||
+ | |||
+ | <pre>cd /etc/systemd/system | ||
+ | cp /lib/systemd/system/axfrdns.socket . | ||
+ | </pre> | ||
+ | |||
+ | として、axfrdns.socketをコピーしてきます。 | ||
+ | |||
+ | そして、コピーした(つまり、/etc/systemd/system/axfrdns.socketを)編集します(何それ怖い | ||
+ | |||
+ | <pre>ListenStream=127.0.0.1:53</pre> | ||
+ | |||
+ | この行を | ||
+ | |||
+ | <pre>ListenStream=0.0.0.0:53</pre> | ||
+ | |||
+ | に書き換えます。 | ||
+ | |||
+ | どうも、'''0.0.0.0以外を指定すると、OS起動時にうまく動かないようです'''(何それ怖い | ||
+ | |||
+ | でも、OS起動後にsystemd start axfrdns.socketすると動きます。つまり、再起動すると起動しない罠にはまります(何それ怖い | ||
+ | |||
+ | そして、 | ||
+ | |||
+ | <pre>systemctl start axfrdns.socket</pre> | ||
+ | |||
+ | で起動します。 | ||
+ | |||
+ | この時点で、53/TCPへの受付が出来ています。 | ||
+ | |||
+ | <pre>dig any example.com @DNS-Server.example.com +tcp</pre> | ||
+ | |||
+ | とかで疎通確認してみましょう。 | ||
+ | |||
+ | 逆に、 | ||
+ | |||
+ | <pre>dig axfr example.com @DNS-Server.example.com</pre> | ||
+ | |||
+ | でエラーになることを確認しましょう!(なんか出てきたらゾーン転送が許可されています) | ||
+ | |||
+ | 起動OKなら、 | ||
+ | |||
+ | <pre>systemctl enable axfrdns.socket</pre> | ||
+ | |||
+ | として、再起動時に実行するように変更します。 |
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
として、再起動時に実行するように変更します。