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

12. より進んだ設定

これまでに述べてきたところは、典型的な Linux workstation を通常のエン ドユーザが使うことを前提にした設定です。読者の中にはもう少し高度な設定 を必要とする人もいるでしょう。この章ではそれらのうちの代表的なものをい くつか紹介します。

AX.25 や Ottawa PI, generic SCC といったドライバについての説明は HAM-HOWTO に移りました。

12.1 PPP - Point to Point Protocol.

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 をお薦めする理由はいくつもあります。。最も一般的な理由 は:

接続先のインターネットプロバイダが PPP しか提供していない場合

SLIP の代りに PPP を使うもっともはっきりした理由は、接続先のインターネッ トプロバイダが SLIP をサポートせず、PPP しかサポートしていない場合です。

常にノイズの多いシリアル回線を使っている場合

PPP は SLIP とは異なり、やりとりする全てのフレームをチェックしています。 使っている回線にノイズが多い場合、SLIP ではエラーの修正は接続の両端の 部分、すなわち、あなたのマシンと(SLIP を経由したインターネット上のどこ かにある)接続先のマシンの間で行なわれます。一方、PPP ではエラーの検出 はローカルに、すなわちあなたのマシンと(シリアル回線で接続されている) PPP サーバーの間で行なわれます。このため、エラーからの回復は SLIP よりも 速くなります。

その他、PPP のみの機能を使う必要がある場合

PPP には SLIP が提供していない多くの機能が組みこまれています。例 えば IP 以外のパケット、DECNET や AppleTalk のフレームをシリアル回線経 由で送りたい場合は PPP を使う必要があります。

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 のカーネル用の部分がソースに含まれています。ですから、 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 ファイルシス テムを見るためには moreless は使えないことに注意 しましょう。 moreless はまずファイルサイズをチェッ クしますが、/proc ファイルシステムはその特徴としてファイルサ イズが 0 なので moreless では中身が見えません。 /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 のドライバはカーネルへ正しく組みこまれています。

pppd

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 を読んでください。

インストールするには chatpppd のディレクトリで make install と入力します。このコマンドで chat pppd のバイナリを /usr/sbin にインストールし、 pppd.8 のマニュアルページを /usr/man/man8 にインストー ルします。

pppd を動かすには root の権限が必要です。pppd を rootsuid するか、root になって起動しま しょう。root になって pppd を install すれば root に suid されるはずです。

PPP の設定と使用法

SLIP 同様、PPP もクライアントとしてもサーバーとしても利用可能です。 SLIP で dip がする仕事を PPP では chat というプログ ラムが担当し、リモートマシンへ電話をかけて、ログインプロセスを自動的に 実行します。もっとも、dip とは異なり chat では ioctl を使ってシリアル回線を PPP 用の回線に変更するという処理 は行ないません。それは pppd の仕事です。pppd はクラ イアントとしてもサーバーとしても使えます。pppd は、通常 chat プログラムから起動されて接続とログインの処理をし、 ioctl を使って回線を ppp 用に変更し、いくつものステッ プを経てあなたのマシンと接続先のマシンが通信できるようにして、バックグ ラウンドに入り、あなたに処理を委ねます。

より詳しくは pppdchat のマニュアルを御覧ください。 ここで説明したよりもずっと詳しい説明が ppp のパッケージに附属の README ファイルに記載されているので、ぜひ README ファイルにも目を通してくださ い。

電話回線経由の PPP 接続の設定方法

多くの人がこの使い方をすると思うので、まずモデムを経由した電話回線経由 の接続法について説明します。PPP 接続を提供しているインターネットプロバ イダと接続する方法です。単に接続したいだけなら、pppd を引数無 しで起動するだけで足ります。この場合、PPP サーバーから IP アドレスが動 的に割りあてられます。あらかじめ決められているアドレスを使う場合につい ては後に説明します。

pppd には動作を制御するために多くのオプションが用意されていま す。これらのオプションは引数として与えるだけでなく、ファイルに書いてお くことが可能なので、ps などで調べてもどのような引数を使ってい るか見えなくすることも可能です。この機能は pppdchat 経由で起動している場合に特に重要になります。というのも、 chat はサーバーにログインするためのパスワードをやりとりするの で、それらを(引数として与えるのではなく)ファイルに書いておき、他人が ps で見てもパスワードが見えないようにしておくのはセキュリティ 上重要です。

pppd が使うファイルは /etc/ppp/options です。

典型的な PPP の設定の場合、/etc/ppp/options はこんな風になる でしょう。

connect /etc/ppp/ppp-connect
/dev/ttyS1
19200
crtscts
modem
lock
asyncmap 0
defaultroute

これらのオプションの意味は

  1. pppd はモデムを使ってダイアルし、ログインするのに /etc/ppp/ppp-connect というスクリプトを使います。
  2. pppd はシリアルデバイスの ttyS119200 bits/sec のスピードで使い、ハードウェアとのハンドシェー クには crtscts を使い、modem の信号線(CD)を監視して、接続が生 きているか終了したかを判定します。
  3. pppdtty デバイス用にロックファイルを作り、 使っている tty が他のプロセスと競合しないようにしています。
  4. PPP の回線は `8 ビットクリーン' で、全てのキャラクタが透過です。 asyncmap オプションはどのキャラクタをエスケープするか指定し、 デフォルトではコントロールキャラクタをエスケープするようになっています が、最近の PPP サーバーはたいてい 8 ビットクリーンになっているはずなので、 asyncmap を 0 に指定して、pppd がエスケープするキャ ラクタを無しにします。
  5. pppd は接続が確立すれば ppp デバイスをデフォルトの経路 にします。 [ 訳注 : イーサネットとシリアル接続のゲートウェイにする場合など、あらか じめデフォルトルートが設定されていれば、それを書きかえることはしません]

次のステップは /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 ファイルに指定可能です。より詳しい説明は pppdchat のマニュアルを御覧ください。

専用線経由での PPP 接続の設定方法

専用線を使って 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 を使って、簡単に設定で きるでしょう。

より詳しい情報は pppdchat のマニュアルを御覧くだ さい。ppp についてくる README ファイルにも、私がここで説明したよりずっ と詳しい情報が記載されているので、ぜひ目を通すようにしてください。

PPP サーバーの設定方法

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 アドレスを指定してやる必要があります。

PPP についてより詳しい情報の入手法、あるいはバグレポートの提出先

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 についての説明があります。

12.2 Slip サーバーの設定方法

ネットワークに接続されたマシンが手元にあって、電話回線経由で接続してく る人たちに接続サービスを提供したい場合、そのマシンをサーバーとして設定 する必要があります。もしシリアル回線用のプロトコルとして SLIP を使いた い場合、その設定には以下に示す 3 種の方法があります。私のお薦めは最初 に上げた sliplogin を使う方法で、これがもっとも簡単で分りやす いと思います。でも、残りの方法についても説明しますので、どれがいいかは あなたが選んでください。

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 つの設定ファ イルが必要となります。以下にそれらのファイルについて、どのような設定す るかを説明します。

sliplogin はどこにあるの?

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 ファイルをご覧ください。

Slip 接続ホスト用の /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 の各欄の意味は、

  1. 接続者の login 名
  2. サーバーマシン(すなわちこのマシン)の ip アドレス
  3. 接続者にあたえるべき ip アドレス。この欄が DYNAMIC の指 定になっていれば、ip アドレスは後述する /etc/slip.tty ファイ ルに用意されているものから動的に割りあてられます。注意:この 機能を使うには、少なくとも sliplogin の 1.3 以上のバージョンのものを使っ てください。
  4. 接続してくるマシンの使うネットマスクを 16 進で表記したもの。例えば、 Class C のネットワークマスクの場合、0xffffff00 になります。
  5. 圧縮機能などを指定するための欄です。

注意:2 つめと 3 つめの欄にはホスト名でも、ドットで区切った IP アドレ スでも、どちらの形でも書けますが、ホスト名で指定した場合、そのホスト名 を IP アドレスに変換できなければなりません。ホスト名から IP アドレスへ 変換できないとスクリプトは異常終了してしまいます。正しく IP アドレスへ 変換できるかどうかをテストするには、そのホスト名へ telnet してみるのが いいでしょう。Trying nnn.nnn.nnn... というメッセージが出れば そのホスト名は IP アドレスに変換できています。"Unknown host.." という メッセージが出る場合はうまく変換できていません。うまく変換できない場合 は IP アドレスを直接書くか、リゾルバの設定を修正してください(「名前の 変換」の章)

以上に示した以外にも、いくつかオプションとして指定できるパラメータも存 在し、もっともよく使われるオプションパラメータは以下の二つです。

normal

通常の非圧縮タイプの SLIP

compressed

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
#

このスクリプトは ifconfigroute コマンドを使って、 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 アドレスを用意するだけで済みます。

dip を使う Slip サーバー

以下の説明は Linux を SLIP サーバーとして使う方法を簡単にまとめてある dip のマニュアルを元にしたものです。対象としている dipdip337j-uri.tgz を元にしているので、その他の バージョンではうまくあてはまらないかも知れません。

dip には入力モードの機能があり、起動したユーザー名をエントリ として、/etc/diphosts ファイルの記述に従ってシリアルラインを SLIP 用に設定することができます。dip を入力モードで起動するに は dipdiplogin という名前で起動します。すなわち、 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
 ..

それぞれのフィールドは:

  1. ログイン名:getpwuid(getuid()) で得られる名前か tty 名
  2. 未使用:passwd との互換性のため。
  3. リモートアドレス:接続してくるホストの IP アドレス。数字、あるい はホスト名
  4. ローカルアドレス:このマシンの IP アドレス。数字、あるいはホスト名
  5. ネットマスク:ドット区切りの 10 進表記
  6. コメントフィールド:何を書いても可。
  7. プロトコル:Slip, CSlip 等の指定。
  8. 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 ファイルのパラメータに従って 設定されます。

dSLIP パッケージを使った SLIP サーバー

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 エントリを作ってお くこと。

12.3 自動マウントデーモン - AMD

この節は Mitch DSouza からの情報を最小限の修正のみで記載して います。Mitch ありがとう。

自動マウントって何?何の役に立つの?

自動マウントはファイルシステムを必要に応じて自動的にマウントしてくれる 便利な方法です。この方法を使えばサーバーとクライアント双方の負荷を減ら し、NFS を使わなくてもきわめて柔軟なファイル構成を設定できます。また、 プライマリのサーバーが使用できない場合、自動的にセカンダリのサーバにス イッチするようなシステムの冗長化も可能です。union mount とい うマウントの方法もあり、複数のディレクトリの中身を一つのディレクトリに 見せるようなことも可能です。その豊富な機能を使いこなすためには必ず附属 のマニュアルを読んでください。

忘れてはならない重要なポイントをいくつか(重要度の順番というわけではあ りません)

AMD の入手方法

amd

sunsite.unc.edu

/pub/Linux/system/Misc/mount/amd920824upl67.tar.gz

にあります。このパッケージにはバイナリとソース一式、texinfo 形式のドキュ メントが含まれています。

AMD の設定例

現在使用中のファイルシステムに関しては /etc/fstab で設定しま すが、自動マウントに関する設定はこのファイルでは行なわず、コマンドライ ンから指定します。

/etc/fstabNFS マウントを使っている場合、以下のよ うなエントリがあるはずです。

server-1:/export/disk  /nfs/server-1  nfs  defaults
server-2:/export/disk  /nfs/server-2  nfs  defaults

この例では server-1server-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)

ここで:

  1. amd の実行ファイルへのフルパスの指定(もちろんフルパス 指定は必須ではありません)。$PATH の設定によっては `amd' だけでも可能です。
  2. `-x all' は全てのログを取る、という指定です。ログの取り方にはいくつか のレベルがありますので、詳しくはマニュアルを見てください。
  3. `-l syslog' の指定は、ログを syslog daemon 経由で取るこ とを意味します。syslog daemon を経由すればファイルに出力した り、ダンプしたり、無視したり、どこかの空いた tty console に出力したり できます。syslog の代りに直接ファイル名を指定すれば(例えば `-l foo')、ログはそのファイル(foo)に出力されます。
  4. `-a /amd' の指定は /amd ディレクトリを自動マウントの一 時的なマウント地点にすること意味します。このディレクトリは amd が自動的に作るので 、古いディレクトリが残っていれば、 /etc/rc のスクリプトなどで amd を起動する前に削除す る必要があります。
  5. `--' は getopt() にそれ以降の部分はオプションとして解 釈しないことを指示します。コマンドラインで `type:=' オプションを使う場 合、この指定をしないと getopt() が間違ってオプションであると 解釈してしまいます。
  6. `/nfs' が実際のマウント地点になります。このディレクトリ も自動的に作成されるので、`type:=direct' オプションを使う場合を除いて、 サブディレクトリが存在してはいけません。
  7. amd の map ファイルの指定。指定している `amd.server' は以下のようになっています。
    
    # /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 すれば自動的にアンマウントされます。

12.4 Linux をルータとして使うには

Linux はルータとしても機能します。ルータとして使うには gated のようなルーティング用デーモンを動かすか、単純な経路制御しか必要なけれ ば静的なルーティングを指定します。最近のカーネル(1.1.* 以降)を使ってい る場合、カーネルを再構築する際に、

IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y

に y を指定する必要があります。

Olaf Kirch の NAG にはネットワークのデザイン法やルーティングについての 説明があるので、詳しく知りたい方はぜひご覧ください。NAG については「関 連文献」の章で触れています。

12.5 NIS - Sun Network Information System

NIS に興味があれば、 NIS-HOWTO をぜひご覧ください。NIS-HOWTO には必要なソフトの入手 法や Linux 用の NIS の設定の仕方について詳しく説明されています。


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