これまでに述べてきたところは、典型的な Linux workstation を通常のエン ドユーザが使うことを前提にした設定です。読者の中にはもう少し高度な設定 を必要とする人もいるでしょう。この章ではそれらのうちの代表的なものをい くつか紹介します。
AX.25 や Ottawa PI, generic SCC といったドライバについての説明は HAM-HOWTO に移りました。
Point to Point Protocol はシリアル回線の上を tcp/ip などの様々 なプロトコルを通すために考案された新しい、効率的なプロトコルで、旧来の SLIP に取って替るものです。PPP はエラーの検出やセキュリティに関する多 数のオプションなどの機能も豊富です。PPP は SLIP で見つかっていたいくつ かの問題点を修正し、非同期接続でも同期接続でも使えるようになっています。
PPP の重要な特徴は IP アドレスなどのパラメータを動的に割り当てることが ごく簡単に可能なことで、この機能はたいていの PPP サーバーで利用できます。 この機能は PPP のクライアントから特別の形式のフレームを使った要求を送 ることで実現しています。この機能のおかげで SLIP のように、面倒な設定を する必要はなくなりました。SLIP の場合、アドレスの設定はプロトコルの外 部で行なう必要があります。
PPP を Linux に移植したのは Michael Callahan,
<callahan@maths.ox.ac.uk>
と Al Longyear,
<longyear@netcom.com>
です。この文書に記した情報の大部分は PPP
のソフトウェアに附属の文書から得たものです。PPP のパッケージに附属のド
キュメントは充実しており、ここで私が説明するよりも、さらに詳細な情報が
含まれているので、ぜひ御一読をお薦めします。
Linux 用の PPP のコードはかなり信頼性が高いものが公開されています。 Linux 用 PPP の 1.0.0 のコードは Paul Mackrras 作の BSD 系 OS 用の free PPP を元にしています 1.0.0 は free PPP の 2.1.1 を元にしています。
PPP のプログラムは 2 つの部分から構成されています。一つ目は kernel に 組みこまれたモジュールで PPP 用にフレームを合成したり分解したりします。 二つめは pppd というデーモンで、 LCP や IPCP、UPAP、CHAP と言う一群の プロトコルを使って、接続のためにオプションをやりとりしたり、接続を確立 したり、認証機能を果したりしています。
SLIP よりも PPP をお薦めする理由はいくつもあります。。最も一般的な理由 は:
SLIP の代りに PPP を使うもっともはっきりした理由は、接続先のインターネッ トプロバイダが SLIP をサポートせず、PPP しかサポートしていない場合です。
PPP は SLIP とは異なり、やりとりする全てのフレームをチェックしています。 使っている回線にノイズが多い場合、SLIP ではエラーの修正は接続の両端の 部分、すなわち、あなたのマシンと(SLIP を経由したインターネット上のどこ かにある)接続先のマシンの間で行なわれます。一方、PPP ではエラーの検出 はローカルに、すなわちあなたのマシンと(シリアル回線で接続されている) PPP サーバーの間で行なわれます。このため、エラーからの回復は SLIP よりも 速くなります。
PPP には SLIP が提供していない多くの機能が組みこまれています。例 えば IP 以外のパケット、DECNET や AppleTalk のフレームをシリアル回線経 由で送りたい場合は PPP を使う必要があります。
PPP は以下のサイトから入手できます。
sunsite.unc.edu
/pub/Linux/system/Networking/serial/ppp-2.1.2d.tar.gz
このファイルにはカーネルのソースと pppd のソース、およびバイナリが含ま れています。バージョン 1.0.0 はカーネルの 1.0.x と 1.1.x 用です。2.1.2 は 1.2.x 用、最新の 2.2.0 は 1.3.x 用になっています。
[ 訳注 : 現時点での pppd の最新バージョンは pppd-2.2.0e です ]
PPP をインストールするのは比較的簡単です。
最近のカーネルでは ppp をサポートしているので、あらかじめ PPP のカーネル用の部分がソースに含まれています。ですから、 ppp を使いたい 人は最近のカーネルを使った方がいいでしょう。カーネルを設定して再構築す るのは簡単で、/usr/src/linux で以下のようにすれば大丈夫です。
# make config (PPP を使うように設定するのを忘れないように)
# make dep
# make (コンパイル後、新しいカーネルをインストールするのを
忘れないように)
新しいカーネルで再起動すれば、起動時に以下のようなメッセージが出るはず です。
PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
このメッセージが出れば PPP の機能がカーネルに組みこまれています。
次に /proc/net/dev
を見てみます。/proc
ファイルシス
テムを見るためには more や less は使えないことに注意
しましょう。 more や less はまずファイルサイズをチェッ
クしますが、/proc
ファイルシステムはその特徴としてファイルサ
イズが 0 なので more や less では中身が見えません。
/proc
ファイルシステムを見る場合は cat を使って
# cat /proc/net/dev
とします。その結果は以下のようになるはずです。
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 0 0 0 0 0 0 0 0 0 0 0
ppp0: 0 0 0 0 0 0 0 0 0 0 0
ppp1: 0 0 0 0 0 0 0 0 0 0 0
ppp2: 0 0 0 0 0 0 0 0 0 0 0
ppp3: 0 0 0 0 0 0 0 0 0 0 0
この表示が見えれば PPP のドライバはカーネルへ正しく組みこまれています。
ppp のソースコードを展開するには以下のようにします。
# cd /usr/src
# gzip -dc ppp-2.1.2d.tar.gz | tar xvf -
pppd を再コンパイルしたければ展開された pppd サブディ レクトリで make と打てば OK です。lcp.c と upap.c, chap.c を コンパイルする際にはいくつか警告メッセージが出るかも知れませんが大丈夫 です。
chat を再コンパイルする場合、chat
ディレクトリにある
README.linux
を読んでください。
インストールするには chat
と pppd
のディレクトリで
make install と入力します。このコマンドで chat と
pppd のバイナリを /usr/sbin
にインストールし、
pppd.8
のマニュアルページを /usr/man/man8
にインストー
ルします。
pppd
を動かすには root
の権限が必要です。pppd を
root
に suid するか、root
になって起動しま
しょう。root
になって pppd を install すれば
root
に suid されるはずです。
SLIP 同様、PPP もクライアントとしてもサーバーとしても利用可能です。 SLIP で dip がする仕事を PPP では chat というプログ ラムが担当し、リモートマシンへ電話をかけて、ログインプロセスを自動的に 実行します。もっとも、dip とは異なり chat では ioctl を使ってシリアル回線を PPP 用の回線に変更するという処理 は行ないません。それは pppd の仕事です。pppd はクラ イアントとしてもサーバーとしても使えます。pppd は、通常 chat プログラムから起動されて接続とログインの処理をし、 ioctl を使って回線を ppp 用に変更し、いくつものステッ プを経てあなたのマシンと接続先のマシンが通信できるようにして、バックグ ラウンドに入り、あなたに処理を委ねます。
より詳しくは pppd と chat のマニュアルを御覧ください。 ここで説明したよりもずっと詳しい説明が ppp のパッケージに附属の README ファイルに記載されているので、ぜひ README ファイルにも目を通してくださ い。
多くの人がこの使い方をすると思うので、まずモデムを経由した電話回線経由 の接続法について説明します。PPP 接続を提供しているインターネットプロバ イダと接続する方法です。単に接続したいだけなら、pppd を引数無 しで起動するだけで足ります。この場合、PPP サーバーから IP アドレスが動 的に割りあてられます。あらかじめ決められているアドレスを使う場合につい ては後に説明します。
pppd には動作を制御するために多くのオプションが用意されていま す。これらのオプションは引数として与えるだけでなく、ファイルに書いてお くことが可能なので、ps などで調べてもどのような引数を使ってい るか見えなくすることも可能です。この機能は pppd を chat 経由で起動している場合に特に重要になります。というのも、 chat はサーバーにログインするためのパスワードをやりとりするの で、それらを(引数として与えるのではなく)ファイルに書いておき、他人が ps で見てもパスワードが見えないようにしておくのはセキュリティ 上重要です。
pppd が使うファイルは /etc/ppp/options
です。
典型的な PPP の設定の場合、/etc/ppp/options
はこんな風になる
でしょう。
connect /etc/ppp/ppp-connect
/dev/ttyS1
19200
crtscts
modem
lock
asyncmap 0
defaultroute
これらのオプションの意味は
/etc/ppp/ppp-connect
というスクリプトを使います。
ttyS1
を
19200
bits/sec のスピードで使い、ハードウェアとのハンドシェー
クには crtscts
を使い、modem の信号線(CD)を監視して、接続が生
きているか終了したかを判定します。
tty
デバイス用にロックファイルを作り、
使っている tty が他のプロセスと競合しないようにしています。
asyncmap
オプションはどのキャラクタをエスケープするか指定し、
デフォルトではコントロールキャラクタをエスケープするようになっています
が、最近の PPP サーバーはたいてい 8 ビットクリーンになっているはずなので、
asyncmap
を 0 に指定して、pppd がエスケープするキャ
ラクタを無しにします。
次のステップは /etc/ppp/ppp-connect
スクリプトの設定です。こ
のスクリプトの中で pppd に付いてくる chat プログラム
を使うのがいいでしょう。
まず、PPP サーバーへの接続手順がどのようなものかを確認します。 以下に示すものはサンプルスクリプト用の架空の手順です。
CONNECT 14400
Welcome to XYZ PPP server!
login: <ユーザー名の入力>^M
password: <パスワードの入力>^M
Now entering PPP:
chat プログラムは引数として 送る/受けとる 文字列を順に並べて
おきます。文字列は「期待する文字列 送信する文字列」 の順に対にしておき
ます。/etc/ppp/ppp-connect
スクリプトは chmod で必要
な人以外には見えないように設定します。上のような出力例の場合、対応する
引数は以下のようになるでしょう。
#!/bin/sh
# A chat script to login to the XYZ PPP server.
#
NUM=5552857
UID=terryd
PASSWD=secret1
#
/usr/sbin/chat -v "" ATZ OK ATDT$NUM CONNECT ogin: $UID word: \\q$PASSWD PPP:
この設定では、まずダイアル前にモデムを初期化するシーケンス(ATZ)を付け ています。
""
というのは「何も待たない」ことを意味しています。頭にこれを
付けると、まず何かを送信してから始めることになります。
-v
オプションは chat を冗長モードで動かす指定です。
このモードにしておけば、ログイン時の手順は全て syslog に送ら
れるので、実際にどのようなやりとりが行なわれているのかを詳しく調べるこ
とができます。$PASSWD
の前の \\q
に
注意してください。\\q
を付けると、それ以後の部分は
syslog にエコーされなくなります。こうしておけば、自分のパスワー
ドをシステムのログファイルに記録されてしまうことはありません。
/etc/ppp/ppp-connect は chmod 600 /etc/ppp/ppp-connnect
とし
て、他のユーザーにパスワードを見られないようにしておきましょう。
上記の設定で PPP 接続を開始するには、単に `pppd' と打つだけで、
後は自動的に進行します。システムログに残されたログインの進行状態を観察
しましょう。そしてログインの手続きが終了したら route -n
コマ
ンドを使って、デフォルトの経路が ppp0
デバイスになっているこ
とを確認してください。
あらかじめ決まっている IP アドレスを使う場合は以下のような行を
/etc/ppp/options
ファイルに加えておきます。
nnn.nnn.nnn.nnn:
ここで、nnn.nnn.nnn.nnn
はあなたの IP アドレスです。注意して
ほしいのですが、この指定は接続先のインターネットプロバイダが許可してい
る場合にしか使えません。最後の : (コロン)も重要です。
pppd では、ここで上げた以外にも多数のオプションを
option
ファイルに指定可能です。より詳しい説明は pppd
と chat のマニュアルを御覧ください。
専用線を使って PPP のクライエントを設定するのはごく簡単です。ここでも pppd プログラムを使いますが、モデム経由の電話回線のようにダイ ヤルをかけて接続するような作業は不要なので chat プログラムはずっと簡単 ですみます。
ここに示すサンプルでは、 ppp サーバーは一切ログインの手続きを必要としな いような設定になっています。このような例を選んだ理由は、ログインの方法 はホストごとに異なりますし、あなた自身のマシンに接続させるような場合、 この例に示したような手順に設定することも可能だからです。
pppd defaultroute noipdefault debug \
kdebug 2 /dev/cua0 9600
まずシリアルデバイスをオープンして ioctl でそれを ppp デバイスに変更します。そして、デフォルトの経路をこの ppp インターフェースにします。noipdefault の指定は今 回利用する IP アドレスはサーバーから与えてもらうことを意味します。 debugで指定した出力は syslog へ送られます。 kdebug 2 の指定は debug メッセージの出力レベルを 2 にする、と いうことで、より詳しい情報が出力されるようになります。pppd は /dev/cua0 を 9600bps で利用します。
もし接続先のサーバーが何らかのログイン手続きを必要とするなら、ダイアル 回線経由でつなぐ例で示したように chat を使って、簡単に設定で きるでしょう。
より詳しい情報は pppd と chat のマニュアルを御覧くだ さい。ppp についてくる README ファイルにも、私がここで説明したよりずっ と詳しい情報が記載されているので、ぜひ目を通すようにしてください。
PPP サーバーの設定は SLIP サーバーとよく似ています。PPP 接続用に、特別
の `ppp' というアカウントを作り、そのアカウントのログインシェルとして
pppd を起動するようなスクリプトを指定します。その場合、
/etc/passwd
エントリーはこのような形になるでしょう。
ppp:EncPasswd:102:50:PPP client login:/tmp:/etc/ppp/ppplogin
/etc/ppp/ppplogin
スクリプトはこういうふうになるはずです。
#!/bin/sh
exec /usr/sbin/pppd passive :192.1.2.23
ここで指定しているアドレス(192.1.2.23)が接続を求めてきたマシ ンに与えるアドレスになります。
普通、複数のユーザーが同時にアクセスしてくるような環境では、同時アクセ スを許可するユーザー数だけの起動用のスクリプトとアカウントを用意して、 それぞれに ip アドレスを指定してやる必要があります。
The PPP-HOWTO は、本書に示した情報よりも広い範囲をカバーしている優 れた参考書です。
Linux の PPP についての議論の大部分は PPP メーリングリストで行われてい ます。
linux-ppp メーリングリストに参加するには、
Majordomo@vger.rutgers.edu
宛に、本文に
subscribe linux-ppp
と書いたメールを送ります。subjcect: の行は無視されます。
気をつけてほしいのですが、バグや問題を報告するときは可能な限り多量の情 報を含めるようにしてください。問題点をわかりやすくすればするほど、より 的確な助言が得られることでしょう。
また以下の文献も役に立つでしょう:
RFC 1548, 1331, 1332, 1333, 1334。これらが PPP を定義している文献です。
W.Richard Stevens の「TCP/IP Illustrated Vol 1」(Addison-Wessley, 1994, ISBN 0-201-63346-9)にも PPP についての説明があります。
ネットワークに接続されたマシンが手元にあって、電話回線経由で接続してく る人たちに接続サービスを提供したい場合、そのマシンをサーバーとして設定 する必要があります。もしシリアル回線用のプロトコルとして SLIP を使いた い場合、その設定には以下に示す 3 種の方法があります。私のお薦めは最初 に上げた sliplogin を使う方法で、これがもっとも簡単で分りやす いと思います。でも、残りの方法についても説明しますので、どれがいいかは あなたが選んでください。
sliplogin は通常のログイン・シェルの代りとなる SLIP ユーザー 用のログイン用のプログラムで、接続した回線を SLIP 用に変更する機能を持っ ています。sliplogin を使えば、接続してきたユーザーに毎回同じ アドレスを割り当てる静的なアドレスサーバーとしても、毎回違う(か もしれない)アドレスを割りあてる動的なアドレスサーバーとしても設 定可能です。
電話をかけてきた人は、接続するたびに通常のログインプロセス、すなわち、
まずユーザー名を入力し、次にパスワードを入力するというプロセスを通過し
ます。しかし、その後が普通のログインとは多少異なっていて、通常のログイ
ンシェルを起動するのではく、sliplogin が起動して、まず設定用
ファイル(/etc/slip.hosts
)を読みこみ、電話してきた人の入力した
ログイン名が登録されているかどうかをチェックします。登録されていれば、
回線を 8 bit クリーンに設定し ioctl を使って SLIP 用に回線を
変更します。以上の手続きが終れば設定の最終段階に突入し、
sliplogin は SLIP インターフェースを適切な ip アドレスやネッ
トマスクで設定し、ルーティングテーブルに情報を追加するためのスクリプト
を起動します。このスクリプトは /etc/slip.login
と呼ばれていま
すが、getty 同様に接続相手によっては特別の設定をする必要があ
るため /etc/slip.login.loginname
として、デフォルトのファイル
の代りにユーザー別の設定ファイルを使用することも可能です。
sliplogin を使うためには、これ以外にも 3 つか 4 つの設定ファ イルが必要となります。以下にそれらのファイルについて、どのような設定す るかを説明します。
/etc/passwd
には回線経由で接続してくるユーザーのアカウ
ントを用意します。
/etc/slip.hosts
には回線経由で接続してくるユーザーごと
の情報を書いておきます。
/etc/slip.login
には接続してきたユーザー用の経路情報を
書いておきます。
/etc/slip.tty
は、動的なアドレスの割り当てを使
う場合に設定します。このファイルには割当てるべきアドレスを記入しておき
ます。
/etc/slip.logout
にはユーザーが回線を切ったり logout し
た時の後始末をするコマンドを書いておきます。
sliplogin は以下のサイトから入手できます。
sunsite.unc.edu
/pub/Linux/system/Network/serial/sliplogin-2.0.tar.gz
この tar ファイルにはバイナリとソース、マニュアルページが含まれていま す。
注意して欲しいのですが、sliplogin を起動できるのは正式に許可
されたユーザーだけです。そのため、/etc/group
ファイルに以下の
ような記述を追加します。
..
SLIP::13:radio,fred
..
sliplogin用のパッケージをインストールすれば、
Makefile
が自動的に sliplogin 関連のプログラムの所有
グループを SLIP
に変更し、SLIP
のグループに属するユー
ザーのみがプログラムを起動できるように設定します。上の例では
SLIP
グループに属する radio と fred だけが sliplogin
を実行できます。
バイナリを /sbin
に、マニュアルを 8 章にインストールするには、
以下のようにします。
# cd /usr/src
# gzip -dc .../sliplogin-2.0.tar.gz | tar xvf -
# <..shadow password を使わない場合 Makefile を修正すること..>
# make install
自分でバイナリを再コンパイルしたい場合は make install
の前に
make clean
してください。もしバイナリをどこか別の場所にインス
トールしたいなら Makefile
の適切な箇所を書きかえてしまうしか
ないでしょう。
より詳しくはプログラムに附属の README
ファイルをご覧ください。
/etc/passwd
の設定SLIP サーバーの一般的な運用法としては、 SLIP で接続してくる人用に特別の
アカウントを /etc/passwd
に作るのが普通です。そのアカウントは
接続してくるホスト名の頭に S を付けたものをアカウント名にする
場合が多く、例えば、接続してくるマシンが radio
というホスト名
だった場合、
Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin
のようなフィールドを /etc/passwd
に作ります。
アカウント名は管理者にとってわかりやすければ、特にどんな名前でもかまい ません。
注意:ホストごとにアカウント名を作成しますが、実際にそのアカウントで
ログインして shell を使うことは無いので、ホームディレクトリを用意して
おく必要はなく、/tmp
あたりをホームディレクトリに指定しておけ
ばいいでしょう。また、通常のシェルの代りに sliplogin
を使って
いることに注意してください。
/etc/slip.hosts
の設定方法シェルとして起動された sliplogin は
/etc/slip.hosts
ファイルを調べて、ログイン名を元に、それぞれ
の接続者ごとに詳しい設定を指定します。接続者にあたえる IP アドレスや接
続形態を指定するのもこのファイルです。以下に示すサンプルでは、
radio
というホストには静的なアドレスを、albert
とい
うホストには動的なアドレスを使うようにそれぞれ指定しています。
#
Sradio 44.136.8.99 44.136.8.100 0xffffff00 normal
Salbert 44.136.8.99 DYNAMIC 0xffffff00 compressed
#
/etc/slip.hosts
の各欄の意味は、
DYNAMIC
の指
定になっていれば、ip アドレスは後述する /etc/slip.tty
ファイ
ルに用意されているものから動的に割りあてられます。注意:この
機能を使うには、少なくとも sliplogin の 1.3 以上のバージョンのものを使っ
てください。
注意:2 つめと 3 つめの欄にはホスト名でも、ドットで区切った IP アドレ スでも、どちらの形でも書けますが、ホスト名で指定した場合、そのホスト名 を IP アドレスに変換できなければなりません。ホスト名から IP アドレスへ 変換できないとスクリプトは異常終了してしまいます。正しく IP アドレスへ 変換できるかどうかをテストするには、そのホスト名へ telnet してみるのが いいでしょう。Trying nnn.nnn.nnn... というメッセージが出れば そのホスト名は IP アドレスに変換できています。"Unknown host.." という メッセージが出る場合はうまく変換できていません。うまく変換できない場合 は IP アドレスを直接書くか、リゾルバの設定を修正してください(「名前の 変換」の章)
以上に示した以外にも、いくつかオプションとして指定できるパラメータも存 在し、もっともよく使われるオプションパラメータは以下の二つです。
通常の非圧縮タイプの SLIP
van Jacobsen のヘッダ圧縮を可能にした SLIP(cSLIP)
これらは相互に排他的なので、どちらか一方のみを指定してください。その他 のオプションについてはマニュアルを参照してください。
/etc/slip.login
ファイルの設定sliplogin が /etc/slip.hosts
を調べ、対応するエント
リが見つかれば、/etc/slip.login
を実行して SLIP インターフェー
スを設定された IP アドレスとネットマスクで設定します。
sliplogin のパッケージに附属の /etc/slip.login
のサ
ンプルはこのようになっています。
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a SLIP line. sliplogin invokes this with
# the parameters:
# $1 $2 $3 $4 $5 $6 $7-n
# SLIPunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig $1 $4 pointopoint $5 mtu 1500 -trailers up
/sbin/route add $5
arp -s $5 <hw_addr> pub
exit 0
#
このスクリプトは ifconfig と route コマンドを使って、 SLIP デバイスを指定した IP アドレス、リモートの IP アドレス、ネットマ スクで設定して、SLIP デバイス経由でリモートアドレスに達するような経路 を指定しています。slattach コマンドを使ったことのある人はよく 似た指定法だと気づくでしょう。
もう一点、代理(proxy) ARP を使って、サーバーマシンと同じイー
サネット上にある他のホストマシンに回線経由のマシンへの到達方法を教えて
いる点に注意してください。<hw_addr>
フィールドでは、サーバー
マシンのイーサネットカードのハードウェアアドレスを指定します。もしサー
バーマシンがイーサネットを使ったネットワークに接続されていないなら、こ
の行は削除しておきます。
/etc/slip.logout
ファイルの設定接続が切れると、(SLIP デバイスとして設定されていた)シリアルデバイスを
通常の状態に戻して、次の接続者がきちんとログインできるようにしておく必
要があります。これは /etc/slip.logout
ファイルで指定します。
フォーマットはごく簡単で、
#!/bin/sh -
#
# slip.logout
#
/sbin/ifconfig $1 down
/sbin/route del $5
arp -d $5
exit 0
#
このスクリプトがやっているのはインターフェースを「ダウン」させ、以前に 設定された経路を削除することだけです。同時に arp -d コマンド で proxy の設定も削除しています。もしサーバーマシンがイーサネットに接 続されていないなら arp の部分は不要です。
/etc/slip.tty
ファイルの設定動的な IP アドレスの割り当てを行う場合、すなわち
/etc/slip.hosts
ファイルに DYNAMIC
のキーワードを持
つホストがある場合、割り当てるべきアドレスを記載した
/etc/slip.tty
ファイルを用意する必要があります。
/etc/slip.tty
ファイルは IP アドレスの動的割り当てを使う場合に
のみ必要なファイルです。このファイルは SLIP 接続してくる tty
デバイスとそのポートに接続してきたユーザーに割りあてるべき IP アドレス
を組みあわせた表の形になっています。
このファイルのフォーマットは具体的には以下のようになります。
# slip.tty tty -> IP address mappings for dynamic SLIP
# format: /dev/tty?? xxx.xxx.xxx.xxx
#
/dev/ttyS0 192.168.0.100
/dev/ttyS1 192.168.0.101
#
このテーブルの読み方は、/dev/ttyS0
に接続した利用者で、
/etc/slip.hosts
のリモートアドレス欄が DYNAMIC
になっ
ている場合、192.168.0.100
というアドレスを与える、という意味
になります。
このように、接続に使うポートごとに一つのアドレスを割りあてることで、全 てのユーザーごとに IP アドレスを割りあてる必要が無くなり、最小限の IP アドレスを用意するだけで済みます。
以下の説明は Linux を SLIP サーバーとして使う方法を簡単にまとめてある dip のマニュアルを元にしたものです。対象としている dip は dip337j-uri.tgz を元にしているので、その他の バージョンではうまくあてはまらないかも知れません。
dip には入力モードの機能があり、起動したユーザー名をエントリ
として、/etc/diphosts
ファイルの記述に従ってシリアルラインを
SLIP 用に設定することができます。dip を入力モードで起動するに
は dip を diplogin という名前で起動します。すなわち、
dip を SLIP サーバーとして使うにはログインシェルのかわりに
diplogin を使う特別のアカウントを作ればいいことになります。
まず、以下のように diplogin を dip のシンボリックリンクにします。
# ln -sf /usr/sbin/dip /usr/sbin/diplogin
次に、/etc/passwd
と /etc/diphosts
ファイルにエント
リを加えます。必要なエントリは以下のようなフォーマットです。
Linux を dip を使った SLIP サーバーとして設定するには、(入力 モードになる) dip をログインシェルにした特別の SLIP アカウン トをユーザーごとに設定します。慣例として、SLIP 接続のアカウントは、大 文字の `S' から始まる名前、すなわち `Sfredm' みたいにします。
SLIP ユーザー用の /etc/passwd
はこんな風になります。
Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^ ^^ ^^ ^^ ^^ ^^ ^^
| | | | | | \__ ログインシェルが diplogin
| | | | | \_______ ホームディレクトリ
| | | | \____________ ユーザー名
| | | \_________________ Group ID
| | \_____________________ User ID
| \_______________________________ 暗号化されたパスワード
\__________________________________________ Slip User Login Name
ユーザーがログインしてくると、login(1) プログラムがユーザーを
チェックした上で diplogin コマンドを起動します。
diplogin というコマンド名で起動された dip は自分をロ
グインシェルだと認識して、まず getuid() で自分を起動したユー
ザー id を得ます。次に、そのユーザー id を /etc/diphosts
に探
して、ユーザー id か自分を起動した tty デバイス名を見つけ、そ
の記述にしたがって回線を設定します。ユーザーのエントリを
diphosts
ファイルに作るか、デフォルトの設定ファイルの設定を利
用するかによって、ユーザーごとに静的な IP アドレスの割り当てを使うか動
的な IP アドレスの割り当てを使うかを組み合わせることが可能です。
dip は入力モードで起動された場合、自動的に `代理(proxy) ARP' の設定を加えるので、特に proxy の設定を行う必要はありません。
/etc/diphosts
の設定/etc/diphosts
は、リモートホストを探すために dip が
自動的に見にゆく設定ファイルです。リモートホストはあなたのマシンに接続
してくるユーザーであるかもしれないし、あなたのマシンが接続しにゆくマシ
ンかも知れません。
/etc/diphosts
の一般的なフォーマットは以下のようなものです。
..
Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
..
それぞれのフィールドは:
MTU
: 10 進数で指定
リモートの SLIP ユーザー用 /etc/net/diphosts
のエントリは:
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296
この例では SLIP 接続のリモートアドレスが 145.71.34.1 で MTU を 296 に しています。あるいは、
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
こちらでは cSLIP 接続でリモートアドレスを 145.71.34.1 にして、MTU を 1006 にしています。
すなわち、静的に IP アドレスを割り当てたいユーザーについては
/etc/diphosts
に設定して、動的に IP アドレスを割り当てたいユー
ザーには tty
デバイスを元にした設定を用意して、ユーザー名を使っ
たエントリは作りません。それぞれの tty
デバイスごとに少なくと
も一つの設定を用意して、ユーザーがどのモデム経由で接続しても適切な設定
が行われるようにすることを忘れないように。
ユーザーがログインしてくれば、通常のログインプロンプトとパスワードプロ
ンプトが表示され、SLIP-login 用にユーザー id とパスワードを入力します。
それらが正しければ、ユーザーには特にメッセージが出力されずに回線が
SLIP モードに変更され、diphosts
ファイルのパラメータに従って
設定されます。
Matt Dillon <dillon@apollo.west.oic.com>
が電話回線経由で
アクセスしてくる時だけでなく、自分がアクセスする時にも使えるようなプロ
グラムをまとめました。彼の作ったパッケージは、接続をさまざまに制御する
小さなプログラムから構成されています。少くとも一つのスクリプトは
tcsh がインストールされていることを前提に作成されています。
Matt は彼の SLIP 用パッケージが必要とするユーティリテイのバイナリも配
布しています。このパッケージを使いこなすには多少の経験が必要となります
が、悲観する必要はありません。
Matt はパッケージに附属の README ファイルとして詳細なインストールの説 明をしてくれているので、それを繰り返すことはやめておきます。
dSLIP は以下のサイトから入手できます。
apollo.west.oic.com
/pub/linux/dillon_src/dSLIP203.tgz
あるいは
sunsite.unc.edu
/pub/Linux/system/Network/serial/dSLIP203.tgz
附属の README
ファイルを読んで make install
する前に
忘れず /etc/passwd
と /etc/group
エントリを作ってお
くこと。
この節は Mitch DSouza
からの情報を最小限の修正のみで記載して
います。Mitch ありがとう。
自動マウントはファイルシステムを必要に応じて自動的にマウントしてくれる 便利な方法です。この方法を使えばサーバーとクライアント双方の負荷を減ら し、NFS を使わなくてもきわめて柔軟なファイル構成を設定できます。また、 プライマリのサーバーが使用できない場合、自動的にセカンダリのサーバにス イッチするようなシステムの冗長化も可能です。union mount とい うマウントの方法もあり、複数のディレクトリの中身を一つのディレクトリに 見せるようなことも可能です。その豊富な機能を使いこなすためには必ず附属 のマニュアルを読んでください。
忘れてはならない重要なポイントをいくつか(重要度の順番というわけではあ りません)
contrib
ディレクトリにある
automount2amd.pl
という perl スクリプトで
amd 形式の map ファイルに変換できます。
..., opts:=type=msdos,conv=auto
/home/fred
をホームディレクトリ
にしている時でも /home
にあなたのディスクをマウントしてしまい
ます
% amq -ms
のコマンドを使えば、何か問題が起きていれば報告されるはずです。
# /etc/amd -x all -l syslog -a /amd -- /net /etc/amd.net
amd は
sunsite.unc.edu の
/pub/Linux/system/Misc/mount/amd920824upl67.tar.gz
にあります。このパッケージにはバイナリとソース一式、texinfo 形式のドキュ メントが含まれています。
現在使用中のファイルシステムに関しては /etc/fstab
で設定しま
すが、自動マウントに関する設定はこのファイルでは行なわず、コマンドライ
ンから指定します。
/etc/fstab
で NFS マウントを使っている場合、以下のよ
うなエントリがあるはずです。
server-1:/export/disk /nfs/server-1 nfs defaults
server-2:/export/disk /nfs/server-2 nfs defaults
この例では server-1
と server-2
のディスク
(/export/disk)を /nfs/server-1
と /nfs/server-2
にそ
れぞれ NFS マウントしています。
amd を使う場合、/etc/fstab
から NFS を指定しているこ
れらの行を削除、あるいはコメントアウトして、以下のコマンドで
amd を起動します。
/etc/amd -x all -l syslog -a /amd -- /nfs /etc/amd.server
| | | | | | | | | | | | |
| | | | | | | | | | | | |
`------' `----' `-------' `-----' -' `--' `-------------'
| | | | | | |
(1) (2) (3) (4) (5) (6) (7)
ここで:
foo
)に出力されます。
/amd
ディレクトリを自動マウントの一
時的なマウント地点にすること意味します。このディレクトリは
amd が自動的に作るので 、古いディレクトリが残っていれば、
/etc/rc
のスクリプトなどで amd を起動する前に削除す
る必要があります。
# /etc/amd.server
/defaults opts:=rw;type:=nfs
server-1 rhost:=server-1;rfs:=/export/disk
server-2 rhost:=server-2;rfs:=/export/disk
amd が起動してちゃんと動いていれば、
% amq -ms
コマンドで現在のマウントの状況を確認することができます。
単に
% ls /nfs
としただけではファイルは見えませんが、
% ls /nfs/server-1
とすれば、`server-1 ' を自動的にマウントしてその中身を表示します。ちゃ んと表示されれば amd は正しく働いています。一定時間が経過する と、このディレクトリは自動的にアンマウントされます。
amd を使って各人のホームディレクトリを管理するような場合、
/etc/password
はこんな風になります。
...
linus:EncPass:10:0:God:/nfs/server-1/home/linus:/bin/sh
mitch:EncPass:20:10:Mitch DSouza:/nfs/server-1/home/mitch:/bin/tcsh
matt:EncPass:20:10:Matt Welsh:/nfs/server-1/home/matt:/bin/csh
このように指定しておけば、Linus や Matt、あるいは Mitch が login して きた場合、彼らのホームディレクトリが適切なサーバーから自動的にマウントさ れ、logout すれば自動的にアンマウントされます。
Linux はルータとしても機能します。ルータとして使うには gated のようなルーティング用デーモンを動かすか、単純な経路制御しか必要なけれ ば静的なルーティングを指定します。最近のカーネル(1.1.* 以降)を使ってい る場合、カーネルを再構築する際に、
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y
に y を指定する必要があります。
Olaf Kirch の NAG にはネットワークのデザイン法やルーティングについての 説明があるので、詳しく知りたい方はぜひご覧ください。NAG については「関 連文献」の章で触れています。
NIS に興味があれば、 NIS-HOWTO をぜひご覧ください。NIS-HOWTO には必要なソフトの入手 法や Linux 用の NIS の設定の仕方について詳しく説明されています。