ネットワークを実際に機能させるには、まだいくつかのファイルが必要です。 残されたファイルは、ネットワーク用のソフトウェアを高レベルで設定するた めのもので、中でも重要なものについては後の節で触れることにします。しか し、以下に触れるファイル以外にもネットワークの設定に関わるファイルは存 在しています。それらはネットワークの仕組みを理解するうちにわかってくる ことと思います。
この文書を、ここまで順に読んできた人ならそれぞれのネットワークデバイス を正しいアドレスで設定し、ネットワークの設定に必要なルーティングもきち んと設定できていることと思います。次に必要なのは、もう少し高レベルのネッ トワーク用ソフトウェアを設定することです。
設定についての詳細は Olaf の "Network Administrators Guide" に詳しく説明されているので、この本をぜひ一読してみてください。"NAG" を 読めば、以下に示すファイルのうちのどの部分を利用すべきか、どの部分を含 めないべきか(こちらの方が重要)がわかるでしょう。少しセキュリティの面に ついても触れておきましょう。ネットワーク用のサービスを多く提供しようと すればするほど、セキュリティホールも多くなるので、最小限必要な機能だけ を動かすようにしましょう。
ネットワークが機能するために、バックグラウンドで動いている極めて重要な デーモン(daemons)がいくつかあります。各々の詳細についてはマニュ アルページを参照してもらう方がいいでしょう。代表的なデーモンを以下に示 します。
inetd はそれぞれのプロセスのバックグラウンドに居て、インター
ネット経由のサービスを処理するデーモンです。inted は必要な時
に必要なサービス用のプログラムを起動するので、それらのサービス用のデー
モンを常に起動しておく必要はありません。telnet や
ftp といった特定のサービスを使いたいというリクエストが届いた
場合、inetd は /etc/services
をチェックして、そのリ
クエストを処理するためのサーバープログラムを見つけて起動し、以後の処理は
そのサーバーに委ねます。ちょうどインターネット経由のサービスの受付処理を
するサーバーと考えればいいでしょう。inetd には echo や
discard、テスト用のサービスリクエストの発生機能といったいくつ
かの簡単なサービスが組みこまれてもいます。inetd は動かそうと
しているネットワーク用のサービスの全てを処理するのではなく、それらの中
の代表的なものを処理します。udp
を使ったサービスや WWW のサー
バ、mud のサーバーのように、自分で接続を多重化するようなサービスは
inetdとは独立に起動されるのが普通です。通常、そのようなサービ
スを提供するプログラムでは、附属のドキュメントで inetd 経由で
使うべきか否か書いてあるはずです。
syslogd はシステムのログ(運用記録)を処理するためのデーモンで
す。syslogd は、自分宛てに送られたメッセージを受けとり、
/etc/syslogd.conf
ファイルに記載されているルールに従って、そ
のメッセージを適切な場所へ送ります。例えば、ある種のメッセージはコンソー
ルとログファイルの両方に送ってもらいたいが、その他のメッセージはログファ
イルのみでいいような場合、syslogd を使ってそれらの行き先を分
けることが可能です。
以下に示すものは、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!
ネットワーク経由で接続してきた人にあなたのマシンをホストとして提供する には、これ以外にもいくつかの設定ファイルが必要です。Slackware や RedHat といったディストリビューションを使ってインストールしたなら、必 要なファイルは作成されているはずなので、大丈夫かどうかをチェックして、 もしダメなら以下に示すサンプルを利用してください。
/etc/rc.d/rc.inet2
の中で inetd と syslogd、
その他の 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
ファイルはインターネット用の各種サービスの名称
と使用するソケット番号、プロトコルを記述した表になっています。
この表は inetd や telnet、tcpdump といった
プログラムが利用しています。この表のおかげで、個々のサービス番号を覚え
なくても、サービスの名称で使うことが可能になっています。
以下に示すものは簡単な /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 番のソケットを tcp と
udp 双方のプロトコルで使うことを示しています。
/etc/services
には /etc/inetd.conf
の各行に対応する行
(エントリー)が必要です。
/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.
ホスト名の変換(Name Resolution)とは、人間に分りやすいように付けられて
いるドット区切りのホスト名(例えば tsx-11.mit.edu
)をネットワー
ク用のソフトウェアが理解できる IP アドレスに変換することです。通常の形
でインストールすると、簡単な方法と複雑な方法の二つでホスト名の変換が行
なわれます
/etc/hosts
ファイルは ip アドレスとホスト名の対応表になってお
り、この表に書いておくことで、ネットワーク上の別のマシンを IP アドレス
でもホスト名でも参照することができるようになります。ネームサーバー
(「named」の章を参照)を使えば、同様の ホスト名 → IP アドレスの変換を
自動的に行なってくれます(named を使えば、あなたの Linux マシ
ンをネームサーバーにすることも可能です)。/etc/hosts ファイルに最低限必
要なのは localhost
とその IP アドレス 127.0.0.1
とい
う行です。loopback 以外の接続も使う場合、あなたのマシンの正式なホスト
名(たとえば loomer.vpizza.com
)とその IP アドレスの行も必要で
す。ゲートウェイやネットワークアドレスを加えておくのもいいでしょう。
例えば、loomer.vpzza.com
が 128.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)を書くことをお忘れなく。
`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 を立ちあげたい理由は以下のようなものでしょう。
/etc/hosts
ファイルに書いてしまえば ネー
ムサーバーを見にゆく必要は無くなります。また、大抵の場合、名前の問い合わ
せはそれほど時間のかかる処理ではなく、遅い SLIP 接続の上でも正しく動く
はずです。
繰り返しますが、通常の使用では named を起動する必要はありません:すなわち、rc.inet2
から named の部分はコメン
トアウトして、hostcvt.build
を動かす必要もありません。もしマ
シンに別名をつけたい場合、例えば loomer.vpizza.com
を
loomer
として参照したい場合、/etc/hosts
にそのように
書いておくだけで足ります。特別の理由が無い限り named を動かす
べき必然性はありません。もしネームサーバーにアクセスできて(ネームサー
バのアドレスはネットワーク管理者が教えてくれるはずです)、ちゃんと使え
る場合、named を動かそうと悩む必要はありません。
loopback デバイスのみを使っている場合なら、named を起動して、 ネームサーバーのアドレスを 127.0.0.1 にすることが可能です。でも、通信で きるマシンは自分自身だけなので意味はありませんし、ネームサーバーを呼び出 す必要も無いでしょう。
/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
と呼ばれるファイルで、
指定されたホスト名を 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
はシステム名の実際の検索方法(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 しか使っていないなら、ネームサーバーの指定は不要です。
お疲れさまでした。でも、もう一つ小さな仕事が残っています。あなたの使っ ているマシンに名前を付けなければいけません。sendmail のような プログラムは、メールを送ろうとしているあなたを確認し、設定されたホスト 名を用いて自分自身を同定した上で接続先のマシンにメールを送ります。
この種の設定のためには 2 つのプログラムが使われますが、それらはたいて い誤用されています。その 2 つのプログラムとは hostname と domainnname です。
もし 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 については後に簡単に説明します。
これら以外にも /etc
ディレクトリの下には必要に応じて修正すべ
きファイルがいくつもあります。それら個々の説明をする代りに、ネットワー
クに接続するための必要最低限のファイルを示しましょう。より詳しくは
Olaf の "Network Administration Guide" を御覧ください。"NAG"
はこの HOWTO が扱っていない部分も扱っています。この HOWTO で
も、将来のバージョンではそれらを扱うことも計画しています。
全てのファイルを設定し、それらを正しい場所に置いたら、新しいカーネルで 再起動して、ネットワークに接続してみましょう。しかし、古いカーネル、あ るいは「復旧用ディスク」を準備しておくように強くお薦めします。もし何か トラブルが生じた場合はこれらのディスクから起動して修正します。H.J.Lu 作の `single disk boot disk' や Slackware 等の配布に含まれている `disk1' を使うのもいいでしょう。