提供: いつきメモ
移動: 案内検索
(設定)
(tinydns (ndjbdns)を使う)
 
(同じ利用者による、間の4版が非表示)
行14: 行14:
  
 
TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。
 
TCPで接続されるとDNSが引けなくなる病を発症するので気をつけましょう。
 +
 +
'''tinydnsだけではTCPフォールバックがかかったときにDNSが引けなくなります'''
  
 
== リポジトリからインストール ==
 
== リポジトリからインストール ==
行51: 行53:
  
 
UID/GIDは別のユーザでも良いですが、ROOT=は、tinydns.confと場所を合わせましょう(じゃないと、TCPで同じデータが返せません)
 
UID/GIDは別のユーザでも良いですが、ROOT=は、tinydns.confと場所を合わせましょう(じゃないと、TCPで同じデータが返せません)
 
  
 
=== data ===
 
=== data ===
行62: 行63:
  
 
なお、オリジナルのMakefileと同様のMakefileを作っておくと楽です。
 
なお、オリジナルの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

として、再起動時に実行するように変更します。