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

7. 一般的な PC ハードウェアの使用

7.1 ISDN

ISDN(Integrated Services Digital Network)とは、汎用のディジタル・スイッ チ・ネットワークの規格の一種です。ISDN の `call' は、目的地との一対一 の同期的な接続を張ります。ISDN のデータは、通常、複数のチャネルに分割 された高速回線を経由して運ばれます。ISDN のチャネルには 2 つの種類があ ります。 `B チャネル' は実際のデータを転送します (同時に複数チャネルを 利用できます)。一方 `D チャネル' と呼ばれる回線は、 接続確立などの各種の制御情報を ISDN 交換機に送信します (一本だけ使われます)。 オーストラリアを例にとると、ISDN は 2Mbps の回線を使って送られますが、 その回線は 30 本の 64kbps B チャネルと 1 本の 64kbps D チャネルに分割 されており、これらのチャネルを同時にいくつでも使用可能です。すなわち、 30 本のチャネルをバラバラに使って 30 の接続先に 64kbps で接続可能です し、2 本のチャネルを同時使って 15 の接続先に 128kbps で接続することも 可能です。また、数本のチャネルだけを使って、残りはアイドルのままにして おくこともできます。一つのチャネルは送信にも受信にも使えます。ISDN の 元々の目的は、電話会社が同じ回線で、特別な設定変更をしなくても、(音声を ディジタル化した)一般の電話と、家庭や会社へのデータ通信サービスを 行えるようにすることでした。

[訳注: 日本の NTT では、一般ユーザ用には 64kbps の B チャネル 2 本と 16kbps の D チャネルをまとめた「INSネット64」を、企業向けには B チャネル 23 本と D チャネル 1 本をまとめた「INSネット 1500」を提供しています。] コンピュータを ISDN サービスに接続するにはいくつかの方法がありますが、 TA(Terminal Adaptor)を使うのもその一つです。TA とは、ISDN サービスを 契約した際に回線業者が設置してくれるネットワークの終端ユニットに接続し て、複数のシリアルインターフェイスを提供する装置です。これらのインター フェイスの一つを使って回線接続や設定用のコマンドをやりとりし、 残りのインターフェイスが実際のネットワークデバイスに接続して、接続の確 立後にデータをやりとりするために使われます。この種の設定の場合、Linux は特別の設定無しに ISDN を使えます。 TA のポートを、他のシリ アルデバイスと同様に扱えばよいのです。もう一つ、Linux マシンに ISDN カードを装 着して、カーネルに ISDN 機能を組み込み、Linux から直接プロトコルを操 作して接続を行うこともできます(ただし、日本国内で使用可能な ISDN カー ドはサポートされていません)。

カーネルのコンパイルオプション:

        ISDN subsystem  --->
                <*> ISDN support
                [ ] Support synchronous PPP
                [ ] Support audio via ISDN
                < > ICN 2B and 4B support
                < > PCBIT-D support
                < > Teles/NICCY1016PC/Creatix support
        

Linux の ISDN 機能は以下に示すような内蔵 ISDN カードをサポートして います。以下のカードがカーネルの設定時の選択肢として表示されます:

必要なソフトウェアをダウンロードしなければならないカードもありますが、 そのためには専用のプログラムが別に必要です。

Linux の ISDN 機能をどのように設定するかの詳細については /usr/src/linux/Documentation/isdn/ にある各文書と www.lrz-muenchen.de にある isdn4linux という FAQ をご覧ください(英語版を見るため には English を選ぶことをお忘れなく)。

PPP についてのメモ。PPP プロトコルは非同期、同期を問わずに使 えますが、現在広く使われている Linux 用の PPP デーモン pppd は非同期モードしかサポートしていません。PPP を ISDN 経由で使いたい場合、 特別に修正したバージョンが必要になります。そのバージョンがどこで入手で きるかも上記の文書で紹介されています。

7.2 PLIP (Linux 2.0 の場合)

PLIP のデバイス名は `plip0', `plip1, plip2 です。

カーネルのコンパイルオプション:

        Network device support  --->
            <*> PLIP (parallel port) support
        

plip(Parallel Line IP)は、SLIP と同様に、2 台のマシンの間で 一対一 接続の機能を提供します。ただし、シリアルポートではなくプリ ンタ用のパラレルポートを使って接続する点が異なります(ケーブルの結線表 については、後述する結線表の節を参照してください)。パラレルポートは一 度に複数ビットを転送できるので、plip を使えば通常のシリアルポート を使った接続よりは高速な接続が可能になります。また、最も単純な パラレルポートであるプリンタポートといえど、 16550AFN UART シリアル ポートを十分代替できるので、比較的高価な後者を購入せずにすみます (内蔵のシリアルポートが動作の遅い 16450 UART の時に必要)。 PLIP はシリアル接続と比べて CPU を消費するので、イーサネットカードを何 枚か安価に入手できる場合にはきっと使わない方がよいでしょう。しかし、他 に使えるものがない場合には非常に役立つでしょう。接続がうまくできている 場合、転送速度としては 20KB/秒 程度が期待できるはずです。

PLIP デバイスドライバは、パラレルデバイスドライバとパラレルポートの ハードウェアを取り合います。どちらのドライバも使いたければ、両方のドラ イバをモジュールとしてコンパイルして、PLIP 用に使いたいポートとプリン タドライバ用に使いたいポートを選べるようにしましょう。カーネルモジュール の設定については ``Mudules mini-HOWTO'' を見てください。

ラップトップ機の中には、プリンタでは使っていないけれど PLIP には必要 な信号を扱えないようなチップを使っていて、PLIP が使用できないようなもの もあります。

Linux の plip インターフェイスは Crynwyr Packet Driver PLIP と互換性があるので、Linux マシンと DOS マシンを PLIP 経由で接続して、 さまざまな TCP/IP ソフトウェアを使うことができます。

2.0.* 系列のカーネルでは、plip デバイスは以下のように I/O ポートと IRQ に対応します:

        device  i/o     IRQ
        ------  -----   ---
        plip0   0x3bc   5
        plip1   0x378   7
        plip2   0x278   2
        

お使いのパラレルポートの設定が上記の組み合わせと異なる場合、 ifconfig コマンドの `irq' オプションを使ってポートの IRQ を変えることができます(ROM BIOS でプリンタポートが IRQ を使うか否 かを設定できる場合、忘れずに IRQ を使うように設定しておいてください)。 別の方法としては、モジュールを使っているならば insmod のコマンドラインで ``io='' と ``irq='' を指定で きます。以下に例を示します:

        root# insmod plip.o io=0x288 irq=5
        

PLIP の動作は 2 つのタイムアウト値によって制御されます。 ほとんどの場合はデフォルト値のままで大丈夫でしょう。 コンピュータが非常に遅い場合には、タイムアウト値を増やす必要があるかも しれませんが、この場合に実際に増やすのは通信相手のコンピュータ のタイムアウト値です。カーネルを再コンパイルせずにタイマ設定を変更でき る plipconfig というプログラムがあります。これは多くの Linux ディストリビューションに付属しています。

plip インタフェースを設定するには、以下のコマンドを実行する (またはシステムの起動スクリプトに追加する)必要があります:

        root# /sbin/ifconfig plip1 localplip pointopoint remoteplip
        root# /sbin/route add remoteplip plip1
        

ここで、使われるポートの I/O アドレスは 0x378 です。 localplipremoteplip の部分は PLIP ケーブル上の通信で使わ れるホスト名か IP アドレスです。筆者は、localplip と remoteplip を /etc/hosts データベースに登録しています。

        # plip entries
        192.168.3.1   localplip
        192.168.3.2   remoteplip
        

pointtopoint パラメータは SLIP の場合と同じ意味で、接続のもう 一方の端にいるマシンのアドレスを設定します。

ほとんどの場合、plip インターフェイスは SLIP インターフェイス と同様に使えます。ただし plipdipslattach を使う 必要もなければ、使うこともできません。

PLIP に関する詳しい情報は ``PLIP mini-HOWTO'' に載っています。

7.3 PLIP (Linux 2.2 の場合)

バージョン 2.1 のカーネルの開発中に、パラレルポートのサポートが 変更され、設定がもっとうまくできるようになりました。

カーネルのコンパイルオプション:

        General setup  --->
            [*] Parallel port support
        Network device support  --->
            <*> PLIP (parallel port) support
        

新しい PLIP コードは古いコードのように動作しますが(前の節の説明と同様 に ifconfig コマンドと route コマンドを使います)、パラレルポート のサポートが改良されたためにデバイスの初期化方法は変わっています。

「最初」の PLIP デバイスは常に ``plip0'' になります。ここで「最初」 と言っているのはシステムが最初に検出したという意味で、これは イーサネットデバイスの動作と似ています。実際に使われている パラレルポートは、/proc/parport に示されている利用可能な ポートのどれかです。例えば、パラレルポートが 1 つしかなければ、 /proc/parport/0 というディレクトリしかないはずです。

パラレルポートが使っている IRQ 番号をカーネルが検出できなかった場合 には、``insmod plip'' は失敗します。この場合には、 /proc/parport/0/irq に正しい番号を書き込んで、insmod を 再び実行すれば大丈夫です。

パラレルポートの管理に関する完全な説明は Documentation/parport.txt ファイルに書かれています。この ファイルはカーネルソースに含まれています。

7.4 PPP

PPP のデバイス名は `ppp0', `ppp1' のようになります。 最初のデバイスが `0' で、以後は順に番号が付きます。

カーネルのコンパイルオプション:

        Networking options  --->
            <*> PPP (point-to-point) support
        

PPP の設定については PPP-HOWTO で詳しく説明されています。

pppd を使ってインターネットと常時接続する方法

もし運良くインターネットへの常時接続が可能な環境にいて、 PPP 接続が 切れた場合には自動的にリダイアルしたいという場合には、以下の簡単な技を使って 実現できます。

以下のコマンドで root から起動できるように PPP を設定します。

# pppd
/etc/ppp/options ファイルに `-detach' オプションを指 定することを忘れずに。その上で、以下の行を /etc/inittab に加 え、getty の設定に用います。
pd:23:respawn:/usr/sbin/pppd
こうしておけば、init プログラムが pppd の立ち上げと 監視を行い、pppd が死んだ場合は自動的に再起動します。

7.5 SLIP クライアント

SLIP のデバイス名は `sl0', `sl1' などになります。最 初のデバイスが `0' で、残りは順に番号が振られます。

カーネルのコンパイルオプション:

        Network device support  --->
            [*] Network device support
            <*> SLIP (serial line) support
            [ ]  CSLIP compressed headers
            [ ]  Keepalive and linefill
            [ ]  Six bit SLIP encapsulation
        

SLIP(Serial Line Internet Protocol)を使えば、モデム経由の電話回線や、 なんらかの専用線のようなシリアル回線上で TCP/IP 接続を実現できます。もちろ ん SLIP を使うためには、地元の SLIP サーバ に接続しなければ いけませんが、世界中の大学や商用プロバイダが SLIP 接続を提供しています。

[訳注: 日本では SLIP 接続よりも PPP 接続の方が主流です。]

SLIP はシリアルポートを経由して IP データグラムを送りますので、シリア ルデバイスを制御する必要があります。SLIP のデバイス名は sl0sl1 などですが、これらとシリアルデバイスとの関係はどのように なっているのでしょうか? SLIP のプログラムは ioctl (I/O control) システムコールを使ってシリアルデバイスを SLIP デバイスに変換しています。この ためのプログラムが dipslattach です。

dip

dip (Dialup IP)とは、シリアルデバイスの回線速度を設定したり、 モデムに電話をかけさせて自動的にリモートサーバにログインしたり、サー バから送られるログイン時のメッセージの中から割り当てられた IP アドレス を見つけたり、必要に応じて ioctl を使いシリアルポートを SLIP モードに変えたりする多機能なプログラムです。dip には強力なス クリプト機能があり、ログイン手続きを自動実行できます。

dip は metalab.unc.edu にあります。

インストールするには、以下の手順を実行してください:

        user% tar xvzf dip337o-uri.tgz
        user% cd dip-3.3.7o
        user% vi Makefile
        root# make install
        

このパッケージに入っている Makefileuucp というグ ループがあることを前提にしています。環境に合わせて、このグループを dipSLIP にしてください。

slattach

slattachdip に比べるとずいぶん単純なプログラムで す。非常に簡単に使えますが、dip ほどの機能は持っていません。 slattach はスクリプト機能もなく、シリアルデバイスを SLIP デバ イスに変換する機能しか持っていません。slattach を使う場合には、 IP アドレスなどの情報が予め分っており、さらに起動前にシリアル接続が確立され ていなければいけません。slattach は、シリアル回線を経由してサー バに直結していたり、シリアルの専用回線を使っている際に便利なプログラム です。

どんな場合にどれを使うべきか?

dip は、モデムを経由して SLIP サーバに接続する場合か、一時的 な接続を張る場合に使います。専用回線でサーバと接続しており、接続のため に特別の処理が不要の場合は slattach が便利です。詳細について は「恒久的な SLIP 接続」の節を参照してください。

SLIP インターフェイスの設定はイーサネットインターフェイスの設定によ く似ています(既述の「イーサネットデバイスの設定」の節を参照してください)。 しかしながら、いくつか重要な違いもあります。

まず第一に、SLIP の場合はイーサネットのネットワークとは異なり、接続 の両端に一台ずつのマシンしかありません。ethernet の場合はケーブルを繋 げばすぐに使えますが、SLIP の場合、接続形態にもよりますが、ネットワーク 接続を開始するには何らかの初期化処理が必要です。

dip の場合、システムの起動時には設定できず、シリアル接続の 準備ができた段階で起動することになります。この手順は自動化できます。 slattach の場合、rc.inet1 の中で設定するのがいいでしょ う。この方法については後述します。

SLIP サーバには動的に IP アドレスを割り当てるタイプのサーバと予め決 まった IP アドレスを使うタイプのサーバの 2 種があります。また、ほとん どの SLIP サーバが、電話をかけてログインする時にはユーザ名とパスワード の入力を求めます。dip を使えば、この処理を自動化できます。

予め決まった IP アドレスを使う SLIP サーバ

予め割り当てておいた IP アドレスを使うタイプのサーバでは、事前に 専用の IP アドレスを各クライアントに割り当てて、各クライアントは接続の 際にその IP アドレスで SLIP ポートを設定します。この種の SLIP サーバで は、モデムからの着信に答えて、ユーザ名とパスワードの入力を促してユーザ を確認した後、あなた用の IP アドレス向けのデータグラムはすべてその SLIP デバイスに送るように経路制御情報を設定します。 この種のサーバを使っている場合は、自分のホスト名と IP アドレスは予め 決まっていますから、 /etc/hosts に書いておくことも可能です。ま た rc.inet2host.conf, resolv.conf, /etc/HOSTNAME, rc.local などを通常のイーサネット接続 と同様に設定することができます。rc.inet1 を設定する場合、SLIP 接続用に特別のコマンドを設定する必要はありません。ネットワークインター フェイスを設定するなどの作業は dip の仕事です。必要な情報は dip に与え、dip がモデムを使って電話をかけ、接続が確 立してから必要な設定を実行するようにします。

接続先の SLIP サーバがこの種の設定の場合、次に「DIP の使い方」の節に進 んで、dip の設定方法を調べてください。

接続時に IP アドレスを割り当てるタイプのサーバ

動的な SLIP サーバとは、予め用意してある複数の IP アドレス の中から、接続のたびに異なる IP アドレスをクライアントに割り当てる タイプのサーバです。この場合、接続のたびに割り当てられる IP アドレスは 異なり、あなたが今使っているアドレスも、ログアウト後は誰か別の人に割り 当てられることになります。SLIP サーバを設定するネットワークの管理者は、 予め SLIP で使うための IP アドレスを複数個用意しておき、新しく接 続してきたマシンには使っていない IP アドレスを割り当てるように設定しま す。 この場合、ログインプロセスの中でウェルカム・メッセージとともに割り当て た IP アドレスが示され、その接続の間はその IP アドレスを使って通信しま す。

この種のサーバを使う場合も、予め IP アドレスを割り当てるタイプ のサーバとほぼ同じ設定になりますが、接続の度に割り当てられた IP アドレス を使って SLIP デバイスを設定するというステップが余計に必要になります。

ここでも dip がこの大変な作業を引き受けてくれます。 dip はログイン処理をするだけでなく、ウェルカムメッセージの 中に示される IPアドレスを自動的に読みこんで、それを使って SLIP デバイ スを設定してくれます。

接続先の SLIP サーバがこの種の設定の場合は、「DIP の使い方」の節へ 進んで dip の設定方法を覚えてください。

DIP の使い方

今までに述べてきたように、dip を使えば SLIP サーバへ電話をか けてログインするという処理が自動的にできます。ログインすれば、 dip は自動的に ifconfigroute コマンドを 使って SLIP デバイスを設定します。

dip を使うためには、`dip スクリプト' を書く必要があります。 `dip スクリプト' は、基本的に dip が理解できるコマンドを並べ たもので、dip で実行したいコマンドを、どのように実行するかを 記述しておきます。どのように書くかは、dip プログラムに付属の sample.dip をご覧ください。dip は多数のオプションを 有する強力なプログラムなので、ここではその詳細に触れることができません。 dipman や README、サンプルファイルを調べてくだ さい。

パッケージに付属のsample.dip ファイルは、予め割り当てら れた IP アドレスを使うような設定になっています。動的に IP アドレスを割 り当てるタイプのサーバの場合は、サーバが割り当てた IP アドレスを読み、 自動的に SLIP デバイスに設定するようなコマンド例を参照してください (新しいバージョンの dip パッケージに入っています)。以下 に示すサンプルは dip337j-uri.tgz に付属の sample.dip をもとに修正したバージョンで、この例を元に設定していくのがいいでしょう。 以下の部分を /etc/dipscript ファイルにセーブして、お使いの環 境に合うように修正してください。

#
# sample.dip    Dialup IP connection support program.
#
#               This file (should show) shows how to use the DIP
#       This file should work for Annex type dynamic servers, if you
#       use a static address server then use the sample.dip file that
#       comes as part of the dip337-uri.tgz package.
#
#
# Version:      @(#)sample.dip  1.40    07/20/93
#
# Author:       Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#

main:
# Next, set up the other side's name and address.
# My dialin machine is called 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Set netmask on sl0 to 255.255.255.0
netmask 255.255.255.0
# Set the desired serial port and speed.
port cua02
speed 38400

# Reset the modem and terminal line.
# This seems to cause trouble for some people!
reset

# Note! "Standard" pre-defined "errlevel" values:
#  0 - OK
#  1 - CONNECT
#  2 - ERROR
#
# You can change those grep'ping for "addchat()" in *.c...

# Prepare for dialing.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble

# We are connected.  Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_trouble
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:

# We are now logged in.
wait SOMEPROMPT 30
if $errlvl != 0 goto prompt_error

# Command the server into SLIP mode
send SLIP\n
wait SLIP 30
if $errlvl != 0 goto prompt_error

# Get and Set your IP address from the server.  
#   Here we assume that after commanding the SLIP server into SLIP
#   mode that it prints your IP address
get $locip remote 30
if $errlvl != 0 goto prompt_error

# Set up the SLIP operating parameters.
get $mtu 296
# Ensure "route add -net default xs4all.hacktic.nl" will be done
default

# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit

prompt_error:
print TIME-OUT waiting for sliplogin to fire up...
goto error

login_trouble:
print Trouble waiting for the Login: prompt...
goto error

password:error:
print Trouble waiting for the Password: prompt...
goto error

modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit

exit:
exit

上記のサンプルスクリプトでは 動的に IP アドレスを割り当てるタイプの SLIP サーバに接続するように設定しています。予め IP アドレ スの分っている SLIP サーバでは、dip337j-uri.tgz に付属の dsample.dip を使ってください。

dipget $local コマンドを与えれば、 dip は接続先から送られてきたテキストの中から IP アドレスのよ うに見える文字列(例えば `.' で区切られた数字)を探します。この修正は、 動的に IP アドレスを割り当てるタイプの SLIP サーバ用で、 サーバから与えられる IP アドレスを読み取る過程を自動化できます。

上記の例では、自動的に SLIP 接続をデフォルトの経路に指定します。既に ethenet ネットワークに接続していて、デフォルトの経路はそちらにしたいよ うな場合には、上記のスクリプトから default を指定している行を 削除してください。このスクリプトが終了してから ifconfig コマ ンドを使って sl0 デバイスができていることを確認します。これが SLIP デバイスです。必要ならば、dip コマンドが終了してから ifocnfigroute コマンドを使って手動で設定してくだ さい。

dip では mode コマンドを使って、複数のプロトコルの中 から使うべきプロトコルを指定できます。もっともよく使われているプロトコ ルは SLIP に圧縮機能を組み込んだ cSLIP です。接続の両端が同じ プロトコルを使う必要があるので、サーバの選んだプロトコルと同じものを使っ ているかを確認してください。

上記のスクリプトはたいていのエラーには耐えられるように頑丈に作ってありま す。より詳しい情報は dip の man ページをご覧ください。少し 工夫をすれば、設定した時間内にサーバへ接続できなければ自動的にリダイアル したり、複数のサーバを順に試してみるような機能を組み込むことも可能です。

専用線と slattach を使って恒久的な SLIP 接続を行う方法

2 台のマシンをシリアルケーブルでつないでいたり、2 台のマシンを専用線や 常時接続しているシリアル回線で接続しているような環境ならば、シリアル接 続を設定するために dip を使う必要はありません。そのような接続 の設定には、より利用の簡単な slattach の機能で十分です。

専用回線の場合、起動時に実行される rc.inet1 で必要な設定を行 うのがいいでしょう。実際のところ、必要なのはシリアルデバイスを正しいス ピードに設定して、SLIP モードに変更するだけです。slattach を 使えば、この作業は一つのコマンドで実現できます。以下のコマンドを rc.inet1 ファイルに追加してください。

        #
        # Attach a leased line static SLIP connection
        #
        #  configure /dev/cua0 for 19.2kbps and cslip
        /sbin/slattach -p cslip -s 19200 /dev/cua0 &
        /sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
        #
        # End static SLIP.
        

ここで、

IPA.IPA.IPA.IPA

は、あなたのマシンの IP アドレスで、

IPR.IPR.IPR.IPR

接続先のマシンの IP アドレスです。

slattach は指定したシリアルデバイスに空いている最初の SLIP デバイスを割り当てます。slattach の割り当てるデバイス名は sl0 から始まり、次に割り当てるデバイス名は sl1、のよ うになります。

slattach-p 引数を指定すれば、異なるプロトコル を設定可能です。この機能を使って、圧縮の有無によって SLIPcSLIP を使い分ける場合がよくあります。注意:圧縮の有無は接続 の両端で同じ設定にする必要があります。

7.6 SLIP サーバ

インターネットなどのネットワークに接続したマシンがあり、電話を経由して 接続してきた他の人に各種のサービスを提供したい場合、あなたのマシンをサー バとして設定する必要があります。接続のためのシリアル回線のプロトコルに SLIP を使った場合、設定の仕方には 3 種類の方法があります。それぞれの方法 を以下に示しますが、私のお薦めは最初の sliplogin を使う方法で す。この方法が一番設定も理解も簡単です。でも他の方法についても説明します ので、どれを使うかは御自分で判断してください。

sliplogin を使った SLIP サーバの設定

sliplogin は通常の login シェルの代わりに使う SLIP ユーザ用の プログラムで、端末の回線を SLIP モードに変更します。sliplogin を使えば、 Linux マシンを静的アドレスサーバにも動的アドレスサーバにも 設定できます。前者は予めユーザごとに割り当てておいた IP アドレスを使い、 後者では予め用意しておいた IP アドレスの中から接続の度に IP アドレスを 割り当てることになります。

接続過程は通常のログインプロセスとほぼ同じで、まずユーザ名とパスワード が必要です。しかしながら、その後はログインシェルが立ちあがる代わりに 設定ファイル(/etc/slip.hosts)に記述されたログイン名に従って sliplogin が実行されます。設定ファイルのユーザ名が確認されれ ば、回線を 8 ビットすべてが通過するように設定して、ioctl コー ルを使って回線を SLIP モードに変更します。この過程が終了したら、 設定の最終段階へと進みます。 sliplogin はシェルスクリプトを起動して、指定した IP アドレスやネットマスクに従っ て SLIP デバイスを設定し、適切な経路を定義します。このためのスクリプト は通常 /etc/slip.login と呼ばれていますが、getty の ようにユーザごとに設定することもでき、そのような場合は /etc/slip.login.loginame にユーザごとの設定スクリプトを用意し ます。

sliplogin を使うためには設定ファイルがいくつか必要です。以 下に、それらをどこから入手してどのように設定するかを説明します。 必要なファイルは以下の通りです:

sliplogin の入手先

すでにディストリビューションの一部として sliplogin をイン ストール済みかもしれませんが、そうでなければ metalab.unc.edu から入手できます。この tar ファイルには、ソースとコンパイル済みのバイ ナリ、man ページが入っています。

sliplogin を実行できるのは、その権限を持ったユーザだけなので、 以下のようなエントリを/etc/group ファイルに登録する必要があり ます。

 ..
slip::13:radio,fred
 ..

sliplogin パッケージをインストールすれば、Makefile が自動的に sliplogin のグループを slipにし、このグルー プに属するユーザだけが sliplogin プログラムを実行できるように なります。上の例では radiofred のみが sliplogin を実行できます。

必要なバイナリを/sbin ディレクトリにインストールし、 manページを man ページの 8 章に登録してください。 以下のようにします。

# cd /usr/src
# gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
# cd sliplogin-2.1.1
# < shadow パスワードを使わない場合は Makefile を編集してください >
# make install

インストール前に自分でプログラムを再コンパイルする場合、make install の前に make clean してください。どこか別のディレ クトリにインストールする場合は Makefileinstall の指定を変更します。

詳しくは、パッケージに付属の README ファイルをご覧ください。

SLIP ホスト用の /etc/passwd

通常、SLIP で接続してくる人向けに特別のエントリを /etc/passwd に用意する必要があります。よく行なわれているのは、接続してくるホスト名 の頭に大文字の `S' を付けて登録する方法です。今回紹介した例の場合、 radio 用には以下のような /etc/passwd エントリを追加 します:

Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin

実際にはアカウント名には特に意味が無いので、自分にとって分りやすい名前 を付けてかまいません。

注意: 電話をかけてくる人はシェルを使うわけではないので、専用のホームディ レクトリを用意する必要はありません。/tmp あたりを指定しておけ ばいいでしょう。また、通常のログインシェルの代わりに sliplogin を指定していることに注意してください。

/etc/slip.hosts の設定

/etc/slip.hosts ファイルは、sliplogin がチェックする ファイルで、電話をかけてくる人のログイン名と必要な設定を登録しておきま す。IP アドレスやネットマスクの設定をするのもこのファイルになります。 以下に示す例では 2 つのエントリがあり、radio には予め IP アドレスを割り当て、albert には動的に IP アドレスを割りあ てます。

#
Sradio   44.136.8.99   44.136.8.100  255.255.255.0  normal      -1
Salbert  44.136.8.99   DYNAMIC       255.255.255.0  compressed  60
#

/etc/slip.hosts ファイルのエントリを以下に示します:

  1. 電話をかけてきた人のログイン名
  2. サーバーマシン、すなわちこのマシンの IP アドレス
  3. 電話をかけてきたホストに割り当てる IP アドレス。この欄が DYNAMIC になっていれば、後述する /etc/slip.tty ファ イルにある情報に従って IP アドレスを割り当てます。注意: この 機能を使うには、最低でもバージョン 1.3 以上の sliplogin が必要です。
  4. 電話をかけてきたマシンに設定するネットマスクは、クラス C の場合 255.255.255.0 のように、ドットで区切った 10 進表記で指定します。
  5. 圧縮やその他の slip の機能を有効/無効にする slip モードの設定で す。指定できる値は "normal" または "compressed" です。
  6. timeout パラメータで指定した時間以上データグラムのやりとりが無 い場合、自動的に接続を切ります。負の値を指定すれば timeout 機能は無効 になります。
  7. 省略可能な引数。

注意: 2 つめと 3 つめの欄には、ホスト名でもドット区切の 10 進表記の IP アドレスでも指定可能です。ホスト名を指定した場合、そのホスト名が IP ア ドレスに変換できなければなりません。変換できない場合、スクリプトは異 常終了します。あるホスト名が IP アドレスに変換できるかどうかを調べるに は、そのホスト名に対して telnet してみるのがいいでしょう。もし Trying nnn.nnn.nnn... というメッセージが出れば、そのマシンで は指定したホスト名を IP アドレスに変換できています。`Unknown host' というメッセージが出る場合は変換できていません。変換できな い場合はドット区切の 10 進表記を使うか、リゾルバの設定を修正しましょう (詳しくは 名前の解決(Name resolution) の節を参照してください)。

slip でよく使うモードは以下の 2 つです:

normal

通常の非圧縮の SLIP

compressed

van Jacobsen のヘッダ圧縮を可能にするモード(cSLIP)

通常これらは排他的なので、どちらか一方のみを指定します。その他指定可能 なオプションについては man ページを参照してください。

/etc/slip.login ファイルの設定

sliplogin/etc/slip.hosts ファイルを調べた結果、電話 をかけてきたマシン名が見つかれば、その IP アドレスとネットマスクを使っ て /etc/slip.login スクリプトを実行し、 SLIP インターフェ イスを実際に設定します。

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 ...
#   SLIPunit ttyspeed   pid   the arguments from the slip.host entry
#
/sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
/sbin/route add $6
arp -s $6 <hw_addr> pub
exit 0
#

お気づきのように、このスクリプトでは ifconfigroute を使って自分の IP アドレスと接続先の IP アドレス、ネッ トマスクを設定し、SLIP デバイスを使って接続先への経路を設定しているだ けです。必要な設定は slattach コマンドで設定することもできま す。

サーバマシンと同じイーサネット上にいるホストから、電話を経由して接続し てきているホストへ接続するために、arp コマンドで 代理 ARP(Proxy ARP)を設定していることにも注意してください。 <hw_addr>欄は、このマシンのイーサネットカードのハードウェ アアドレスを指定します。イーサネットのネットワークに接続していないサー バの場合はこの行を指定する必要はありません。

/etc/slip.logout ファイルの設定

接続が切れた場合、シリアルデバイスを元の状態に戻して、再度電話を受け られるように設定しておきましょう。このために使うのが /etc/slip.logout ファイルです。このファイルの構造はごく単純で、 /etc/slip.login ファイルと同じ引数を取ります。

        #!/bin/sh -
        #
        #               slip.logout
        #
        /sbin/ifconfig $1 down
        arp -d $6
        exit 0
        #
        

このスクリプトがやっているのはインターフェイスを `down' させて、以前に 登録された経路を削除するだけです。同時に arp コマンドで設定し ていた代理 ARP も削除します。この作業もサーバマシンがイーサネットに接 続していない場合は必要ありません。

/etc/slip.tty ファイル の設定

動的に IP アドレスを割り当てる場合(すなわち /etc/slip.hostsDYNAMIC というキーワードを指定したエントリを作った場合)、 割り当てるポート用の IP アドレスを登録するための /etc/slip.tty ファイルを設定しなければなりません。ただし、このファイルが必要になるの は、ユーザへのアドレス割り当てをサーバに動的に行わせる場合だけです。

このファイルは 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 サーバ

以下に説明する情報のいくつかは dip の man ページから引用 したことを最初に白状しておきます。この man ページでは Linux を SLIP サーバにする方法について簡単に紹介してあります。また、以下の記述は dip337o-uri.tgz パッケージ用のもので、その他のバージョンの dip には当てはまらないことも多いので御注意ください。

dip には input モード動作があります。ここでは起動したユーザの エントリを用い、 /etc/diphosts ファイルの設定に従って 自動的にシリアル回線を SLIP 接続として設定します。このモードに入るには、 dipdiplogin という名前で起動します。この機能を使 えば dip を使って SLIP サーバを構築できます。この際には ログインシェルに diplogin を用いた特別なアカウントを用意します。

この方法を使う場合、まず以下のようにシンボリックリンクを設定します:

# ln -sf /usr/sbin/dip /usr/sbin/diplogin

次に /etc/passwd/etc/diphosts ファイルの双方に必 要なエントリを追加します。必要なエントリの形式を以下に示します:

dip を使って SLIP サーバを作る場合、dip を(input モー ドで)ログインシェルとして使うための特別の設定が必要になります。SLIP 用のアカウントには、大文字の `S' を頭に付けた `Sfredm' などを使うのが いいでしょう。

SLIP ユーザ用の /etc/passwd ファイルのエントリの例は以下のよ うになります:

Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^         ^^        ^^  ^^   ^^   ^^   ^^
|          |         |   |    |    |    \__ diplogin をログインシェルに
|          |         |   |    |    \_______ ホームディレクトリ
|          |         |   |    \____________ ユーザ名
|          |         |   \_________________ ユーザのグループ ID
|          |         \_____________________ ユーザ ID
|          \_______________________________ 暗号化したパスワード
\__________________________________________ SLIP を使うユーザ名

ユーザがログインした後、login がユーザ名を確認し、 diplogin コマンドを実行します。dipdiplogin というコマンド名で起動されると、自動的に ログインシェルとして機能します。diplogin は、まず getuid() ファンクションコールを使って自分を起動したユーザの ユーザ ID を調べます。その後、/etc/diphosts ファイルの最初の エントリを見て、そのユーザ ID か接続があったデバイスの tty 名 を調べ、その設定に従って適切な設定を行います。diphosts に ユーザ名のエントリを作るか、サーバのデフォルトの設定を使って、ユーザご とに静的な IP アドレスの割り当てと動的な割り当てを混在させるような方法 を取るかは判断におまかせします。

dip コマンドは input モードで起動されれば、自動的に 「代理 ARP」のエントリを追加するので、arp コマンドを手動で実行 する必要はありません。

/etc/diphosts の設定

/etc/diphostsdip が用いるファイルで、 リモートホストの設定を前もってここに書いておきます。この ファイルに設定するリモートホストは電話をかけて接続してくる ユーザーのマシンの場合もあれば、あなたが Linux マシンを 用いて接続する先のホストの場合もあります。

/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. ネットマスクk: ドット区切りの 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

この例では、リモートのアドレスが 145.71.34.1、MTU が 296 である SLIP 接続を指定しています。

Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006

また、この例ではリモートアドレスが 145.71.34.1、MTU が 1006 である cSLIP 対応接続を指定しています。

お分りのように、予め割り当てた IP アドレスを使って接続してくるユー ザ用には /etc/diphosts にエントリを設けておく必要があります。 また、特定のポートにアクセスしたユーザ全てに同じ IP アドレスを割り当て るような設定の場合は tty デバイスのエントリを用意して、ユーザ 名のエントリは作りません。少なくとも、どのモデムに当っても適切な設定が 行われるように、それぞれの tty デバイスごとの設定はしておくこ とをお忘れなく。

ユーザがログインしてくれば、通常のログイン名とパスワードの入力プロンプ トが表示されます。そのプロンプトに対して SLIP ログイン用のユーザ名とパ スワードを入力します。それらが正しければ特にメッセージは表示されず、自 動的に接続端を SLIP モードに変更します。すると、ユーザが接続可能になり、 diphosts ファイルの指定に従って設定されるようになるはずです。

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

Matt Dillon <dillon@apollo.west.oic.com> は、 SLIP の着信 のみならず、発信にも使えるパッケージを作りました。彼のパッケージでは、小さ なプログラムとスクリプトが集まって必要な設定を行います。スクリプトの一 つは tcsh を使うので、このパッケージを使うには tcsh をインストールする必要があります。また Matt は、スクリプトの一つで 必要となる expect のバイナリパッケージも配布しています。このパッ ケージを使いこなすには expect を使った経験があるといいでしょうが、 だからといって後込みすることはありません。

このパッケージには、Matt が書いた詳しい README ファイルが付属している ので、ここではそれを繰り返すことはしません。

dSLIP パッケージは以下のサイトから入手できます。

apollo.west.oic.com

/pub/linux/dillon_src/dSLIP203.tgz

あるいは、以下のサイトからも入手できます。

metalab.unc.edu

/pub/Linux/system/Network/serial/dSLIP203.tgz

make install する前に README ファイルを読ん で、適切な /etc/passwd/etc/group エントリを作る ことをお忘れなく。


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