iku8log

Webエンジニア、SEO、Web解析等々しております。タダのメモ。

Vagrantで作成した仮想マシンで、BIND9を使ってDNSを作成してみた

DNSの勉強がてら、VMにDNSを作成して、名前解決できるようにしてみました。 やはりこの辺の知識は、実践して初めて定着しますね。

※触りの設定だけしているので、あまり踏み込んでいません。 ※実行OSはCentOS7です。

全体の流れ

  • bind9をインストール&起動
  • DNSの設定ファイルを記述
  • IPとドメインの対応表(ゾーンファイル)を作成
  • サーバ使用するDNSを指定
  • bind9の設定反映(再起動)
  • 名前解決出来るかテスト

BIND9をインストール

まずはbind9をインストールします。bind9はDNSサーバになります。

sudo yum install -y named

named-chrootというディレクトリをマウントしてくれるものがあるのですが、今回はなしです。 chrootを使うと、セキュリティ的に何かと良いらしいので、実際に稼働するDNSでは必須ですね。

namedがインストールできたら、サービスを起動しておきます。

sudo systemctl start named

DNSファイルの設定

bind9の設定ファイルは /etc/named.confにあります。 ここからは、root権限のファイルしか編集しないので、rootになっておきましょう。

sudo su

以下、必要なところだけ書くので、適宜設定してみてください。

listen-on port 53 { 172.0.0.1; };
allow-query     { localhost; };

zone "local.net" IN {
       type master;
       file "local.net.zone";
};

listen-onは「問い合わせを受け付けるインターフェースのIP」らしいのですが...。はて? とにかく、このDNSを使うことのできるサーバのIPを記述しておくのかな。

allow-queryは「DNSへの問い合わせを許可するIP」だそうですが...。listen-onと何が違うのかw とにかく、これもDNSを使うことのできるサーバのIPを記述しておきましょう。

今回はDNSサーバのみしか使わないので、自分自身をさせばOKです。(listen-onで他サーバのIPを記述するとうまくいかないので、ネットワークを記述しましょう。192.168.33.0/24とか)

ゾーンファイルですが、今回はlocal.net.zoneという名前のファイルを用意し、そこに記述していくようにしました。 ゾーンファイルはIPアドレスとドメインの対応表ですね。

ゾーンファイルの設定

ゾーンファイルは/var/namad/local.net.zoneで作成しました。

$TTL 86400

@ IN SOA local.net root.local.net (
  2017121408     ; Serial
  3600           ; Refresh
  900            ; Retry
  604800         ; Expire
  86400          ; Minimum
)

@            IN NS ns
ns IN A  192.168.33.10

細かい設定は割愛します(まだ詳しくないので)。 nsをDNSサーバに割り当てます。 言い忘れていましたが、DNSサーバのIPは192.168.33.10です。Vagrantの初期設定のまま。

ns IN A  192.168.33.10

の部分が一番重要ですね。他サーバの名前解決をしたい場合は、この行を複製し、適宜IP等変えていってください。

サーバにDNSを設定

DNSの設定は終わりですが、DNSが乗っているサーバ自体、どのDNSで名前解決をするのか分からないのでその設定をします。(自分自身で解決するのですが)

/etc/resolv.confを利用します。

search local.net
nameserver 127.0.0.1

ここで注意するのが、192.168.33.10ではなく127.0.0.1であることです。 192..ではlisten-onで許可していないからです。listen-onでlocalhost(または192.168.33.10)と記述していれば通るようです。

また、search local.netの部分ですが、 これは、例えばping ns.local.netといちいち書かなくても、 ping nsとするとlocal.netを探しに行って、pingが通るようになります。

超余談ですが、僕はpingをピングと呼んでましたが、最近ピンと呼ぶようになりましたとさ。

名前解決テスト

では、実際にDNSがちゃんと動作しているか確認してみましょう。 と、その前に、今回設定したファイルの内容をDNSに反映するため、BIND9を再起動しましょう

sudo systemctl restart named

ではping飛ばしてみます。

ping ns

これで応答が帰ってくるようになっているはずです!

まとめ

今回は、DNSサーバ自体で名前解決を行いました。 せっかくDNSを立てているので、複数VM作って、それぞれに名前振って名前解決するほうが楽しいと思います(VMのresolv.confの設定は忘れずに)。

最後に今回の内容をまとめます。

  1. まず、BIND9をインストールしました
  2. DNSの設定ファイルで問い合わせ可能なIP設定、ゾーンファイルの指定をしました
  3. ゾーンファイルでIPとドメインの結びつけを行いました
  4. resolv.confにてそのサーバで使用するDNSを指定しました(今回は自サーバ)
  5. BIND9を再起動
  6. pingで名前解決テスト

ぱぱっとしたメモなので、軽い参考程度に。

スイッチ周り入門してみた

ただの備忘です。

キーワード

スイッチ周りについて

スイッチというのは、複数のPCをつなぐためのものです。 ハブ(リピータハブ)で良くね?と思いますが、それではダメなんですね。

スイッチとリピータハブではコリジョンドメインが違う?

まずリピータハブですが、これにA、B、CというPCがつながっているとします。

リピータハブでつながれたPC同士の通信は1対1のものしか許可されません。

例えば、AがBに話しかけます。Bが「なんだい?」とA、Bはお話(通信)を初めます。 AとBがお話(通信)している時、CがどんなにAと話したくても、「ダメ」と言われちゃうんですね。なるほど。

ここで、AとBが互いに話しかけようとした時、両者がぶつかって、うまく話すことができません。これを検知するのが「CD」

これら上記のことをまとめて「CSMA/CD方式」というらしいです。ざっくりしてますが..。 CS「だれか話ししてないかなと聞き耳を立てる」、MA「誰でも話かけられる」、CD「両者が互いに話しかけた時、衝突を検知する」

↑こんなことをしてうまく、話せるようにしてくれるんですね。 ここまでがリピータハブ。

じゃリピータハブじゃ何故ダメなのか? ABCにDも追加したとしましょう。 AとBは話をしている。 CはDと話がしたいけど、AとBが話をしているので話せない。

なんか変な光景じゃないですか?そこで、AとBのグループ、CとDのグループに分けてやります。よく話す者同士でね。

するとAとBで話が盛り上がっていても、CとDで話ができちゃうんですね。 この分けることの出来るものが、スイッチです。

スイッチにはポートが1〜4あり、1にA、2にB、3にC、4にDと指します。で、スイッチの設定でポート1と2は一つのグループ、3と4はもう一つ別のグループにします。 これでめでたしとなるわけです。

この会話でき、衝突が起こる可能性がある範囲をコリジョンドメインといいます。このコリジョンドメインを超えて話す場合はスイッチにMACアドレステーブルがあるのでそれを使います。このことをフィルタリング処理といいます。

リピータハブではAがBに話始めようとすると、CとDにも届くのですが、スイッチを使うことで届かなくなります。無駄なことはしないってことですね。

コリジョンドメインとブロードキャストドメイン

スイッチを使っていて、衝突が起こりうる範囲のことをコリジョンドメインと言いました。

ブロードキャストドメインはスイッチまたがって、繋がっているもの全てが対象になります。たぶん。 ブロードキャストドメインコリジョンドメインの範囲に抑えるなら、ルータが必要なようですね。

ルータの入門はまた今度。

Vagrantで作成した仮想マシンにVirtualHostの設定を行う

ホストOS: MacOSX ゲストOS: CentOS7 192.168.33.10

ゲストOSのApacheにバーチャルホストの設定を行う。バーチャルホスト名をmytestとする。

httpd.confファイルに以下を追記(ゲストOS)

<VirtualHost *:80>
    DocumentRoot "/home/vagrant"
    ServerName mytest
</VirtualHost>

/home/vagrantの権限を755とかにしておく。 Apache リスタート

ホストOS(Mac)でhostsファイルの設定

/etc/hostsに以下を追記(ホストOS)

192.168.33.10 mytest