提供: いつきメモ
移動: 案内検索
(dataのサンプル)
 
(同じ利用者による、間の8版が非表示)
行7: 行7:
 
EPELを追加します。
 
EPELを追加します。
  
<pre>yum install epel-release<br>yum update</pre>
+
<pre>yum install epel-release
 +
yum update</pre>
  
 
== パッケージを追加 ==
 
== パッケージを追加 ==
行32: 行33:
  
 
ソースを拾ってきて、展開します。
 
ソースを拾ってきて、展開します。
<pre>wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz<br>tar xvzf djbdns-1.05.tar.gz</pre>
+
<pre>wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
 +
tar xvzf djbdns-1.05.tar.gz</pre>
  
 
djbdns-1.05というディレクトリが出来るので、その中へ移動して、弄ります。djb系ツールではお約束ですが。
 
djbdns-1.05というディレクトリが出来るので、その中へ移動して、弄ります。djb系ツールではお約束ですが。
行39: 行41:
 
<pre>extern int errno;</pre>
 
<pre>extern int errno;</pre>
 
これを
 
これを
<pre>#include &gt;errno.h&lt;</pre>
+
<pre>#include &lt;errno.h&gt;</pre>
 
と書き換えます。
 
と書き換えます。
  
行69: 行71:
  
 
=== 使用するユーザーの作成 ===
 
=== 使用するユーザーの作成 ===
<pre>adduser tinydns<br>adduser axfrdns</pre>
+
<pre>adduser tinydns
 +
adduser axfrdns</pre>
  
 
=== tinydnsのディレクトリ・ファイル群設定 ===
 
=== tinydnsのディレクトリ・ファイル群設定 ===
行107: 行110:
 
次に、systemctl start tinydnsとして、デーモンを起動します。
 
次に、systemctl start tinydnsとして、デーモンを起動します。
  
お約束で、systemctl status tinydnsでエラーが出ていないのを確認したら、systemctl enable tinydnsとして、再起動時に起動する陽にしておきましょう。
+
お約束で、systemctl status tinydnsでエラーが出ていないのを確認したら、systemctl enable tinydnsとして、再起動時に起動するようにしておきましょう。
  
 
これで、tinydnsの設定は終わりです。
 
これで、tinydnsの設定は終わりです。
行116: 行119:
 
tcp/53を使うために、axfrdnsも設定します。
 
tcp/53を使うために、axfrdnsも設定します。
  
mkdir /var/service/tinydns; cd /var/service/tinydnsとして、その中で作業します。
+
mkdir /var/service/axfrdns; cd /var/service/axfrdnsとして、その中で作業します。
  
 
必要なディレクトリを作ります。
 
必要なディレクトリを作ります。
行157: 行160:
  
 
[Service]
 
[Service]
ExecStart=/usr/bin/envdir /var/service/axfrdns/env /usr/bin/envuidgid axfrdns /u
+
ExecStart=/usr/bin/envdir /var/service/axfrdns/env /usr/bin/envuidgid axfrdns /usr/bin/softlimit -d300000 /usr/bin/tcpserver -vDRHl0 -x /var/service/axfrdns/tcp.cdb -- サービスを起動するIP 53 /usr/local/bin/axfrdns
sr/bin/softlimit -d300000 /usr/bin/tcpserver -vDRHl0 -x /var/service/axfrdns/tcp.cdb -- <i>サービスを起動するIP</i> 53 /usr/local/bin/axfrdns
+
 
ExecReload=/bin/kill -HUP $MAINPID
 
ExecReload=/bin/kill -HUP $MAINPID
 
KillMode=process
 
KillMode=process
行172: 行174:
 
次に、systemctl start axfrdnsとして、デーモンを起動します。
 
次に、systemctl start axfrdnsとして、デーモンを起動します。
  
お約束で、systemctl status axfrdnsでエラーが出ていないのを確認したら、systemctl enable axfrdnsとして、再起動時に起動する陽にしておきましょう。
+
お約束で、systemctl status axfrdnsでエラーが出ていないのを確認したら、systemctl enable axfrdnsとして、再起動時に起動するようにしておきましょう。
  
これで、tinydnsの設定は終わりです。
+
これで、axfrdnsの設定は終わりです。
  
 
== tinydns/axfrdns用のデータ ==
 
== tinydns/axfrdns用のデータ ==
行180: 行182:
  
 
Makefile
 
Makefile
 +
 
ここで、/usr/local/bin/tinydns-dataの前は「タブ文字」です。スペースにしないように気をつけて下さい。
 
ここで、/usr/local/bin/tinydns-dataの前は「タブ文字」です。スペースにしないように気をつけて下さい。
 
<pre>data.cdb: data
 
<pre>data.cdb: data
行214: 行217:
 
いわゆるMXレコードです。
 
いわゆるMXレコードです。
  
@<i>ドメイン名</i>:<i>MX先ののIPアドレス</i>:<i>MX先のアドレス</i>:<i>優先度<i>
+
@<i>ドメイン名</i>:<i>MX先のIPアドレス</i>:<i>MX先のアドレス</i>:<i>優先度</i>
  
 
というフォーマットになります。
 
というフォーマットになります。
行233: 行236:
  
 
というフォーマットになります。
 
というフォーマットになります。
 +
 +
* Cで開始
 +
いわゆるCNAMEレコードです。
 +
 +
C<i>ドメイン名</i>:<i>CNAME先</i>
 +
 +
というフォーマットになります。
 +
 +
* &amp;で開始
 +
いわゆるNS+Aレコードで、権限委任するものとなります。
 +
 +
&amp;<i>ドメイン名</i>:<i>ホスト名のIPアドレス</i>:<i>ホスト名</i>
 +
 +
というフォーマットになります。
 +
 +
=== dataのサンプル ===
 +
<pre># example.comドメインを、192.168.10.1のns1.example.comと、
 +
# IPは分からないけど、ns20.example.netで管理する
 +
.example.com:192.160.10.1:ns1.example.com
 +
.example.com::ns20.example.net
 +
 +
# www.example.comのIPアドレスを192.168.22.1にする
 +
+www.example.com:192.168.22.1
 +
 +
# ~@example.comのメールアドレスを、mail1.example.com、優先順位30で受ける
 +
@example.com::mail1.example.com:30
 +
 +
# mail1.example.comのIPアドレスを192.168.33.1にして、
 +
# 有効期限を600秒に設定する
 +
+mail1.example.com:192.168.33.1:600
 +
 +
# www2.example.comを引くと、www44.example.netを参照するようにする
 +
Cwww2.example.com:www44.example.net
 +
 +
# www.example.comのTXTレコードに、google-site-verification=XYZを設定する
 +
'www.example.com:google-site-verification=XYZ
 +
 +
# sub.example.comを、IPアドレス192.168.55.1のns5.example.comと、
 +
# IPは分からないけど、ns60.example.netで管理する
 +
&sub.example.com:192.168.55.1:ns5.example.com
 +
&sub.example.com::ns60.example.net</pre>

2018年9月19日 (水) 22:32時点における最新版

tinydnsを使う

何故未だにtinydnsか?

管理しやすいからだよ!(笑)

リポジトリからインストール?

EPELを追加します。

yum install epel-release
yum update

パッケージを追加

djbdnsなのですが、どうもndjbdnsって名前になってるっぽい?

ndjbdns.x86_64 : New djbdns: usable djbdns

と言う訳で、この子を使うことにする。

インストール

yum install ndjbdns

何と、ucspi-tcpとバッティングします(笑)

ucspi-tcpを使ってなければコレで良いのですが……使っているので、別の方法を取ります(苦笑


ソースからインストール!

色々調べていたのですが、諦めました。

どうせ今回使うのは、tinydnsとaxfrdnsだけですので、ソースから入れちゃいます。

適当な場所(~/srcにします)で作業します。

ソースを拾ってきて、展開します。

wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar xvzf djbdns-1.05.tar.gz

djbdns-1.05というディレクトリが出来るので、その中へ移動して、弄ります。djb系ツールではお約束ですが。

error.h

extern int errno;

これを

#include <errno.h>

と書き換えます。

で、makeと入力します。

エラーが出ます。

./compile: line 3: exec: gcc: not found

gcc入れるのを忘れてました。

yum install gcc

色々入りますが、まぁ良いでしょう。

気を取り直してmakeします。

今回は標準のインストーラーは使わずに、必要なモノだけを、/usr/local/binに直接コピーします。

cp axfr-get axfrdns dnsip dnsipq dnsmx dnsname dnsq dnsqr dnstrace dnstracesort dnstxt tinydns tinydns-data /usr/local/bin

手動でインストールやっほい。

手動で設定

今回は自動設定ユーティリティを使わないので、自力で環境を作ります。

色々とディレクトリを作る必要がありますが、今回は/var/service以下に作りたいと思います。 daemontoolsを併用する場合はこのディレクトリは避けて下さい。/serviceと被ってヤバいです。

まず、mkdir /var/serviceします。

使用するユーザーの作成

adduser tinydns
adduser axfrdns

tinydnsのディレクトリ・ファイル群設定

mkdir /var/service/tinydns; cd /var/service/tinydnsとして、その中で作業します。

必要なディレクトリを作ります。

mkdir env root

envは環境変数、rootはデータが入ります。

env/IPというファイルに、tinydnsがBINDしたいIPを書きます。

要するに、DNSサーバーのIPアドレスを書きます。

env/ROOTというファイルに、先ほど作ったrootのパスを書きます(/var/service/tinydns/rootとだけ書く)

tinydnsの起動ファイルを作成

/etc/systemd/systemで、次のファイルを作ります。

tinydns.service

[Unit]
Description=tinydns server daemon
After=syslog.target network.target auditd.service

[Service]
ExecStart=/usr/bin/envuidgid tinydns /usr/bin/envdir /var/service/tinydns/env /usr/bin/softlimit -d300000 /usr/local/bin/tinydns
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
SyslogIdentifier=tinydns
SyslogFacility=daemon
SyslogLevel=info

[Install]
WantedBy=multi-user.target

次に、systemctl start tinydnsとして、デーモンを起動します。

お約束で、systemctl status tinydnsでエラーが出ていないのを確認したら、systemctl enable tinydnsとして、再起動時に起動するようにしておきましょう。

これで、tinydnsの設定は終わりです。

axfrdnsのディレクトリ・ファイル群設定

tinydnsだけだと、udp/53でしか起動しません。

tcp/53を使うために、axfrdnsも設定します。

mkdir /var/service/axfrdns; cd /var/service/axfrdnsとして、その中で作業します。

必要なディレクトリを作ります。

mkdir env

envは環境変数を格納します。

env/IPというファイルに、axfrdnsがBINDしたいIPを書きます。tinydnsのものと同じヤツです。

要するに、DNSサーバーのIPアドレスを書きます。

env/ROOTというファイルに、tinydns/rootのパスを書きます(今回は/var/service/tinydns/rootとだけ書く)

めんどくさいなら、/var/service/tinydns/envをコピーすると良いでしょう。

次に、/var/service/axfrdns/tcpに、次のように書きます。

:allow,AXFR=""
:deny

これは、tcpアクセスを許可するけど、ゾーン転送は許可しない設定になります。

次に、tcp.cdbを作るルールを作ります。

こういうMakefileを作ります。

ここで、tcprulesの前は「タブ文字」です。スペースにしないように気をつけて下さい。

tcp.cdb: tcp
        tcprules tcp.cdb tcp.tmp < tcp

※上の内容は都合上スペースで区切られていますので、コピペする場合注意して下さい。

この状態で、makeと入力すると、tcp.cdbが作られているはずです。

axfrdnsの起動ファイルを作成

/etc/systemd/systemで、次のファイルを作ります。

axfrdns.service

[Unit]
Description=axfrdns server daemon
After=syslog.target network.target auditd.service

[Service]
ExecStart=/usr/bin/envdir /var/service/axfrdns/env /usr/bin/envuidgid axfrdns /usr/bin/softlimit -d300000 /usr/bin/tcpserver -vDRHl0 -x /var/service/axfrdns/tcp.cdb -- サービスを起動するIP 53 /usr/local/bin/axfrdns
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
SyslogIdentifier=axfrdns
SyslogFacility=daemon
SyslogLevel=info

[Install]
WantedBy=multi-user.target

次に、systemctl start axfrdnsとして、デーモンを起動します。

お約束で、systemctl status axfrdnsでエラーが出ていないのを確認したら、systemctl enable axfrdnsとして、再起動時に起動するようにしておきましょう。

これで、axfrdnsの設定は終わりです。

tinydns/axfrdns用のデータ

/var/service/tinydns/rootに移動して、次のファイルを作ります。

Makefile

ここで、/usr/local/bin/tinydns-dataの前は「タブ文字」です。スペースにしないように気をつけて下さい。

data.cdb: data
        /usr/local/bin/tinydns-data

※上の内容は都合上スペースで区切られていますので、コピペする場合注意して下さい。

data

DNSの内容を書きます

dataを更新したら、makeをしておきましょう。勝手にdata.cdbが作られるはずです。

data(tinydns-data)のフォーマット

1行1指示で書きます。

1文字目がドメインレコードタイプになります。

詳細はググって貰うとして(笑)

よく使うパターンだけを書いておきます。

  • #で開始

コメントです

  • .で開始

いわゆるNSレコードです。

.委任されたドメイン名:ホスト名のIPアドレス:ホスト名

というフォーマットになります。

ホストのIPアドレスはここで省略して、+で指定する事も出来ます。

  • @で開始

いわゆるMXレコードです。

@ドメイン名:MX先のIPアドレス:MX先のアドレス:優先度

というフォーマットになります。

MX先のIPアドレスはここで省略して、+で指定する事も出来ます。

  • +で開始

いわゆるAレコードです。

@ドメイン名:ドメイン名のIPアドレス

というフォーマットになります。

  • 'で開始

いわゆるTXTレコードです。

'ドメイン名:ドメイン名のTXT内容

というフォーマットになります。

  • Cで開始

いわゆるCNAMEレコードです。

Cドメイン名:CNAME先

というフォーマットになります。

  • &で開始

いわゆるNS+Aレコードで、権限委任するものとなります。

&ドメイン名:ホスト名のIPアドレス:ホスト名

というフォーマットになります。

dataのサンプル

# example.comドメインを、192.168.10.1のns1.example.comと、
# IPは分からないけど、ns20.example.netで管理する
.example.com:192.160.10.1:ns1.example.com
.example.com::ns20.example.net

# www.example.comのIPアドレスを192.168.22.1にする
+www.example.com:192.168.22.1

# ~@example.comのメールアドレスを、mail1.example.com、優先順位30で受ける
@example.com::mail1.example.com:30

# mail1.example.comのIPアドレスを192.168.33.1にして、
# 有効期限を600秒に設定する
+mail1.example.com:192.168.33.1:600

# www2.example.comを引くと、www44.example.netを参照するようにする
Cwww2.example.com:www44.example.net

# www.example.comのTXTレコードに、google-site-verification=XYZを設定する
'www.example.com:google-site-verification=XYZ

# sub.example.comを、IPアドレス192.168.55.1のns5.example.comと、
# IPは分からないけど、ns60.example.netで管理する
&sub.example.com:192.168.55.1:ns5.example.com
&sub.example.com::ns60.example.net