DNSサーバー · 1 min read · Jan 09, 2026
MySQLベースのDNSサーバーを運用する: MyDNS - ページ 3
3 dnscacheのインストール
MyDNSについて知っておくべき非常に重要なことは、外部(再帰的)DNSルックアップをサポートしていないということです。つまり、MyDNSは自分が権威を持つドメインに対してのみ回答を提供します!例えば、www.google.comのような他のドメインを解決したい場合は、システムにdnscacheのようなDNSリゾルバをインストールする必要があり、別のIPアドレスにインストールする必要があります。DNSサーバー(MyDNS)とDNSリゾルバ(dnscache)がそのように分離されている理由を知りたい場合は、こちらをご覧ください: http://cr.yp.to/djbdns/separation.html
通常、ISPは自宅やオフィスでのインターネット接続に使用するネームサーバーのIPアドレスを提供しますので、ワークステーションはwww.google.comのような名前を解決できます。ネームサーバーのIPアドレスは実際にはdnscacheのようなDNSリゾルバのIPアドレスです。さて、顧客に独自のネームサーバーのIPアドレスを提供したい場合は、DNSリゾルバを設定し、そのDNSリゾルバのIPアドレスを顧客に提供する必要があります。
さて、サーバーに1つのIPアドレスしかない場合、「よし、MyDNSを127.0.0.1にバインドし、dnscacheを私のパブリックIPアドレスにバインドしてこのボトルネックを回避しよう」と言うことができます。これは悪いアイデアである理由を知りたい場合は、こちらをお読みください: http://www.fefe.de/djbdns/#sameip
システムにDNSリゾルバをインストールしたくない場合は、このセクションをスキップできます。
さて、2つのパブリックIPアドレス、1.2.3.4と1.2.3.5があり、MyDNSを1.2.3.4でリッスンさせ、dnscacheを1.2.3.5でリッスンさせたいとしましょう。
dnscacheをインストールするための手順は次のとおりです:
groupadd dns
useradd -M -g dns -s /sbin/nologin -c DNS-Cache-User dnscache
useradd -M -g dns -s /sbin/nologin -c TinyDNS-User tinydns
useradd -M -g dns -s /sbin/nologin -c DNSlog-User dnslog
dnscacheのinitスクリプトを作成します:
cd /usr/local/sbin
wget http://www.servershak.com/dns/dnsctl
chmod 700 dnsctl
ln -s /usr/local/sbin/dnsctl /etc/init.d/dnsctl
システム起動リンクを作成します:
Debianの場合:
update-rc.d dnsctl defaults
FedoraおよびRedHatの場合:
chkconfig –levels 235 dnsctl on
次に、dnscacheをコンパイルしてインストールします:
cd /usr/local/src
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar -zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check
mkdir -p /var/package
chmod 1755 /var/package
cd /var/package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd /var/package/admin/daemontools-0.76
package/install
cd /usr/local/src
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar -xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
make
make setup check
dnscache-conf dnscache dnslog /etc/dnscache 1.2.3.5
ln -s /etc/dnscache /service
touch /etc/dnscache/root/ip/1.2.3
これでdnscacheは1.2.3.5でリッスンしています。次に、MyDNSに1.2.3.4のみにリッスンさせる必要があります。したがって、/etc/mydns.confのlistenディレクティブを変更する必要があります:
| listen = 1.2.3.4 |
そしてMyDNSを再起動します:
/etc/init.d/mydns restart
これで1.2.3.5でドメイン名を解決しようとすると、回答が得られるはずです。例えば、www.google.comを解決するには、次のように実行します。
dig @1.2.3.5 www.google.com
同様に、MyDNSが処理するドメイン(例えばwww.somedomain.com)を解決できるはずですが、今回は1.2.3.4を掘ります:
dig @1.2.3.4 www.somedomain.com
4 プライマリDNSサーバーからセカンダリDNSサーバーへのゾーンとレコードの取得
プライマリDNSサーバーとセカンダリDNSサーバーの両方がMyDNSを使用している場合、プライマリからセカンダリDNSサーバーにデータを取得するための3つの方法があります:
- 従来の方法: ゾーントランスファーを使用できます。したがって、/etc/mydns.confでallow-axfr = noをallow-axfr = yesに変更し、プライマリDNSサーバーでMyDNSを再起動する必要があります。それに加えて、転送すべきゾーンのsoaテーブルのxfer列にセカンダリDNSサーバーのIPアドレスを指定する必要があります。さらに、プライマリDNSのファイアウォールがポート53(TCPおよびUDP)をブロックしていないことを確認してください。
- プライマリDNSとセカンダリDNSが同じMySQLデータベースを使用します。この解決策には1つの欠点があります: MySQLサーバーが失敗すると、プライマリとセカンダリDNSの両方が同時に失敗します…
- 推奨される解決策: MySQLデータベースのレプリケーションを使用して、プライマリからセカンダリDNSにデータを転送します。プライマリDNSのファイアウォールがMySQLポート(通常は3306)をブロックしていないことを確認してください。
MySQLレプリケーションを使用することをお勧めします。この設定方法について非常に詳細なガイドをこちらに書いています: https://www.howtoforge.com/mysql_database_replication ので、ここでこのトピックを再度カバーする必要はありません。
リンク
- MyDNS: http://mydns.bboy.net
- dnscache: http://cr.yp.to/djbdns/dnscache.html
- phpMyAdmin: http://www.phpmyadmin.net
- MyDNSConfig: http://www.mydnsconfig.org
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。