Linuxサーバ運用マニュアル

第11話「ホストの追加,削除が必要なときは?」

基本的にコンピュータはホストを数字(IPアドレス)で管理しています。 しかしIPアドレスはただの数字で,人間には使いにくいものです。 そのためwww.ash.or.jpなどのホスト名をつけ,IPアドレスと対応させて管理しています。

ホストを追加するということは,このホスト名とIPアドレスの対応情報を登録する作業のことです。 登録された情報を元に,コンピュータはIPアドレスとホスト名を相互に変換します。 ホスト名からIPアドレスを検索することを正引き,IPアドレスからホスト名を検索することを逆引きと言います。

ホスト名とIPアドレスを変換するには,HOSTSファイルを利用する方法とDNSを利用する方法がありますので,それぞれについて解説していくことにします。また,ホスト情報を調査するnslookupコマンドについての簡単な解説もすることにします。

hostsファイルで管理する方法

hostsファイルというのは,
/etc/hosts
というファイルのことで,IPアドレスとホスト名の対応が書いてあるテキストファイルです。 単純でわかりやすいものですが基本的にはローカルネット内部の名前解決にしか使えません。

/etc/hostsの例
# hosts
127.0.0.1       localhost
10.0.1.1        gauntlet.lo.ash.or.jp gauntlet

10.0.1.1        sv01.lo.ash.or.jp
10.0.1.1        www.lo.ash.or.jp
10.0.1.2        sv02.lo.ash.or.jp
10.0.1.20       pc20.lo.ash.or.jp
10.0.1.21       pc21.lo.ash.or.jp
10.0.1.22       pc22.lo.ash.or.jp
10.0.1.23       pc23.lo.ash.or.jp
10.0.1.24       pc24.lo.ash.or.jp

ホストを追加する場合は,上記の例のようにIPアドレスとホスト名の対応をhostsファイルに追加するだけです。 また,上記の例で,10.0.1.1に,sv01とwwwの2つのホスト名を割り当てているように, 同一のIPアドレスに複数のホスト名を割り当てることも可能です。 削除する場合は,そのホスト名が書いてある行を削除してしまいます。

DNSを利用した例

DNSは,ドメインネームシステムの略で,簡単には,ホスト情報を分散管理するためのシステムです。 インターネットができた頃は,hostsファイルですべてのホスト名を管理していました。 しかし,hostsファイルによるホスト管理では,どこかで新しいホストが追加されるたびにhostsファイルを更新していかねばならず,ネットワークの規模が大きくなってくると,すべてのホスト情報をhostsファイルに記入していくことは非常に困難になります。 そこで,DNSを利用することになります。

DNS概念図

DNSの概念は,この図のようになっています。 どこかの誰かがwww.ash.or.jpを調べようとした場合,まず,jpドメインを管理するDNSがどこか教わり,そこでor.jpを管理するDNSを教わり,というように,参照先を教わりながら次々と質問していき,最終的にwww.ash.or.jpに対応するIPアドレスを得ることになります。 この場合,ashのDNSサーバは,ash内部の情報と,それ以外(jpやor.jp)の問い合わせ先だけを記録しておけばよく,hostsファイルでの管理よりもはるかに簡単になります。

セカンダリDNS

セカンダリDNSというのは,基本的には予備のDNSサーバです。 しかし,通常参照する側から見れば,プライマリとセカンダリは等価であり,負荷を分散させるために,どちらかを参照することになっています。 このためセカンダリDNSは,プライマリ側と同等の情報を貯える必要があり,プライマリDNSを修正した場合,それをチェックして情報を貯えます。

DNSの設定例

DNSの基本的な設定はnamed.confで行われます。 DNSで設定されたホスト名の情報は,基本的に全世界から参照できるようになります。

ホスト名を追加する場合は,named.confを編集するのではなく, named.confで指定された,zoneファイル(正引き用)とrevファイル(逆引き用)を修正することになります。

zoneファイルの例
;$ORIGIN	ash.or.jp.
@		IN	SOA	gwsv.ash.or.jp. root.ash.or.jp. (
				1999062901 ; Serial
				3600       ; Refresh after 1 hour
				300        ; Retry after 5 minutes
				604800     ; Expire after 1 week
				14400 )    ; Minimum TTL of 4 hour
		IN	NS	gwsv.ash.or.jp.
		IN	NS	ns-tk011.ocn.ad.jp.
		IN	MX	10 name.ash.or.jp.
		IN	A	210.154.87.18
;
gate		IN	A	210.154.87.17
name		IN	A	210.154.87.18
pc20		IN	A	210.154.87.20
pc21		IN	A	210.154.87.21
pc22		IN	A	210.154.87.22
pc23		IN	A	210.154.87.23
pc24		IN	A	210.154.87.24
;
mail		IN	CNAME	name
www		IN	CNAME	name
ftp		IN	CNAME	name

zoneファイルでは,以下のようにホスト名を登録します。

ホスト名	IN	A	IPアドレス

また,ホストに別名を割り当てる際には,以下のように指定します

別名		IN	CNAME	ホスト名

zoneファイルにはSOAレコードという部分があり,セカンダリDNSに対する制御情報が記入されています。 Serialという数字(上記の例では1999062901となっている)は, 前回よりも大きくなっていないとセカンダリDNSの参照が行われないので, 更新したら必ず変更しなければなりません。 年月日プラス連番という書き方をするのがわかりやすくていいでしょう。 また,Refreshにはセカンダリが次にチェックするまでの時間を指定します。 ここでは3600(秒)を指定しているので,1時間後にはセカンダリDNSにも設定が反映されます。 この数字を小さくすれば,設定の反映はすぐ行われますが,回線を無駄に消費してしまうことにもなりますので,注意してください。

revファイルの例
;$ORIGIN	16.87.154.210.in-addr.arpa.
@		IN	SOA	gwsv.ash.or.jp. root.ash.or.jp. (
				1999062901 ; Serial
				3600       ; Refresh after 1 hour
				300        ; Retry after 5 minutes
				604800     ; Expire after 1 week
				14400 )    ; Minimum TTL of 4 hour
		IN	NS	gwsv.ash.or.jp.
		IN	NS	ns-tk011.ocn.ad.jp.
		IN	A	255.255.255.240
;
17		IN	PTR	gate.ash.or.jp.
18		IN	PTR	name.ash.or.jp.
20		IN	PTR	pc20.ash.or.jp.
21		IN	PTR	pc21.ash.or.jp.
22		IN	PTR	pc22.ash.or.jp.
23		IN	PTR	pc23.ash.or.jp.
24		IN	PTR	pc24.ash.or.jp.

revファイルは,以下のようにホスト名を記述します。

IPアドレス	IN	PTR	ホスト名.ドメイン名.

ここではIPアドレスの最後の桁だけを記入すればよく, また,ホスト名はドメイン名まで含めて記入し,最後に「.」をつけます。

zoneファイルの修正時と同様に,SOAレコード(Serial)も修正しておきましょう。

なお,各ファイルを更新しただけでは設定は反映されません。 DNSサーバ(named)の再起動が必要になります。

Linux# ps aux | grep named
Linux# kill プロセス番号
(プロセス番号は,psで調べたnamedの番号)

DNSの場合の注意

DNSは,基本的に全世界へと公開されるものです。 ローカルネットで利用しているプライベートアドレスがインターネット側に流れていくのには問題があります。 このため,ローカルネット側のホスト情報は,外部からは参照されないような設定にしなければなりません。 また,逆に,インターネット側で利用するべきグローバルIPのホスト情報はDNSに登録しなければ意味がありません。

ローカルネットとインターネットの双方に接続されているゲートウェイマシンの場合,その設定には注意をする必要があります。 プライベートアドレスはhostsファイルで管理し,グローバルアドレスはDNSで管理するのも1つの方法でしょう。

両方をDNSで管理する場合は,named.confファイル内でzoneファイルやrevファイルを指定するとき,どこから参照できるかの情報を記入し,プライベートアドレスの情報が外部から参照されないようにする必要があります。それにはallow-query,allow-transferの2つを設定することが必要です。 queryは通常の問い合わせ。transferは通常セカンダリが行うような,全情報の取得です。

named.conf設定例(一部)
//
zone "lo.ash.or.jp" {
    type master;
    file "lo.ash.zone";
    allow-query {
        10.0.1/24;
        210.154.87.16/28;
    };
    allow-transfer {
        10.0.1/24;
        210.154.87.16/28;
    };
};

この例では,10.0.1/24と210.154.87.16/28,すなわち10.0.1.*と210.154.87.[16-30](ASHのグローバルアドレス)からのみ参照できる設定になっています。

nslookupコマンドの使い方

nslookupコマンドは,DNSサーバに対して,ホスト情報を問い合わせるコマンドです。 対話モードと非対話モードがあります。 非対話モードは,以下の形で実行されます。

Linux# nslookup ホスト名 問い合わせ先
Linux# nslookup IPアドレス 問い合わせ先

一般的には対話型として実行され,EXITで終わるまで,ホストとIPの名前解決を行います。

対話モードで使われるコマンド
exit 対話モードを終了する。
lserver ドメイン名 ホスト情報を問い合わせるサーバを変更する。
ls -d ドメイン名 ホスト情報の一覧(ゾーン転送の内容)を表示する。
set type=A 応答の種類をホストのインターネットアドレスに変更(デフォルト)
set type=MX メールサーバの情報を問い合わせるようになります。
set type=NS 指定したゾーンのネームサーバを問い合わせるようになります。
set type=SOA SOAレコードを問い合わせるようになります。データが更新されているかを確認する場合や,ネットワーク管理者を調べる場合に使います。

連載終了

今回で「Linuxサーバ運用マニュアル」の連載は終了です。 長い間、コラムを読んでいただきありがとうございます。

(ASHマルチメディア研究会/joe,はしもと)