前のページ 次のページ 目次

11. ネットワーク用デーモンの設定

ネットワークを実際に機能させるには、まだいくつかのファイルが必要です。 残されたファイルは、ネットワーク用のソフトウェアを高レベルで設定するた めのもので、中でも重要なものについては後の節で触れることにします。しか し、以下に触れるファイル以外にもネットワークの設定に関わるファイルは存 在しています。それらはネットワークの仕組みを理解するうちにわかってくる ことと思います。

11.1 /etc/rc.d/rc.inet2 (rc.net の後半部)

この文書を、ここまで順に読んできた人ならそれぞれのネットワークデバイス を正しいアドレスで設定し、ネットワークの設定に必要なルーティングもきち んと設定できていることと思います。次に必要なのは、もう少し高レベルのネッ トワーク用ソフトウェアを設定することです。

設定についての詳細は Olaf の "Network Administrators Guide" に詳しく説明されているので、この本をぜひ一読してみてください。"NAG" を 読めば、以下に示すファイルのうちのどの部分を利用すべきか、どの部分を含 めないべきか(こちらの方が重要)がわかるでしょう。少しセキュリティの面に ついても触れておきましょう。ネットワーク用のサービスを多く提供しようと すればするほど、セキュリティホールも多くなるので、最小限必要な機能だけ を動かすようにしましょう。

ネットワークが機能するために、バックグラウンドで動いている極めて重要な デーモン(daemons)がいくつかあります。各々の詳細についてはマニュ アルページを参照してもらう方がいいでしょう。代表的なデーモンを以下に示 します。

inetd

inetd はそれぞれのプロセスのバックグラウンドに居て、インター ネット経由のサービスを処理するデーモンです。inted は必要な時 に必要なサービス用のプログラムを起動するので、それらのサービス用のデー モンを常に起動しておく必要はありません。telnetftp といった特定のサービスを使いたいというリクエストが届いた 場合、inetd/etc/services をチェックして、そのリ クエストを処理するためのサーバープログラムを見つけて起動し、以後の処理は そのサーバーに委ねます。ちょうどインターネット経由のサービスの受付処理を するサーバーと考えればいいでしょう。inetd には echodiscard、テスト用のサービスリクエストの発生機能といったいくつ かの簡単なサービスが組みこまれてもいます。inetd は動かそうと しているネットワーク用のサービスの全てを処理するのではなく、それらの中 の代表的なものを処理します。udp を使ったサービスや WWW のサー バ、mud のサーバーのように、自分で接続を多重化するようなサービスは inetdとは独立に起動されるのが普通です。通常、そのようなサービ スを提供するプログラムでは、附属のドキュメントで inetd 経由で 使うべきか否か書いてあるはずです。

syslogd

syslogd はシステムのログ(運用記録)を処理するためのデーモンで す。syslogd は、自分宛てに送られたメッセージを受けとり、 /etc/syslogd.conf ファイルに記載されているルールに従って、そ のメッセージを適切な場所へ送ります。例えば、ある種のメッセージはコンソー ルとログファイルの両方に送ってもらいたいが、その他のメッセージはログファ イルのみでいいような場合、syslogd を使ってそれらの行き先を分 けることが可能です。

11.2 rc.inet2 ファイルの例

以下に示すものは、Fred が作成した rc.inet2 ファイルの例です。サービス 番号の大きいものから起動するようになっていますので、実際に動かしたいも の以外は削除してください。削除するには、不要な部分を単純に削除してしま うか、if から fi で囲まれた部分をコメントアウトする ようにしてください。全ての設定は、まず必要なファイルの有無をチェックし て、それらが存在していれば何を起動したかを示すためのメッセージを出力し、 実際のコマンドを適切な引数を付けてバックグラウンドで動くように起動して います。それぞれのデーモンについての詳細は "Network Administrators Guide" か、関連するマニュアルページを参照ください。

#! /bin/sh
#
# rc.inet2      This shell script boots up the entire INET system.
#               Note, that when this script is used to also fire
#               up any important remote NFS disks (like the /usr
#               distribution), care must be taken to actually
#               have all the needed binaries online _now_ ...
#
# Version:      @(#)/etc/rc.d/rc.inet2  2.18    05/27/93
#
# Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#

# Constants.
NET="/usr/sbin"
IN_SERV="lpd"
LPSPOOL="/var/spool/lpd"

# At this point, we are ready to talk to The World...
echo -e "\nMounting remote file systems ..."
/bin/mount -t nfs -v            # This may be our /usr runtime!!!

echo -e "\nStarting Network daemons ..."
# Start the SYSLOG daemon.  This has to be the first server.
# This is a MUST HAVE, so leave it in.
echo -n "INET: "
if [ -f ${NET}/syslogd ]
then
echo -n "syslogd "
${NET}/syslogd
fi

# Start the SUN RPC Portmapper.
if [ -f ${NET}/rpc.portmap ]
then
echo -n "portmap "
${NET}/rpc.portmap
fi

# Start the INET SuperServer
# This is a MUST HAVE, so leave it in.
if [ -f ${NET}/inetd ]
then
echo -n "inetd "
${NET}/inetd
else
echo "no INETD found.  INET cancelled!"
exit 1
fi

# Start the NAMED/BIND name server.
# NOTE: you probably don't need to run named.
#if [ ! -f ${NET}/named ]
#then
#        echo -n "named "
#        ${NET}/named
#fi

# Start the ROUTEd server.
# NOTE: routed is now obsolete. You should now use gated.
#if [ -f ${NET}/routed ]
#then
#        echo -n "routed "
#        ${NET}/routed -q #-g -s
#fi

# Start the GATEd server.
if [ -f ${NET}/gated ]
then
echo -n "gated "
${NET}/gated
fi

# Start the RWHO server.
if [ -f ${NET}/rwhod ]
then
echo -n "rwhod "
${NET}/rwhod -t -s
fi

# Start the U-MAIL SMTP server.
if [ -f XXX/usr/lib/umail/umail ]
then
echo -n "umail "
/usr/lib/umail/umail -d7 -bd </dev/null >/dev/null 2>&1 &
fi

# Start the various INET servers.
for server in ${IN_SERV}
do
if [ -f ${NET}/${server} ]
then
                echo -n "${server} "
                ${NET}/${server}
fi
done

# Start the various SUN RPC servers.
if [ -f ${NET}/rpc.portmap ]
then
if [ -f ${NET}/rpc.ugidd ]
then
                echo -n "ugidd "
                ${NET}/rpc.ugidd -d
fi
if [ -f ${NET}/rpc.mountd ]
then
                echo -n "mountd "
                ${NET}/rpc.mountd
fi
if [ -f ${NET}/rpc.nfsd ]
then
                echo -n "nfsd "
                ${NET}/rpc.nfsd
fi

# Fire up the PC-NFS daemon(s).
if [ -f ${NET}/rpc.pcnfsd ]
then
                echo -n "pcnfsd "
                ${NET}/rpc.pcnfsd ${LPSPOOL}
fi
if [ -f ${NET}/rpc.bwnfsd ]
then
                echo -n "bwnfsd "
                ${NET}/rpc.bwnfsd ${LPSPOOL}
fi

fi
echo network daemons started.
# Done!

11.3 その他ネットワークの設定に必要なファイル

ネットワーク経由で接続してきた人にあなたのマシンをホストとして提供する には、これ以外にもいくつかの設定ファイルが必要です。Slackware や RedHat といったディストリビューションを使ってインストールしたなら、必 要なファイルは作成されているはずなので、大丈夫かどうかをチェックして、 もしダメなら以下に示すサンプルを利用してください。

/etc/inetd.conf

/etc/rc.d/rc.inet2 の中で inetdsyslogd、 その他の rpc サーバーを起動しています。inetd には、 起動するデーモン類を指定するためのファイルが必要で、 /etc/inetd.conf というファイルを利用しています。

以下に示すものは単純な /etc/inetd.conf の例です。

#
# The internal services.
#
# Authors:      Original taken from BSD UNIX 4.3/TAHOE.
#               Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
echo    stream tcp nowait root  internal
echo    dgram  udp wait   root  internal
discard stream tcp nowait root  internal
discard dgram  udp wait   root  internal
daytime stream tcp nowait root  internal
daytime dgram  udp wait   root  internal
chargen stream tcp nowait root  internal
chargen dgram  udp wait   root  internal
#
# Standard services.
#
ftp     stream tcp nowait root  /usr/sbin/tcpd in.ftpd ftpd
telnet  stream tcp nowait root  /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec and talk are BSD protocols.
#
shell   stream tcp nowait root  /usr/sbin/tcpd in.rshd
login   stream tcp nowait root  /usr/sbin/tcpd in.rlogind
exec    stream tcp nowait root  /usr/sbin/tcpd in.rexecd
talk    dgram  udp wait   root  /usr/sbin/tcpd in.talkd
ntalk   dgram  udp wait   root  /usr/sbin/tcpd in.talkd
#
# Status and Information services.
#
finger  stream tcp nowait root  /usr/sbin/tcpd in.fingerd
systat  stream tcp nowait guest /usr/sbin/tcpd /usr/bin/ps -auwwx
netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat
#
# End of inetd.conf.

個々のフィールドの詳細については inetd のマニュアルページを参 照してください。ここでは簡単に説明しておきます。各行の最初の欄にはソケッ ト番号に対応するサービス名が書かれており、そのサービス用のソケットに接 続要求が届いた場合、どのようなコマンドがどういう引数で起動されるかを記 述しています。ここに記述されたコマンドと引数を用いて inetd が そのプログラムを起動します。最初の欄に書かれているサービス名と実際のソ ケット番号との対応は /etc/services ファイルに記載されています。

/etc/services の例

/etc/services ファイルはインターネット用の各種サービスの名称 と使用するソケット番号、プロトコルを記述した表になっています。 この表は inetdtelnettcpdump といった プログラムが利用しています。この表のおかげで、個々のサービス番号を覚え なくても、サービスの名称で使うことが可能になっています。

以下に示すものは簡単な /etc/services ファイルの例です。

#
# /etc/services - database of service name, socket number
#                 and protocol.
#
# Original Author:
#     Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
tcpmux     1/tcp
echo       7/tcp
echo       7/udp
discard    9/tcp   sink null
discard    9/udp   sink null
systat     11/tcp  users
daytime    13/tcp
daytime    13/udp
netstat    15/tcp
chargen    19/tcp  ttytst source
chargen    19/udp  ttytst source
ftp-data   20/tcp
ftp        21/tcp
telnet     23/tcp
smtp       25/tcp  mail
time       37/tcp  timserver
time       37/udp  timserver
name       42/udp  nameserver
whois      43/tcp  nicname    # usually to sri-nic
domain     53/tcp
domain     53/udp
finger     79/tcp
link       87/tcp  ttylink
hostnames  101/tcp hostname   # usually to sri-nic
sunrpc     111/tcp
sunrpc     111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc     111/udp
sunrpc     111/udp portmapper # RPC 4.0 portmapper UDP
auth       113/tcp authentication
nntp       119/tcp usenet     # Network News Transfer
ntp        123/tcp            # Network Time Protocol
ntp        123/udp            # Network Time Protocol
snmp       161/udp
snmp-trap  162/udp
exec       512/tcp            # BSD rexecd(8)
biff       512/udp comsat
login      513/tcp            # BSD rlogind(8)
who        513/udp whod       # BSD rwhod(8)
shell      514/tcp cmd        # BSD rshd(8)
syslog     514/udp            # BSD syslogd(8)
printer    515/tcp spooler    # BSD lpd(8)
talk       517/udp            # BSD talkd(8)
ntalk      518/udp            # SunOS talkd(8)
route      520/udp routed     # 521/udp too
timed      525/udp timeserver
mount      635/udp            # NFS Mount Service
pcnfs      640/udp            # PC-NFS DOS Authentication
bwnfs      650/udp            # BW-NFS DOS Authentication
listen     1025/tcp listener  # RFS remote_file_sharing
ingreslock 1524/tcp           # ingres lock server
nfs        2049/udp           # NFS File Service
irc        6667/tcp           # Internet Relay Chat
# End of services.

例えば telnet の行は、telnet サービスは 23 番のソケッ トと tcp プロトコルを使うことを示しています。domain の行は DNS(Domain Name Service)が 52 番のソケットを tcpudp 双方のプロトコルで使うことを示しています。 /etc/servicesには /etc/inetd.conf の各行に対応する行 (エントリー)が必要です。

/etc/protocols の例

/etc/protocols ファイルはプロトコル名と対応するプロトコル番号 を対応づけた表です。使われるプロトコルはそれほど多くないので、このファ イルもごくささやかなものです。

#
# /etc/protocols - database of protocols.
#
# Original Author:
#   Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
ip   0   IP   # internet protocol
icmp 1   ICMP # internet control message protocol
igmp 2   IGMP # internet group multicast protocol
ggp  3   GGP  # gateway-gateway protocol
tcp  6   TCP  # transmission control protocol
pup  12  PUP  # PARC universal packet protocol
udp  17  UDP  # user datagram protocol
idp  22  IDP
raw  255 RAW
#
# End of protocols.

11.4 ホスト名の変換

ホスト名の変換(Name Resolution)とは、人間に分りやすいように付けられて いるドット区切りのホスト名(例えば tsx-11.mit.edu)をネットワー ク用のソフトウェアが理解できる IP アドレスに変換することです。通常の形 でインストールすると、簡単な方法と複雑な方法の二つでホスト名の変換が行 なわれます

/etc/hosts

/etc/hosts ファイルは ip アドレスとホスト名の対応表になってお り、この表に書いておくことで、ネットワーク上の別のマシンを IP アドレス でもホスト名でも参照することができるようになります。ネームサーバー (「named」の章を参照)を使えば、同様の ホスト名 → IP アドレスの変換を 自動的に行なってくれます(named を使えば、あなたの Linux マシ ンをネームサーバーにすることも可能です)。/etc/hosts ファイルに最低限必 要なのは localhost とその IP アドレス 127.0.0.1 とい う行です。loopback 以外の接続も使う場合、あなたのマシンの正式なホスト 名(たとえば loomer.vpizza.com)とその IP アドレスの行も必要で す。ゲートウェイやネットワークアドレスを加えておくのもいいでしょう。

例えば、loomer.vpzza.com128.253.154.32 という IP アドレスを持っている場合、/etc/hosts ファイルには以下の行が必 要です。

# /etc/hosts
# List of hostnames and their ip addresses
127.0.0.1               localhost
128.253.154.32          loomer.vpizza.com loomer
# end of hosts

繰返しますが、実際の /etc/hosts ファイルはあなたの環境に合わ せて変更するのを忘れないように。 loopback しか使わないなら、 /etc/hosts に必要なのは 127.0.0.1 の行だけです。その 行のホスト名の欄に localhost と言う名とあなたのホスト名を書い ておきましょう。

2 行目に注意してもらいたいのですが、128.253.154.32 には 2 つ の名前が付いています。一つは loomer.vpizza.com で、もう一つは loomerです。最初の名前がシステムの正式名称(Fully Qualified Domain Name:FQDN)で、2 つめがその名称のエイリアス(別称)になっています。 エイリアスを指定しておけば、loomer.vpizza.com という長い名前 を入力しなくても rlogin loomer だけで接続可能になります。エイ リアスよりも前に正式名称(FQDN)を書くことをお忘れなく。

named - 我は汝を必要とするか?

`I dub thee ..'

named とは、多くの unix 互換 OS で動くネームサーバーデーモンで す。named はそのマシンだけでなく、ネットワーク上の他のホスト からのホスト名と IP アドレスの変換リクエストも受けつけます。すなわち、 ネットワーク上の他のマシンが `goober.norelco.com' の IP アド レスを探していて、あなたのマシンの named のデータベースにこの マシンの IP アドレスがあれば、探しているマシンからのリクエストを受けて `goobers' の IP アドレスを教えます。

昔の Linux の tcp/ip では、マシンに別名を付ける場合(それが自分自身の別 名であっても)、named を動かしてホスト名と IP アドレスの変換を させる必要がありました。この場合、named の設定はかなり複雑で、 正しく設定して運用することが難しいという問題を起していました。そのため に /etc/hosts に記述したホスト名を named が使うデー タベースファイルに変換するための hostcvt.build というプログラ ムが作成されたりしました。設定と運用の難しさを除いても、named は CPU を浪費し、ネットワークのトラフィックを増しがちなので、あまりお 薦めできません。

それでも named を立ちあげたい理由は以下のようなものでしょう。

繰り返しますが、通常の使用では named を起動する必要はありません:すなわち、rc.inet2 から named の部分はコメン トアウトして、hostcvt.build を動かす必要もありません。もしマ シンに別名をつけたい場合、例えば loomer.vpizza.comloomer として参照したい場合、/etc/hosts にそのように 書いておくだけで足ります。特別の理由が無い限り named を動かす べき必然性はありません。もしネームサーバーにアクセスできて(ネームサー バのアドレスはネットワーク管理者が教えてくれるはずです)、ちゃんと使え る場合、named を動かそうと悩む必要はありません。

loopback デバイスのみを使っている場合なら、named を起動して、 ネームサーバーのアドレスを 127.0.0.1 にすることが可能です。でも、通信で きるマシンは自分自身だけなので意味はありませんし、ネームサーバーを呼び出 す必要も無いでしょう。

/etc/networks

/etc/networks は自分や他のマシンの使っているネットワークの名 前とアドレスをまとめたファイルです。このファイルは route コマ ンドが利用し、ネットワークを IP アドレスでなく、その名称で指定すること を可能にします。

route コマンドを使って経路制御に加えたいネットワークは全て /etc/networks に書いておくか、route コマンドに -net の引数を付けて指定する必要があります。

/etc/networks の形式は /etc/hosts ファイルとよく似て いて、例えばこんな風になっています。

#
# /etc/networks: list all networks that you wish to add route commands
#                for in here
#
default         0.0.0.0         # default route    - recommended
loopnet         127.0.0.0       # loopback network - recommended
mynet           128.253.154.0   # Example network CHANGE to YOURS
#
# end of networks

/etc/host.conf

システムにはリゾルバライブラリと呼ばれるライブラリ機能があります。この ライブラリが参照するのは /etc/host.conf と呼ばれるファイルで、 指定されたホスト名を IP アドレスに変換するために、どのような順序で検索 を行うかを設定しています。/etc/host.conf には少なくとも以下の 2 行が必要です。

order hosts,bind
multi on

この 2 行の指定で、リゾルバライブラリにまず /etc/hosts ファイ ルを見にゆき、次に(設定されていれば)ネームサーバーに問いあわせる、とい う順序になります。multi の行は /etc/hosts ファイルに 問いあわせた名前の IP アドレスが複数あってもいいことを意味します。

このファイルは Linux 用の resolv+ bind ライブラリに入っていたものです。 より詳しい説明は resolv+(8) のマニュアルをご覧ください。この マニュアルは以下のファイルに含まれています。

sunsite.doc.ic.ac.uk

/computing/comms/tcpip/nameserver/resolv+/resolv+2.1.1.tar.Z

/etc/resolv.conf

/etc/resolv.conf はシステム名の実際の検索方法(resolver)を指定 するもので、2 種類のエントリから構成されています。一つは(もしあれば)ネー ムサーバーのアドレス(複数可)で、もう一つはあなたのドメインの名称です (ドメイン名を付けていれば)。もし自前でネームサーバーを動かしている場合 (すなわち Linux マシンで named を動かしている場合)、ネームサー バーのアドレスは 127.0.0.1、すなわち loopback アドレスになり ます。

システムのドメイン名はホスト名の正式名称(もしインターネット上に正式に 登録されているマシンなら)からホスト名の部分を削ったものです。すなわち、 あなたのマシンの正式名称が loomer.vpizza.com ならば、ドメイン 名は loomer を外した vpizza.com になります。

例えば、あなたのマシンが goober.norelco.com で、128.253.154.5 のアドレスにあるネームサーバーを参照する場合、/etc/resolv.conf ファイルは以下のようになります。

domain norelco.com
nameserver 128.253.154.5

resolv.conf ファイルには複数のネームサーバーを指定可能で、各 ネームサーバーの指定ごとに nameserver が頭に必要です。

もし loopback しか使っていないなら、ネームサーバーの指定は不要です。

ホスト名の設定 - /etc/HOSTNAME

お疲れさまでした。でも、もう一つ小さな仕事が残っています。あなたの使っ ているマシンに名前を付けなければいけません。sendmail のような プログラムは、メールを送ろうとしているあなたを確認し、設定されたホスト 名を用いて自分自身を同定した上で接続先のマシンにメールを送ります。

この種の設定のためには 2 つのプログラムが使われますが、それらはたいて い誤用されています。その 2 つのプログラムとは hostnamedomainnname です。

もし 1.1.38 以前の net-tools を使っている場合、 /etc/rc ファイルに以下のようなコマンドを書いておきます。

/bin/hostname -S

こうしておけば hostname コマンドが /etc/HOSTNAME か らホストの正式名称(Fully Qualified Domain Name)、すなわちドメイン名を 含んだホスト名を読みとります。hostname コマンドは FQDN を DNS に登録されたホスト名とドメイン名の部分に分解して、正しく設定します。

例えば、上記のマシンには /etc/HOSTNAME に以下のように書いてあ るはずです。

goober.norelco.com

net-tools-1.1.38 以降の hostname コマンドを使ってい る場合、/etc/rc.d/rc.inet1 ファイルの最後に次のように書いてお きます。

/bin/hostname goober.norelco.com

もし以前のリリースからアップグレードしている場合、以下のように書いてお けば、以前のバージョンと同様の設定をしてくれます。

/bin/hostname -F /etc/HOSTNAME

/bin/domainname コマンドは NIS 用です。NIS のドメイン名は DNS のドメイン名とは異なります。 /bin/domainname コマンドは NIS を使っていない場合設定する必要 はありません。NIS については後に簡単に説明します。

11.5 その他のファイル

これら以外にも /etc ディレクトリの下には必要に応じて修正すべ きファイルがいくつもあります。それら個々の説明をする代りに、ネットワー クに接続するための必要最低限のファイルを示しましょう。より詳しくは Olaf の "Network Administration Guide" を御覧ください。"NAG" はこの HOWTO が扱っていない部分も扱っています。この HOWTO で も、将来のバージョンではそれらを扱うことも計画しています。

全てのファイルを設定し、それらを正しい場所に置いたら、新しいカーネルで 再起動して、ネットワークに接続してみましょう。しかし、古いカーネル、あ るいは「復旧用ディスク」を準備しておくように強くお薦めします。もし何か トラブルが生じた場合はこれらのディスクから起動して修正します。H.J.Lu 作の `single disk boot disk' や Slackware 等の配布に含まれている `disk1' を使うのもいいでしょう。


前のページ 次のページ 目次