Linux Networking-HOWTO (Previously the Net-3 Howto) Current Author: {Poet} poet@linuxports.com Original Authors: Terry Dawson (main author), VK2KTJ; Alessandro Rubini (maintainer) v1.5, August 1999 The Linux Japanese FAQ Project v1.5j, January 2000 Linux オペレーティングシステムのカーネルには、ゼロから書きあげられた ネットワークコードが組み込まれています。最近のカーネルに実装されている TCP/IP の性能は、既存の最高のシステムにも比肩しうる結果を示していま す。この文書は Linux のネットワーク用のソフトウェアのインストールと設 定方法、さらに関連するツール類について解説します。 ______________________________________________________________________ 目次 1. はじめに 2. 文書の履歴 2.1 フィードバック 3. この HOWTO の読み方 3.1 この文書内での約束事 4. Linux のネットワーク機能に関する一般的な情報 4.1 Linux カーネルのネットワーク機能の開発小史 4.2 Linux のネットワーク機能についての情報源 4.3 Linux 限定でないネットワークに関する情報源 5. ネットワークの設定に関する一般的な情報 5.1 何から始めるか? 5.1.1 最新のカーネルソース(なくてもかまいません) 5.1.2 最新のネットワークツール 5.1.3 各種ネットワーク用アプリケーションプログラム 5.1.4 IP アドレスの説明 5.2 設定コマンドの置き場所は? 5.3 ネットワークインターフェイスの作成 5.4 ネットワークインターフェイスの設定 5.5 リゾルバの設定 5.5.1 名前に含まれるものは? 5.5.2 必要な情報 5.5.3 /etc/resolv.conf 5.5.4 /etc/host.conf 5.5.5 /etc/hosts 5.5.6 ネームサーバの実行 5.6 ループバックインターフェイスの設定 5.7 経路制御(ルーティング) 5.7.1 さて、routed プログラムは何をしているのでしょう? 5.8 ネットワーク経由の各種サービスとサーバの設定 5.8.1 /etc/services 5.8.1.1 /etc/services ファイルの実例 5.8.2 /etc/inetd.conf 5.8.2.1 /etc/inetd.conf の例 5.9 その他のネットワークに関連した設定ファイル 5.9.1 /etc/protocols 5.9.2 /etc/networks 5.10 ネットワークのセキュリティとアクセス制御 5.10.1 /etc/ftpusers 5.10.2 /etc/securetty 5.10.3 tcpd を使ったホスト別アクセス制御機構 5.10.3.1 /etc/hosts.allow 5.10.3.2 /etc/hosts.deny 5.10.4 /etc/hosts.equiv 5.10.5 ftp デーモンの適切な設定 5.10.6 ファイアウォール 5.10.7 その他のお勧め 6. IP 関係、イーサネット関係の情報 6.1 イーサネット 6.2 EQL - 複数回線のトラフィックイコライザ 6.3 IP パケット統計情報の取得(Linux 2.0 用) 6.4 IPパケット統計取得(Linux 2.2 用) 6.5 IP エイリアス 6.6 IP ファイアウォール(Linux 2.0 用) 6.7 IP ファイアウォール (Linux 2.2 用) 6.8 IPIP カプセル化 6.8.1 トンネリングを行うネットワーク設定 6.8.2 トンネリングを行うホストの設定 6.9 IP マスカレード(IP Masquerade) 6.10 IP 透過プロキシ(IP Transparent Proxy) 6.11 IPv6 6.12 モバイル IP(Mobile IP) 6.13 マルチキャスト 6.14 NAT - ネットワークアドレス変換(Network Address Translation) 6.15 Traffic Shaper - 許可する帯域幅の変更 6.16 Linux 2.2 における経路制御 7. 一般的な PC ハードウェアの使用 7.1 ISDN 7.2 PLIP (Linux 2.0 の場合) 7.3 PLIP (Linux 2.2 の場合) 7.4 PPP 7.4.1 pppd を使ってインターネットと常時接続する方法 7.5 SLIP クライアント 7.5.1 dip 7.5.2 slattach 7.5.3 どんな場合にどれを使うべきか? 7.5.4 予め決まった IP アドレスを使う SLIP サーバ 7.5.5 接続時に IP アドレスを割り当てるタイプのサーバ 7.5.6 DIP の使い方 7.5.7 専用線と slattach を使って恒久的な SLIP 接続を行う方法 7.6 SLIP サーバ 7.6.1 sliplogin を使った SLIP サーバの設定 7.6.1.1 sliplogin の入手先 7.6.1.2 SLIP ホスト用の /etc/passwd 7.6.1.3 /etc/slip.hosts の設定 7.6.1.4 /etc/slip.login ファイルの設定 7.6.1.5 /etc/slip.logout ファイルの設定 7.6.1.6 /etc/slip.tty ファイル の設定 7.6.2 dip を使った SLIP サーバ 7.6.2.1 /etc/diphosts の設定 7.6.3 dSLIP パッケージを使った SLIP サーバ 8. その他のネットワーク技術 8.1 ARCNet 8.2 Appletalk (AF_APPLETALK) 8.2.1 Appletalk 用ソフトウェアの設定 8.2.2 Linux のファイルシステムを Appletalk 経由で提供する方法 8.2.3 AppleTalk 経由での Linux のプリンタの共有 8.2.4 appletalk ソフトウェアの起動 8.2.5 appletalk ソフトウェアのテスト 8.2.6 netatalk の注意点 8.2.7 さらに詳しい情報について 8.3 ATM 8.4 AX25 (AF_AX25) 8.5 DECNet 8.6 FDDI 8.7 フレームリレー 8.8 IPX (AF_IPX) 8.9 NetRom (AF_NETROM) 8.10 Rose プロトコル (AF_ROSE) 8.11 SAMBA - `NetBEUI', `NetBios', `CIFS' のサポート 8.12 STRIP (Starmode Radio IP) 機能 8.13 トークンリング 8.14 X.25 8.15 WaveLan カード 9. ケーブルと接続方法 9.1 シリアル用クロスケーブル 9.2 パラレルポート用ケーブル(PLIP ケーブル) 9.3 10base2 (細い同軸の)イーサネットケーブル 9.4 ツイストペア(Twisted Pair)イーサネットケーブル 10. この文書で使われている用語の解説 11. ISP 用の Linux? 12. 謝辞 13. 著作権 14. 日本語版について ______________________________________________________________________ 1. はじめに この文書は、LinuxPorts がこの文書の著者となってから最初のリリースで す。最初に一言、我々は、この先数ヶ月程度は読者の皆さんがこの文書を役に 立つと考えてくださるように、また本文書が Linux のネットワーク関連のこ とがらについて、正確でタイムリーな情報を提供できているように望んでいま す。 この文書は我々が管理している他の HOWTO と同様に、全く別物になるでしょ う。この文書はまもなく単なる Net-3(4) HOWTO ではなく、Networking-HOWTO となるでしょう。PPP, VPN 等といった内容も押さえるつもりです。 2. 文書の履歴 元々の NET-FAQ は Matt Welsh と Terry Dawson が著者であり、 Linux Documentation Project が正式に立ち上がる前に Linux のネットワークに関 する FAQ (よく聞かれる質問)に答えるために書かれました。この FAQ は Linux カーネルのネットワーク機能のごく初期の開発バージョンを扱っていま した。NET-2-HOWTO は、オリジナルの LDP HOWTO 文書の一つとなり、NET-FAQ の後を受けて Linux カーネルのネットワークコードのバージョン 2、そして その後のバージョン 3 を扱っていました。この文書はさらにその後を受 け、Linux のネットワークコードのバージョン 4 だけに関連する話題や、カ ーネルのリリース 2.x と 2.2.x に特化した話題を扱っています。 話題をあれこれと取りこみすぎたため、この文書の以前のバージョン (NET-2/3-HOWTO)はかなり肥大化していました。そのため、ネットワーク機能 のうち、特定の分野だけを扱う HOWTO がいくつも書かれてきました。この文 書では、そのような HOWTO で書かれている話題については、その HOWTO への ポインタを示し、主に他の文書が扱っていない分野の話題を扱うことにしま す。 2.1. フィードバック 我々 LinuxPorts はフィードバックをお待ちしています。 poet@linuxports.com まで連絡してくださ い。 繰り返しますが、誤っている点や追加してほしい項目が何かあれば、我々に連 絡してください。 3. この HOWTO の読み方 この文書はトップダウン式の構成にしています。最初の章にはお知らせ的なこ とが書いてあるので、興味がなければ飛ばしても構いません。その後にはネッ トワークに関する一般的な知識が書いてあるので、より専門的な部分に進む前 に必ず理解しておいてください。残りの部分は「技術に特化した」情報であ り、3 つの主な部分からできています: つまりイーサネットと IP に関する情 報、広く使われている PC ハードウェアの関連技術に関する情報、まれに使わ れている技術に関する情報、です。 したがって、この文書のお勧めの読み方は以下のようになります: 一般的なことに関する章を読む。 これらの章に書いてあることの全てあるいはほとんど全ては、その後で 説明する技術に適用されます。したがって、これを理解しておくことは 重要です。その一方で、読者の多くは既にこういったことに詳しいもの と筆者は考えています。 自分のところのネットワークについて考える。 自分のところのネットワークがどうなっているか、あるいはこれからど うするのかを知っておき、どんなハードウェアや技術を使うのかを正確 に知っておくべきです。 直接 LAN やインターネットに接続しているならば「イーサネットと IP」の章を読む。" この章ではイーサネットの基本的な設定と Linux が IP ネットワーク用に用意している各種機能(ファイアウォールや高 度な経路設定など)について説明しています。 安価な LAN やダイアルアップ接続に興味があるなら次の章を読む。 この章では PLIP, PPP, SLIP, ISDN といった個人所有のワークステー ションで広く使われる技術について説明します。 必要に応じて専門技術の章を読む。 IP 以外のプロトコルや一般的でないハードウェアが必要ならば、最後 の章を見ましょう。 IP 以外のプロトコルと特殊な通信ハードウェアの 詳しい説明があります。 設定作業を行う。 実際にネットワークの設定をやってみて、そこで起きた問題を注意深く 記録しておくべきです。 必要ならば、さらに説明を探す。 この文書では解決の役に立たない問題に出会ったら、助けを求めるため の場所やバグを報告する先に関する章を読んでください。 楽しむ! ネットワークは面白いものです。楽しんでください。 3.1. この文書内での約束事 特別な約束事はありませんが、コマンドの表記方法には注意してください。古 典的な Unix の文書に従って、シェルに入力するコマンドの前にはプロンプト を書いてあります。この HOWTO では、スーパーユーザの権限が必要ないコマ ンドのプロンプトとしては "user%" を使い、root で実行する必要があるコマ ンドのプロンプトとしては "root#" を使います。ただの "#" でなく "root#" を使っているのは、シェルスクリプトからの抜粋部分との混同を避けるためで す。シェルスクリプトでは "#" 記号はコメント行を定義するために使いま す。 「カーネルのコンパイルオプション」が示された時は、これは menuconfig で 使われる書式で表現されます。 menuconfig を使っていなくてもわかるはずで す(筆者も使っていません)。オプションの入れ子がわからなくて も、menuconfig を一度実行すればわかると思います。 この文書の HTML 版については、ローカルに置いている LDP 文書を読みやす くするために他の HOWTO へのリンクをローカル参照にしています。LDP 文書 の全てを持っていなければ、各 HOWTO 文書は metalab の /pub/Linux/HOWTO ディレクトリ や metalab の無 数にあるミラーサイトから入手できます。 4. Linux のネットワーク機能に関する一般的な情報 4.1. Linux カーネルのネットワーク機能の開発小史 カーネルに新規に TCP/IP プロトコルスタックを組み込み、既存のものと同等 の性能を出すのは簡単なことではありません。U.S.L(Unix Software Laboratory)が Unix に関する訴訟を起こして、既存のコードが著作権によっ て使えなくなるかもしれない恐れが生じたことが主な理由となって、Linux の 開発者たちは、既存のネットワークコードを移植するのではなく、ゼロから新 しいコードを書こうと決意しました。同時に、既存の実装とは全く異なったや り方で、よりよいものを作り直してみようという熱意も、大きな原動力になり ました。 カーネルに組み込まれたネットワークコードの開発を最初にリードしたボラン ティアは Ross Biro でした。彼は、単純で機能的には 不十分ながら、まずまず使いものになるネットワークコードと WD-8003 ネッ トワークカード用のドライバを作成しました。このコードを使って多くの人々 がソフトウェアのテストや実験をし、実際にインターネットに接続した人たち もいました。しかし、Linux コミュニティの中でネットワーク機能の開発に対 する要望が高まるにつれ、Ross にのしかかる責任が増えてしまい、彼はネッ トワーク機能の開発のリーダーを降りました。しかし、Ross がこのプロジェ クトを開始したことと、様々な論争がなされている中で、ある程度実用になる コードを責任を持って実際に開発したことのおかげで、その後の作業が容易に なりました。したがって、彼のした仕事は現在のコードがうまくできているこ との重要な要素です。 Orest Zborowski が Linux カーネルに独自の BSD のソケッ トプログラムインターフェイスを組み込みました。これは極めて重要な前進で した。というのも、これを使うことにより既存のネットワークアプリケーショ ンの多くが大きな変更なしに移植できるようになったからです。 同じ頃、Laurence Culhane が SLIP プロトコルを サポートする最初のドライバを開発しました。これにより、イーサネットを持 たない多くの人々もネットワーク用のソフトウェアのテストができるようにな りました。こちらの場合でもまた、何人かの人々がこのドライバに携わり、こ れを実際に使ってインターネットに接続しはじめました。このドライバの成功 により、Linux に充分なネットワーク機能が組み込まれれば、より多くのユー ザが積極的に既存のネットワークソフトウェアを利用・実験するようになるだ ろうと感じる人がますます多くなりました。 もう一人、熱心にネットワーク機能を開発したのが Fred van Kempen です。Ross がリーダーを降りてからの不安定 な時期に Fred は彼の時間と努力を捧げて開発をリードしました。Fred は Linux のネットワークソフトウェアを独特の方向に発展させようと考え、その 方向に開発をすすめました。Fred は `NET-2' と呼ばれるネットワークコード を開発し(Ross のコードは `NET' コードと呼ばれています)、このコードは多 くの人々にとって十分実用的なものでした。Fred は開発計画として、動的な デバイスインターフェイスやアマチュア無線用の AX.25 プロトコル、よりモ ジュール化されたネットワーク機能など、さまざまな革新的な機能をスケジュ ールに挙げていました。Fred の NET-2 コードは実に多くの熱心な開発者に用 いられ、「実際に動く」という評判が広まりました。このころのネットワーク コードはまだカーネル本体には組み込まれておらず、多数のパッチとして公開 されていました。当時書かれた NET-FAQ と NET-2-HOWTO はこのパッチを組み こむずいぶん複雑な手順について説明していました。Fred は既存のネットワ ーク系の実装に革新をもたらそうとしていましたが、それには時間がかかりま した。一方、Linux コミュニティでは、安定して動き、80% のユーザを満足さ せる機能を持ったネットワーク機能をもとめる声が強まり、Ross 同様、開発 のリーダーとして Fred にかかるプレッシャーが強まってきました。 Alan Coxがこの状況を解決する方法を提案しまし た。彼は Fred の NET-2 コードを引きとり、デバッグして、信頼性と安定性 を高めてせっかちなユーザに提供しました。そうやって Fred の負担を減ら し、彼が本来の仕事を続けられるようにしました。Alan はこれをうまくや り、彼の作ったネットワークコードは `Net-2D(ebugged)' と呼ばれました。 このコードはほとんどの設定で安定して動作し、多くのユーザはこのコードに 満足しました。Alan にはネットワーク機能を開発していく計画に貢献するだ けの独自のアイデアと技術力があり、彼を中心に NET-2 コードの開発方針に ついて多くの議論がなされました。その結果、Linux のネットワーク界に 2 つの流れが生まれることになりました。一つは「まず動くものを作って、その 後改善していこう」と考える人たち、もう一つは「最初から良いものを作ろ う」と考える人たちでした。最終的には Linus が判断をして、Alan の開発し たコードを標準のカーネルに組み込みました。その結果、Fred の立場は難し くなりました。彼が開発した新機能をテストしてくれるユーザの絶対数は少な くなり、開発のテンポも遅れ、しだいに開発そのものが難しくなっていきまし た。Fred はその後もしばらくは開発を続けていましたが次第に開発から手を 引き、Alan が Linux のネットワーク機能の開発者の新しいリーダーになりま した。 そのころ、Donald Beckerがハードウェアレベ ルのドライバの開発者としての頭角を現わし、多数のイーサネット用ドライバ を開発しました。現在のカーネルに組み込まれているネットワークカード用ド ライバのほとんどは彼が開発したものです。もちろん彼以外にも重要な貢献を した人はいますが、Donald の素晴しい仕事は特に言及に値するものでしょ う。 Alan はその後も NET-2-Debugged コードの改善を進めるとともに、`TODO' リ ストに載ったまま残されていたさまざまな仕事にも取り組みました。Linux 1.3.* のカーネルが公開され始めたころ、カーネルのネットワークコードは現 在のバージョンである NET-3 へと移行しました。Alan は、 Linux のネット ワークコミュニティにいる多数の才能ある人々の助けを借りながら、多くの機 能を開発していきました。彼は動的なネットワークデバイスや AX.25 の最初 のスタンダード、IPX 機能などを開発しました。彼はその後もネットワークコ ードを修正し続け、ゆっくりと再構築と機能強化につとめて現在の状況に達し ました。 PPP の機能は Michael Callahanと Al Longyearが組み込みました。この機能も、多数の人々 が Linux をネットワーク接続に使う際に重要な役割を果しました。 Jonathon Naylor は Alan の AX.25 コードを引き継い でさまざまな機能を強化し、NetRom プロトコルと Rose プロトコルもサポー トしました。この AX.25/NetRom/Rose のサポートはとても重要です。なぜな ら、これらのプロトコルを標準的にサポートしていると胸を張れる OS は Linux 以外に存在しないからです。 もちろん、ここで紹介した人以外にも何百人もの人々が Linux のネットワー クソフトウェアを開発する中で重要な役割を果してきました。彼らの何人かは 後述のそれぞれの技術の詳細に関する節で紹介することになるでしょう。その 他、モジュール化や各種のドライバの開発、バグの修正、新しい機能の提案、 テストレポート、精神的な支援をしてきた多数の人々がいます。その全ての人 が、「自分は自分の役割を果し、自分に可能なことをしてきただけ」、と言う ことでしょう。Linux カーネルのネットワークコードは Linux 風のアナーキ ーな開発がどのような結果をもたらすかの優れた実例です。今までの話に驚か なかった人でも、これからの発展にはきっと驚くはずです。開発は現在も続い ているのですから。 4.2. Linux のネットワーク機能についての情報源 Linux のネットワーク機能についての情報はさまざまなところから入手できま す。 コンサルタント業者がたくさんあります。そのリストは LinuxPorts Consultants Database から入手できます。 現在の Linux カーネルのネットワークコードのメンテナンスをしている Alan Cox はネットワーク機能の現状と今後について紹介したページを公開していま す: www.uk.linux.org もう一つお勧めの情報源は Olaf Kirch が書いた Network Administrators Guide です。この文書は Linux Documentation Project の成果の一つで、 Network Administrators Guide HTML version を使 えばインタラクティブに読むことができます。その他、さまざまな形式に変換 したバージョンを metalab.unc.edu LDP ftp archive から入手でき ます。 Olaf の著書はわかりやすく書かれており、Linux におけるネットワー ク関係の設定を、十分高いレベルで概説しています。 Linux のネットワーク機能について論じるニュースグループもあります。 comp.os.linux.networking です。 [訳注: 日本語のニュースグループとして は fj.os.linux.networking があります] Linux のネットワーク機能について質問できるメーリングリストもあります。 このメーリングリストに参加するには、以下のようなメールを送ってくださ い。 To: majordomo@vger.rutgers.edu Subject: anything at all Message: subscribe linux-net IRC にもさまざまなチャンネルがありますが、#linux チャンネルには Linux のネットワークに関する質問に答えてくれる人が多数います。 何か問題を報告する際には、関係する情報を可能な限り付属させることをお忘 れなく。使っているソフトウェアのバージョン、特にカーネルのバージョンや pppd や dip のバージョンは必須です。加えて、問題の本質をきちんと報告し てください。そのためには、出力されたエラーメッセージを正確に記録し、ど のようなコマンドを実行したかを詳しく記録しておきましょう。 4.3. Linux 限定でないネットワークに関する情報源 TCP/IP ネットワークについての全般的な知識を得たいならば、以下の文書を 読んでみることをお勧めします: TCP/IP 入門(tcp/ip introduction) この文書はテキスト版 あるいは Postscript 版 を入手可能です。 TCP/IP の管理(tcp/ip administration) この文書もテキスト版 と Postscript 版 があります。 TCP/IP ネットワークについて、より詳細な情報を知りたい場合は、次の書籍 が非常にお勧めです。 Internetworking with TCP/IP, Volume 1: principles, protocols and architecture, by Douglas E. Comer, ISBN 0-13-227836-7, Prentice Hall publications, Third Edition, 1995 Unix 互換の環境でネットワーク機能を使ったアプリケーションを書くために は以下の書籍が参考になるでしょう。 Unix Network Programming, by W. Richard Stevens, ISBN 0-13-949876-1, Prentice Hall publications, 1990 この本の第2版ももうすぐ出版されます。新しい版は 3 分冊になります。詳し くは Prenice-Hall のウェブサイト で調べてくだ さい。 comp.protocols.tcp-ip も見るとよいでしょう。 インターネットと TCP/IP プロトコル群に関する特定の技術的な情報について は RFC が重要です。RFC とは `Request For Comment' の略で、インターネッ トで標準的に使われているプロトコルについて定義したものになっています。 RFC は多くの ftp サイトに保存されており、何らかのサーチエンジンを使っ てキーワードから RFC のデータベースを検索できるような WWW のページもあ ります。 RFC に関するページとしては、 Nexor RFC database を紹介しておきま す。 5. ネットワークの設定に関する一般的な情報 以下の節では実際にネットワークを設定する前に知っておいた方がよいことに ついてまとめておきます。これらは最も基本となる原理で、あなたが実際に張 ろうとしているネットワークの実際の種類によらず、全てのネットワークに適 用されます。 5.1. 何から始めるか? ネットワークを構築したり設定したりする前に用意しておくべきものがいくつ かあります。まず最も重要なものから。 5.1.1. 最新のカーネルソース(なくてもかまいません) 以下の点に注意してください: 最近のディストリビューションのほとんどにはネットワーク機能を有効にした カーネルが付属しているので、カーネルを再コンパイルする必要はないと思い ます。よく知られているハードウェアを使っていればうまく動作するはずで す。例えば 3COM の NIC や NE2000 の NIC, Intel の NIC などです。しか し、カーネルを更新する必要がある状況になった場合には、以下の手順をご覧 ください。 現在お使いのカーネルには、おそらく使いたいネットワークに機能のサポート や使いたいネットワークカード用のドライバが組み込まれていないのでしょ う。カーネルのソースを入手して、適切なオプションを指定し、カーネルを再 構築する必要があるでしょう。 ただし、これは RedHat, Caldera, Debian, SuSE といったメジャーなディス トリビューションを使っている場合にはもはや当てはまりません。一般的なハ ードウェアを使っている限りは、ごく特殊な機能を使わなければカーネルを再 コンパイルする必要はないはずです。 最新のカーネルは常に ftp.cdrom.com か ら入手できます。これは公式サイトではありませんが、大きい帯域幅を持ち、 たくさんのユーザを受け入れることができます。公式サイトは kernel.org で すが、できるだけ ftp.cdrom.com を使ってください。 ftp.kernel.org は非 常に負荷が高い状態です。ミラーサイトを使ってください。 [訳注: 日本では ftp.jp.kernel.org を利用す るとよいでしょう] 通常カーネルのソースは /usr/src/linux ディレクトリに展開します。パッチ の当て方やカーネルの構築方法については Kernel-HOWTO を読んでください。カーネルモジュールの設定方法については ``Modules mini-HOWTO'' をご覧ください。また、カーネルソースと Documentation ディレクトリに入っている README ファイルは、気合いの入っ た読者には非常に有益な情報が書かれています。 特別に言及しない限り、安定版のカーネルを使うことをお勧めします (バー ジョン番号の 2 つめの数字が偶数のバージョンです)。開発版のカーネル (2 つめの数字が奇数のバージョン)は内部構造が大きく変わっていたり、その他 さまざまな変更が行なわれているため、今まで動いていたソフトウェアがうま く動かないかもしれません。自分でそれらの問題を解決したり、それらのソフ トウェアに潜む問題を解決できないのであれば、開発版のカーネルは使わない ほうがいいでしょう。 その一方、この文書で説明する機能の一部はバージョン 2.1 のカーネルの開 発段階で導入されたものです。そこで選ばなければなりません: 2.2 カーネル と全てのツールが更新されたディストリビューションを待って 2.0 に留まる か、2.1 を入手し、その新機能を利用するのに必要な各種補助プログラムを探 し回るかです。この節を書いている 1998 年 8 月の時点では、2.1.115 が最 新バージョンで、じきに 2.2 が出るものと考えられています。 5.1.2. 最新のネットワークツール ネットワークツールとは、Linux のネットワークデバイスを設定するためのプ ログラムです。これらのプログラムを用いてネットワークデバイスにアドレス を割り当てたり、経路情報を設定したりします。 最近の Linux ディストリビューションには、大抵ネットワークツールも含ま れています。ですから、システムはディストリビューションからインストール していて、ネットワークツールはまだインストールしていないようなら、イン ストールしてください。 ディストリビューションを使わずにシステムを構築した場合には、ネットワー クツールはソースコードを入手してコンパイルする必要があります。しかし、 これはそんなに難しい作業ではありません。 ネットワークツールは Bernd Eckenfels がメンテナンスしており、 ftp.inka.de か ら入手可能です。ここは ftp.uk.linux.org にミラーされていま す。 また、RedHat の最新パッケージを net-tools-1.51-3.i386.rpm から入手 できます。 お使いのカーネルのバージョンにあったバージョンを入手して、インストール の際は付属の文書の指示に従ってください。 この文書を執筆している時点での最新版のネットワークツールをコンパイルし てインストールするには以下のようにします: user% tar xvfz net-tools-1.33.tar.gz user% cd net-tools-1.33 user% make config user% make root# make install RedHat のパッケージを使う場合には以下のようにします: root# rpm -U net-tools-1.51-3.i386.rpm さらに、ファイアウォールを設定したり、IP マスカレード機能を使いたい場 合は、 ipfwadm コマンドも必要です。ipfwadm の最新版は ftp.xos.nl から入手できます。このコマンドに もいくつかのバージョンがあるので、カーネルのバージョンに合ったものを入 手してください。Linux のファイアウォール機能は 2.1 の開発中に変更さ れ、カーネル 2.2 では ipchains に置き換えられたので注意してください。 ipfwadm はカーネル 2.0 でしか使えません。以下のディストリビューション には 2.0 以前のカーネルが付属していることがわかっています。 Redhat 5.2 以前 Caldera 2.2 より前のバージョン Slackware 4.x より前のバージョン Debian 2.x より前のバージョン この文書の執筆時点での最新版をインストールするには、 The Linux Documentation Project にある IPChains HOWTO を読んでください。 バージョン 2.2(または 2.1 後期)のカーネルを使っている場合は、 ipfwadm はファイアウォールの設定を行うための正しいプログラムではありません。こ のバージョンの NET-3-HOWTO では今のところファイアウォールの新しい設定 方法は扱いません。ipchains に関する詳しい情報が必要ならば、先に紹介し た HOWTO を見てください。 5.1.3. 各種ネットワーク用アプリケーションプログラム ネットワークアプリケーションプログラムとは、telnet や ftp などと、それ らのサーバプログラムのことです。これらの大部分は、以前は David Holland がメンテナンスしていましたが、現在は netbug@ftp.uk.linux.org がメンテ ナンスしています。配布物は ftp.uk.linux.org から入手可能です。 5.1.4. IP アドレスの説明 インターネットプロトコル用のアドレスは 4 バイトから構成されています。 アドレスは「ドット区切りの 10 進表記」で表示するのが普通です。この書き 方では、それぞれのバイトを 10 進数(0-255)に変換し、頭の 0 は省略し、各 バイトを `.' で区切って示します。通常、ホストやルータの持つネットワー クインターフェイスそれぞれに 1 つの IP アドレスを割り当てます。目的に よっては、一台のマシンの複数のポートに同じ IP アドレスを付けることも可 能ですが、複数のインターフェイスには、それぞれ独自の IP アドレスを付け るのが普通です。 インターネットプロトコルで構成されたネットワークは、一連の IP アドレス が集まって構成されています。1つのネットワークの IP アドレスには共通部 分が必要です。1つのネットワーク全体に共通なアドレスの部分をアドレスの 「ネットワーク部」と呼びます。残りの部分を「ホスト部」と呼びます。1つ のネットワークの中で共通しているネットワークアドレス分のビット数をネッ トマスクと呼び、アドレスのうちどこまでがネットワーク部で、どこからがホ スト部かを定義しています。例えば、以下のような場合を考えてください。 ----------------- --------------- ホストアドレス 192.168.110.23 ネットワークマスク 255.255.255.0 ネットワーク部 192.168.110. ホスト部 .23 ----------------- --------------- ネットワークアドレス 192.168.110.0 ブロードキャストアドレス 192.168.110.255 ----------------- --------------- ホストに付けられたアドレスのうち、ネットマスクとビットごとに論理 積(AND)を取ったものがネットワークアドレスになります。すなわち、ネット ワークアドレスは、それぞれのネットワークに割り当てられたアドレスの最小 のものになります。つまり、ネットワークアドレスはアドレスのホスト部を全 て 0 にしたものです。 ネットワークに接続されているホストは自分自身のアドレスに送られたパケッ トを受けとりますが、それ以外にも「ブロードキャストアドレス」という特別 に設定されたアドレスに送られたパケットも受けとります。ブロードキャスト アドレスは、ネットワーク上にいる全てのホストにパケットを送りたい場合に 利用する特別のアドレスです。経路情報や各種の警告メッセージなどはブロー ドキャストアドレスへ送出され、ネットワーク上にいる全てのホストが同時に 受けとることができます。ブロードキャストアドレスはそのネットワークで利 用可能な最大の IP アドレスにすることが慣例になっています。例えば、上記 の例ではブロードキャストアドレスは 192.168.110.255 になっています。何 らかの理由からネットワークアドレスとブロードキャストアドレスを同じにし ているサイトがあるかもしれません。実用上はどちらにしておいても大差はあ りませんが、ネットワーク上の全てのホストは同じブロードキャストアドレス を使わなければなりません。 IP プロトコルの開発の早期の段階で、管理上の理由から、いくつかの IP 番 号のグループがネットワークを構成するようになり、またこれらのネットワー クがグループ分けされて、いわゆる「クラス」へと発展しました。 IP アドレ スにおけるクラスはそのネットワークで使用できるホストの数を決定します。 ネットワークのクラスは以下のように分けられています。 --------------------------------------------------------------- |ネットワーク | ネットマスク | ネットワークアドレス | | のクラス | | | --------------------------------------------------------------- | A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 | | B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 | | C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 | |マルチキャスト| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 | --------------------------------------------------------------- どのような IP アドレスを使うかは何をしたいかに依存します。以下に示すよ うな作業を組みあわせて、必要なアドレスを決めてください。 既存のIPネットワークにLinuxマシンをインストールする場合 既存のIPネットワークにLinuxマシンを接続したい場合、ネットワーク の管理者に相談して以下の情報を教えてもらってください: o ホストの IP アドレス o ネットワークアドレス o ブロードキャストアドレス o ネットマスク o ルータのアドレス o ドメインネームサーバのアドレス これらの情報を使ってあなたのLinuxマシンのネットワークデバイスを 設定します。正しい設定をしない限りネットワークは使えません。 インターネットへ接続しないネットワークを新しく構築する場合 インターネットへ接続する予定の無いプライベートなネットワークを構 築する場合、どのような IP アドレスを使っても構いません。しかしな がら、このようなネットワークに使うべき IP アドレスは予め決められ ています。以下に示すアドレスを使えば、インターネットとはパケット をやりとりできないため、誤ってインターネットに接続してしまっても 安全です。RFC1597では以下のアドレスがプライベートネットワーク用 に割り当てられています。 -------------------------------------------------------------- | プライベートネットワーク用に予約されたアドレス | -------------------------------------------------------------- |ネットワーク| ネットマスク | ネットワークアドレス | | のクラス | | | -------------------------------------------------------------- | A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 | | B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 | | C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 | -------------------------------------------------------------- プライベートネットワーク用のアドレスもクラスごとに用意されているの で、まず構築したいネットワークの規模を考えて、それにふさわしい規模 のクラスの IP アドレスを使ってください。 5.2. 設定コマンドの置き場所は? Linux の起動方法にはいくつかの流儀があります。カーネルが起動したとき、 まず実行されるのが init と呼ばれるプログラムです。 init は起動されると 設定ファイルである /etc/inittab を読みこみ、システムの起動作業を実行し ます。init にはいくつかの種類がありますが、全体としては Miguel van Smoorenburg が開発した System V 系のものに収束しました。 init プログラム自体は同じですが、システムの起動の仕方の設定はディスト リビューションごとに異なります。 /etc/inittab ファイルには、普通は以下のような行があります。 si::sysinit:/etc/init.d/boot この行は実際の起動方法を管理するシェルスクリプトを指定しています。この ファイルは MS-DOS の AUTOEXEC.BAT と同等の機能を果します。 通常、他のいくつものスクリプトが boot スクリプトから呼び出されます。 ネットワークの設定も、このようなスクリプトのどれかで行われます。 以下の表にシステムごとの違いをまとめました。 --------------------------------------------------------------------------- ディストリ | インタフェースの設定/経路設定 | サーバの初期化 ビューション| | --------------------------------------------------------------------------- Debian | /etc/init.d/network | /etc/rc2.d/* --------------------------------------------------------------------------- Slackware | /etc/rc.d/rc.inet1 | /etc/rc.d/rc.inet2 --------------------------------------------------------------------------- RedHat | /etc/rc.d/init.d/network | /etc/rc.d/rc3.d/* --------------------------------------------------------------------------- Debian と RedHat はシステムのサービスを起動するスクリプトをディレクト リ全体を使って管理しています(設定情報は普通、これらのファイルの中には ありません。例えば RedHat は全てのシステム情報を /etc/sysconfig ディレ クトリの下に置いており、起動スクリプトはここから情報を取得します)。起 動プロセスを把握したければ、筆者のお勧めは /etc/inittab と init に付属 の文書を調べることです。 Linux Journal にもシステムの初期化に関する記 事が載る予定です。この記事が WWW で公開され次第、この文書からもリンク を張ります。 最近のディストリビューションには、一般的なネットワークインターフェイス を設定するためのプログラムは予め含まれています。次に示すような設定用の プログラムがある場合、手動で設定する前に、これらを使って必要な設定が可 能かチェックしてみてください。 ----------------------------------------- ディストリ | ネットワーク設定プログラム ビューション| ----------------------------------------- RedHat | /usr/bin/netcfg Slackware | /sbin/netconfig ----------------------------------------- 5.3. ネットワークインターフェイスの作成 多くの Unix では /dev ディレクトリにネットワークデバイス用のスペシャル ファイルがありますが、Linux の場合は違います。Linux ではネットワークデ バイスはソフトウェアによって動的に作成されるので、デバイスファイルは不 要です。 ほとんどの場合、ネットワークデバイスは、デバイスドライバがハードウェア を検出して初期化する際に自動的に作成されます。例えばイーサネットデバイ スドライバは、 eth[0..n] というインターフェイスをイーサネットハード ウェアに順に割り当てていきます。最初に検出されたイーサネッカードが eth0、次が eth1 のようになります。 例外もいくつかあり (注目すべきは slip と ppp)、これが使うネットワーク デバイスはデバイスドライバではなくユーザプログラムが作成します。それぞ れのデバイスに付けられる番号は、デバイスドライバが割り当てるのと同様に 順に振られていきますが、起動時にデバイスが自動的に作成されるということ はありません。なぜこのようになっているのかと言うと、イーサネットデバイ スとは異なり、slip や ppp デバイスは、マシンの稼働中に必要な数が変化す るからです。詳細については後述します。 5.4. ネットワークインターフェイスの設定 ネットワークの設定に必要なプログラムと情報が揃ったら、ネットワークイン ターフェイスの設定を始めましょう。ネットワークインターフェイスの設定と は、ネットワークデバイスに適切なアドレスを割り当てたり、その他ネットワ ークデバイスを設定するための適切な値を指定することです。このためのプロ グラムがifconfig(interface configure)コマンドです。 ifconfig は、通常以下のような書式で使います: root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up この例では、``eth0''イーサネットインターフェイスに `192.168.0.1' とい う IP アドレスと `255.255.255.0' というネットマスクを設定しています。 コマンドの後ろにある `up' はインターフェイスをアクティブにする指定です が、これはデフォルトの動作なので、普通は省略できます。インターフェイス を停止させるには、単に ``ifconfig eth0 down'' を実行してください。 カーネルはインターフェイスを設定する際、あるデフォルト値を想定します。 例えば、あるインターフェイスに対してネットワークアドレスとブロードキャ ストアドレスを設定できますが、上記の例のようにこれを設定しなかった場合 には、カーネルは指定したネットマスクに基づいて、適切な値を推測します。 ネットマスクを与えなかった場合には、IP アドレスが属するネットワークク ラスに基づいて設定が行われます。上記の例では、このインターフェイスにク ラス C のネットワークアドレスが割り当てられたことをカーネルが認識し、 ネットワークアドレスとして `192.168.0.0' を、ブロードキャストアドレス として `192.168.0.255 を自動的に割り当てます。 ifconfigコマンドで指定できるオプションはいろいろあります。もっとも重要 なものを列挙すると、 up このオプションはインターフェイスを利用可能(アクティブ)にします。 down このオプションはインターフェイスを停止させます。 [-]arp このオプションは、このインターフェイスで ARP(Address ResolutionProtocol) を使うかどうかを指定します。 [-]allmulti このオプションは、全てのハードウェアマルチキャストパケットの受信 を有効にするか無効にするかを指定します。ハードウェアマルチキャス トを使うと、特殊な終点アドレスに向けられたパケットを複数のホスト で受け取ることができます。デスクトップ用のビデオ会議アプリケー ションを使っている場合にはこのオプションは重要ですが、普通は使わ れません。 mtu N このパラメータはデバイスの MTU(Maximum Transfer Unit)を設定しま す。 netmask <アドレス> このパラメータはデバイスが接続しているネットワークのネットワーク マスクを設定します。 irq このパラメータは特定の種類のハードウェアにしか使えませんが、デバ イスのハードウェアの IRQ を設定します。 [-]broadcast [アドレス] このパラメータで、指定したブロードキャストアドレス宛のデータグラ ムを受け取るかどうかを設定できます。 [-]pointopoint [アドレス] このパラメータは、slip や ppp などの一対一接続の場合の接続先アド レスを指定します。 hw <アドレス> このパラメータは特定の種類のネットワークデバイスのハードウェアア ドレスを設定します。イーサネットの場合はそれほど役に立ちません が、AX.25 のようなネットワークの場合には便利です。 ifconfig コマンドはあらゆるネットワークインターフェイスに使用可能で す。pppdや dip といったユーザレベルのプログラムには、必要なデバイスを 作成すると自動的にそれらを設定するものがあります。この場合 ifconfig を 手動で使う必要はありません。 5.5. リゾルバの設定 リゾルバ(Name Resolver) は Linux の標準ライブラリの一部です。リゾルバ の主な機能は、人間にとって分かりやすい ftp.funet.fi のようなホスト名を 128.214.248.6 のような IP アドレスに変換することです。 5.5.1. 名前に含まれるものは? すでにインターネットのホスト名については御存知だと思いますが、それらが どういう意味で、どのように構成されているかについては御存知ないかもしれ ません。インターネットのドメイン名は階層構造、すなわち木のような構造に なっています。ドメイン とは、一つのまとまり、すなわち複数のホスト名を 一つのグループにまとめたものです。ドメイン はサブドメイン に分割されて いるかもしれません。トップレベルドメイン とはサブドメインではないドメ インです。トップレベルドメインについては RFC-920 で規定されています。 非常に有名なトップレベルドメインを以下に示します: COM 営利組織 EDU 教育機関 GOV 政府機関 MIL 軍事機関 ORG その他の組織 NET インターネット関連の組織 Country Designator 特定の国を示す 2 文字のコード 歴史的経緯から、国を表さないトップレベルドメインに属するほとんどのドメ インはアメリカ合衆国にある組織が使っています。ただし、アメリカ合衆国も 独自の国コードである `.us' を持っています。現在では、この話は .com や .org には当てはまりません。アメリカ国外の会社もこれらのドメインを使っ ています。 これらのトップレベルドメインそれぞれにはサブドメインがあります。国を示 す 2 文字のコードがトップレベルドメインになっている場合、サブドメイン としてcom や edu, gov, mil, org といった組織の種別を示すドメインが来ま す。例えば com.au と gov.au はオーストラリアの営利組織と政府機関です。 これは一般的な決まりではない点に注意してください。というのも、実際の方 針はそれぞれのドメインのドメイン名管理機関によって異なるからです。 次のレベルはたいていその組織や団体の名称になります。それより細かいレベ ルのドメインはそれぞれの組織によって異なりますが、よくあるのは部門別に サブドメインを設定する方法です。しかし、このレベル以下はどのようなサブ ドメインを作ることも可能なので、それぞれの組織ごとに、ネットワークの管 理者がふさわしい分け方を設定しています。 もっとも左に位置する名前が、たいていの場合、そのマシンに付けられた独自 の名前で、ホスト名と呼ばれます。ホスト名よりも右側の部分をドメイン名と 呼び、両者を合せた完全な名前を「完全に記述された名前(Fully Qualified Domain Name(FQDN))」と呼びます。 Terry のホストを例にしましょう。完全に記述された名前は `perf.no.itg.telstra.com.au' です。この場合、ホスト名は `perf' でドメ イン名は no.itg.telstra.com.au です。ドメイン名のうち、トップドメイン 名は彼の国であるオーストラリアを示し、彼のメールアドレスは営利組織なの で次のレベルのドメインは .com です。会社の名前は `telestra' で、それ以 下のサブドメイン名の構造は組織の構造を反映したものになっています。ここ に示した例では、彼のマシンはネットワーク管理部門(no, Network Operations)の情報技術グループ(itg, Information Technology Group)に属し ています。 普通、名前はずっと短くなっています。例えば、筆者の ISP は ``systemy.it'' ですし、筆者が所属する非営利の組織は ``linux.it'' で す。どちらにも com や org といったサブドメインはないので、筆者のホスト は単に ``morgana.systemy.it'' であり、 rubini@linux.it が有効なメール アドレスです。ドメインの所有者にはホスト名やサブドメインを登録する権利 がある点に注意してください。例えば、筆者が属する LUG は pluto.linux.it というドメインを使っています。なぜなら、linux.it の所有者が LUG のため にサブドメインを開放してくれたからです。 5.5.2. 必要な情報 まず、あなたのホストがどういうドメインに属しているかを知る必要がありま す。リゾルバは名前の変換サービスを `ドメインネームサーバ(DNS)' に問い 合わせるので、利用可能なネームサーバの IP アドレスも知っておく必要があ ります。 関連するファイルは 3 つあり、それらを順に見ていくことにします。 5.5.3. /etc/resolv.conf /etc/resolv.conf はリゾルバの使う一番重要な設定ファイルです。このファ イルの書式はごく簡単で、各行に 1 つのキーワードを配したテキストファイ ルになっています。よく使われるキーワードは以下の 3 種です: domain このキーワードはローカルのドメイン名を設定します。 search このキーワードはホスト名を検索する際に用いるドメイン名のリストを 指定します。 nameserver このキーワードは、名前を解決する際に使うドメインネームサーバの IP アドレスを指定します。複数のサーバを指定できます。 例として、以下の /etc/resolv.conf を見てみましょう: domain maths.wu.edu.au search maths.wu.edu.au wu.edu.au nameserver 192.168.10.1 nameserver 192.168.12.1 この例ではドメイン名を付けずにホスト名のみ指定した場合に、デフォルトで 追加するドメイン名として maths.wu.edu.au を指定しています。ホスト名に maths.wu.edu.au を付けた FQDN が見つからなかった場合、ドメイン名を wu.edu.au にして再度調べます。ネームサーバのエントリは 2 つ設定してあ り、リゾルバは 2 つのネームサーバに問い合わせます。 5.5.4. /etc/host.conf /etc/host.conf ファイルはリゾルバの動作方法を設定するファイルです。こ のファイルのフォーマットの詳細は `resolv+' の man ページにあります。ほ とんど全ての環境では、以下の設定のままでいいでしょう: order hosts,bind multi on この設定の場合、リゾルバはネームサーバに問い合わせる前に、まず自分自身 の持つ /etc/hosts ファイルをチェックします(order hosts,bind)。そし て、/etc/hosts ファイルに複数の IP アドレスが登録されていた場合、最初 のアドレスだけでなく、全てのアドレスを報告します(multi on)。 5.5.5. /etc/hosts /etc/hosts ファイルは、ローカルのホストの IP アドレスを登録しておく表 です。この表に登録されているホストの IP アドレスについては DNS を引く 必要がありません。/etc/hosts の欠点は、登録しているホストの IP アドレ スが変わった場合、手動でこのファイルを更新しなければならないことです。 きちんと管理されたシステムでは、このファイルに登録されるホスト名は loopback インターフェイスを示すアドレスとローカルのホストのアドレスの みです。 # /etc/hosts 127.0.0.1 localhost loopback 192.168.0.1 this.host.name 一行目が示すように、一つの行に複数のホスト名を登録できます。この例では 127.0.0.1 はループバックインターフェイスの IP アドレスです。 5.5.6. ネームサーバの実行 ローカルでネームサーバを実行したければ、これを行うのは簡単です。 DNS- HOWTO と、お使いのバージョンの BIND (Berkeley Internet Name Domain)に含まれている文書を読んでください。 [訳注: DNS-HOWTO の日本語訳は DNS-HOWTO にあります] 5.6. ループバックインターフェイスの設定 ループバックインターフェイスとは、自分自身に接続するために用意された特 別な種類のインターフェイスです。このようなインターフェイスを用意してい るのにはいくつかの理由があります。例えば、実際のネットワークに接続せず にネットワーク用のソフトウェアをテストするなどの目的に使えます。慣例と して、ループバックインターフェイスには `127.0.0.1' というアドレスが使 われます。ですから、どんなマシンを使っていようとも telnet で 127.0.0.1 に接続すれば、自分自身に接続することになります。 ループバックインターフェイスの設定は簡単で、次のようにするだけです(た だし、普通はこの作業は標準の初期化スクリプトが実行することに注意してく ださい)。 root# ifconfig lo 127.0.0.1 root# route add -host 127.0.0.1 lo route コマンドについては次節で説明します。 5.7. 経路制御(ルーティング) 経路制御は大きな話題であり、それだけで分厚い本を書くことができます。一 部の人を別にすれば、ほとんどの人はごく単純な経路制御しか必要ないと思い ますので、以下ではごく基本的な話題についてのみ扱うことにします。より詳 細な情報が必要ならば、この文書の最初に示した各種の文献に当たってくださ い。 まず定義から始めましょう。IP 経路制御とは何でしょう? 私が使っている定 義を以下に示します: IP 経路制御とは、複数のネットワークに接続しているホストが受 けとった IP データグラムをどのネットワークに送るかを決めるこ とです。 例を使って示した方がいいでしょう。よくあるオフィス用のルータを想像して ください。このルータはインターネットへの PPP 接続や、ワークステーショ ンの繋がっている多数のイーサネットセグメントや、別のオフィスへの PPP 接続などを備えていることでしょう。このルータがデータグラムを受けとった 際、そのデータグラムを次にどのポートへ送り出すかを決めるのが IP 経路制 御です。ルータではない普通のホストにも経路制御が必要です。なぜなら、 ネットワークに接続している全てのホストは上述した自分自身を指すループ バックインターフェイスとネットワーク上にある他のマシンと接続するための インターフェイス(それはイーサネットだったり、シリアルポートを使った PPP や SLIP だったりします)の 2 つのインターフェイスを持っているため、 どちらのインターフェイスにパケットを送り出すか決める必要があるからで す。 さて、実際の経路制御はどのように行なわれるのでしょう? それぞれのホスト は経路情報を登録した経路表(ルーティングテーブル)と呼ばれるリストを持っ ています。この表の各行には通常 3 つの欄があります。最初の欄は目的地と なるアドレス、2 つめはデータグラムが送られるべきインターフェイス名、3 つめは必須ではありませんが、お隣のネットワークへデータグラムを転送する ホストの IP アドレスです。最後の欄はゲートウェイフィールドと言いま す。Linux では /proc/net/route に経路表が登録されているため、以下のコ マンドで経路表を見ることができます: user% cat /proc/net/route あるいは以下のコマンドも使えます: user% /sbin/route -n user% netstat -r 経路制御の方法自体はごく簡単です。データグラムを受けとれば、その目的地 アドレス(誰宛に送られたのか)をチェックして、経路表の各行と比較します。 そのアドレスにもっともよく一致する行が選択され、データグラムはその行が 指定するインターフェイスへ送られます。その行にゲートウェイフィールドが 登録されていれば、データグラムは指定されたインターフェイスを経由してそ のホストに送られます。ゲートウェイフィールドが無い場合、目的地アドレス はその行が指定したインターフェイスが接続しているネットワーク上にあるも のとみなされます。 この経路表を操作するには `route' という専用のコマンドを使います。この コマンドは引数をカーネルのシステムコールに変換して、カーネルの経路表に 追加したり、削除したり、変更したりします。 簡単な例を示します。イーサネットのネットワークを使っていると想像してく ださい。ネットワークはクラス C で、ネットワークアドレスは 192.168.1.0 です。あなたのマシンの IP アドレスは 192.168.1.10 、インターネットに接 続しているルータのアドレスは 192.168.1.1 になっています。 インターフェイスを設定するための最初のステップは、上述した通り `ifconfig' です。 root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up 次に、経路表にエントリを登録して、「目的地アドレスとして 192.168.1.* に一致するデータグラムが届いたら、イーサネットデバイスに送る」というこ とをカーネルに教える必要があります。そのためには以下のコマンドを使いま す。 root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 `-net' という引数に注意してください。この指定で route プログラムはこの アドレスがネットワークであると認識します。ここで -host を指定すると、 一つの IP アドレスのみを指定した経路になります。 この経路を登録することで、あなたのいるイーサネットセグメント上にいる全 てのホストと IP 接続できます。しかし、同じセグメント上にいないホストの 場合はどうするのでしょう? 起りうる全てのネットワークへの経路を登録することは不可能ですので、特別 の仕組みが用意されています。この仕組みを「既定の経路(デフォルトルー ト)」と呼びます。「既定の経路」は全ての目的地アドレスにマッチします が、優先順位が低く、他にマッチする行があった場合、そちらの方が優先され ることになります。「既定の経路」の考え方は単純で、「その他全てをここに 送る」ということです。今考えているネットワークでは以下のように「既定の 経路」を設定します: root# route add default gw 192.168.1.1 eth0 `gw' の指定により、 route コマンドはその次の引数がゲートウェイまたはル ータの IP アドレスまたはホスト名であると認識します。このエントリに一致 する全てのデータグラムはこのアドレスに送られ、以降の経路制御はこのゲー トウェイかルータが考えることになります。 以上をまとめると次のようになります: root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# route add default gw 192.168.1.1 eth0 ネットワークを設定している `rc' ファイルを詳細に調べると少なくともその 一つにこれとよく似た設定が見つかるはずです。これはごく一般的な設定で す。 次に多少複雑な経路の設定を見てみましょう。先に考えたルータを設定してい ると想像してください。このルータは PPP でインターネットに接続し、複数 の LAN セグメントが接続されています。具体的には 3 つのイーサネットセグ メントと 1 つの PPP 接続があると考えましょう。その場合、経路設定は以下 のようになるでしょう。 root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1 root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2 root# route add default ppp0 このルータのつながったネットワークを使っているそれぞれのワークステー ションは、先に述べた、より簡単な形式の設定になり、ルータのみがネットワ ークへの経路を別々に登録することになります。それぞれのワークステーショ ンの場合、「既定の経路」を使ってルータにデータグラムを送りますが、ルー タの場合はそれらを適切な経路に送り出す必要があります。上記のルータの設 定でデフォルトの経路の設定に`gw' が無いのを不思議に思うかもしれません が、その理由は簡単で、PPP や SLIP といったシリアル経由の接続は一対一の 接続になっているからです。接続先が一台のマシンになっているため、他に選 択の余地が無く、そのマシンをゲートウェイとして設定する意味は無いわけで す。イーサネットや arcnet、トークンリングといった種類のネットワークの 場合、それらのネットワーク上には多数のホストがあるので gw オプションを 指定する必要があります。 5.7.1. さて、routed プログラムは何をしているのでしょう? 上述した経路設定は単純なネットワーク構成に適しており、取り得る経路は一 つしかありませんでした。もっと複雑なネットワーク構成になれば設定はもう 少し複雑になります。幸いなことに、大部分の人はそのような設定を使う必要 はありません。 上述してきた「手動経路設定」すなわち「静的経路設定」の大きな問題点は、 ネットワークの中のマシンやどこかの接続がダウンした場合、データグラムを 別の経路へ送るようにするには、(別の経路がある場合だけですが)設定を変更 するために必要なコマンドを手動で実行しなければならないことです。通常、 この作業は面倒で、手間がかかり、非実用的で、トラブルの原因になりがちで す。そのため、ネットワークにトラブルが生じた場合、別の経路を探して自動 的に経路表を変更するための様々な技術が開発されてきました。これらはまと めて「動的経路制御プロトコル」と呼ばれています。 一般的な動的経路制御プロトコルのいくつかについては御存知かもしれませ ん。多分、これらのプロトコルの中で最も有名なものは RIP(Routing Information Protocol) と OSPF(Open Shortest Path First Protocol)でしょ う。RIP は小〜中規模な組織や、一つのビルの中といった小規模なネットワー クで最も広く使われているプロトコルです。OSPF は新しく開発されたプロト コルで、大規模なネットワークの設定やネットワークの中に多数の経路があり うる場合により適しています。これらのプロトコルを実装したプログラムとし て、`routed' - RIP のみ、と `gated' - RIP と OSPF、その他に対応、があ ります。 `routed' プログラムはたいていの Linux の配布パッケージに含ま れており、上述した `NetKit' パッケージにも入っています。 具体的な例を使って動的経路制御プロトコルがどのように働くのか見てみま しょう。以下のようなネットワークを考えます。 192.168.1.0 / 192.168.2.0 / 255.255.255.0 255.255.255.0 - - | | | /-----\ /-----\ | | | |ppp0 // ppp0| | | eth0 |---| A |------//---------| B |---| eth0 | | | // | | | | \-----/ \-----/ | | \ ppp1 ppp1 / | - \ / - \ / \ / \ / \ / \ / \ / \ / \ / ppp0\ /ppp1 /-----\ | | | C | | | \-----/ |eth0 | |---------| 192.168.3.0 / 255.255.255.0 図のように、A、B、C の 3 つのルータがあります。それぞれのルータにはク ラス C の IP ネットワーク(ネットマスク 255.255.255.0)が設定された一つ のイーサネットのセグメントが接続されています。また、PPP を使って他のル ータに接続され、ネットワークは三角形になっています。 ルータ A の経路表が以下のようになるのは明らかなはずです: root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0 root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1 この設定はルータ A と B の間の接続が切れない限り正しく動きます。A と B の間の接続が切れると、A に接続されたイーサネット上のホストから B に接 続されたイーサネット上のホストへは接続できなくなります。なぜなら、ルー タ A から B への経路は A の ppp0 を使うことになっており、この接続が切 れているためです。一方、A と C の間の接続は生きているので、A のイーサ ネット上のホストから C のイーサネット上のホストへは通信できます。一 方、B と C の間の接続は生きているので C のイーサネット上のホストから B のイーサネット上のホストへも通信できます。 さて、ここで A は C と通信でき、C は B に通信できるとしたら、A から B へのデータグラムは C を経由して B に送ることが可能なはずです。このよう な問題を解決するために RIP のような動的経路制御プロトコルが開発されま した。A、B、C それぞれのルータで経路制御デーモンが動いていれば、どれか 一つの接続が切れても、そのネットワークの状態を反映するように自動的に経 路表が調整されます。経路制御デーモンの設定は簡単で、それぞれのルータで 2 つのことをするだけです。ルータ A の場合、 root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# /usr/sbin/routed 経路制御デーモン routed は起動時に使用可能なネットワークポート全てを自 動的に探して、そのホストの経路表を更新できるようにそれぞれのネットワー クデバイスへメッセージを送ると同時に、他のホストから送られてくるメッセ ージを受けとります。 以上はごく簡単な動的経路制御の説明ですが、充分使えるはずです。より詳細 な説明が必要ならばこの文書の最初に挙げた参考文献を参照してください。 動的経路制御についての重要なポイントは以下の通りです: 1. 目的地まで複数の経路があり、その中から一つの経路を選ばなければなら ない状況にないかぎり、あなたの Linux マシンで動的経路制御デーモンを 動かす必要はありません。これは例えば、IP マスカレードを使おうとして いる場合などです。 2. 動的経路制御デーモンは、ネットワークの状態の変化に応じて自動的に経 路表を変更します。 3. RIP は小〜中規模のネットワークに適しています。 5.8. ネットワーク経由の各種サービスとサーバの設定 ネットワーク経由の各種サービスとそのためのサーバを起動すれば、遠隔地に いるユーザが、ネットワーク経由であなたの Linux マシンを使うことができ ます。サーバプログラムはネットワークポートを監視します。ネットワークポ ートは特定のホストの特定のサービスを示す手段であり、telnet によるアク セスと ftp によるアクセスをサーバが区別する方法です。遠隔地のユーザが サーバマシンとの接続を確立すると、そのポートを監視しているサーバプログ ラム (ネットワークデーモンプログラム)は接続を受け付けて動作します。 ネットワークデーモンの動作方法には 2 つの種類があり、どちらの方法も実 際に用いられています。これらを以下に示します: スタンドアローン型 ネットワークサービス用のプログラムは予め起動されて受け持ちのポー トを監視しており、接続があれば自分で必要なサービスを提供します。 inetd 経由で起動するタイプ ined サーバはネットワーク接続を受けつけるための特別のデーモンプ ログラムです。このプログラムは接続を受け付けたとき、必要とされる プログラムを設定ファイルに従って起動します。どのサービスポートも tcp プロトコルと udp プロトコルのどちらを使うようにも設定できま す。ポートは別のファイルに記述されますが、これについては後述しま す。 設定すべき重要なファイルは 2 つあります。ポート番号をサービス名に対応 づける /etc/services と、inetd デーモンの設定ファイルである /etc/inetd.conf ファイルです。 5.8.1. /etc/services /etc/services ファイルは、人間にとって分かりやすいサービス名と計算機が 扱いやすいポート番号を対応させる単純なデータベースです。このファイルの 書式はごく単純で、普通のテキストファイルの各行にデータベースのエントリ が記述されています。それぞれのエントリは任意の数の空白文字(タブかスペ ース)で分離された 3 つのフィールドから構成されます。また、#から後はコ メントとして無視されます。フィールドの構成は以下のようになっています: name port/protocol aliases # comment name は一語で書かれ、記述するサービスを示します。 port/protocol このフィールドはさらに 2 つの部分に分かれます。 port この行が示すサービスを提供するためのポート番号です。よく使われる サービスには予めポート番号が割り当てられています。詳しくは RFC-1340 をご覧ください。 protocol このフィールドには tcp または udp を指定します。 注意しておかなければならないことは、18/tcp と 18/udp は全く異な る意味を持つということです。1つのサービスが同じポートの tcp と udp を使わなければならない技術的な理由はありません。普通はこの常 識通りに指定が行われ、/etc/services に両方のエントリが現れるのは 特定のサービスが tcp でも udp でも使える場合だけです。 aliases はこのサービスの参照に使える別名を設定します。 ある行の `# 以降に書かれた部分はコメントとして無視されます。 5.8.1.1. /etc/services ファイルの実例 最近の Linux の各種ディストリビューションでは /etc/services ファイルが 予め用意されています。もし 0 からシステムを組みあげなければならない場 合のために、古い Debian ディストリビューショ ンからコピーした /etc/services の例を以下に紹介します: # /etc/services: # $Id: NET3-4-HOWTO.sgml,v 1.14 2000/12/18 02:12:43 morimoto Exp $ # # Network services, Internet style # # Note that it is presently the policy of IANA to assign a single well-known # port number for both TCP and UDP; hence, most entries here have two entries # even if the protocol doesn't support UDP operations. # Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports # are included, only the more common ones. tcpmux 1/tcp # TCP port service multiplexer 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 qotd 17/tcp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp # 24 - private smtp 25/tcp mail # 26 - unassigned time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location nameserver 42/tcp name # IEN 116 whois 43/tcp nicname re-mail-ck 50/tcp # Remote Mail Checking Protocol re-mail-ck 50/udp # Remote Mail Checking Protocol domain 53/tcp nameserver # name-domain server domain 53/udp nameserver mtp 57/tcp # deprecated bootps 67/tcp # BOOTP server bootps 67/udp bootpc 68/tcp # BOOTP client bootpc 68/udp tftp 69/udp gopher 70/tcp # Internet Gopher gopher 70/udp rje 77/tcp netrjs finger 79/tcp www 80/tcp http # WorldWideWeb HTTP www 80/udp # HyperText Transfer Protocol link 87/tcp ttylink kerberos 88/tcp kerberos5 krb5 # Kerberos v5 kerberos 88/udp kerberos5 krb5 # Kerberos v5 supdup 95/tcp # 100 - reserved hostnames 101/tcp hostname # usually from sri-nic iso-tsap 102/tcp tsap # part of ISODE. csnet-ns 105/tcp cso-ns # also used by CSO name server csnet-ns 105/udp cso-ns rtelnet 107/tcp # Remote Telnet rtelnet 107/udp pop-2 109/tcp postoffice # POP version 2 pop-2 109/udp pop-3 110/tcp # POP version 3 pop-3 110/udp sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP auth 113/tcp authentication tap ident sftp 115/tcp uucp-path 117/tcp nntp 119/tcp readnews untp # USENET News Transfer Protocol ntp 123/tcp ntp 123/udp # Network Time Protocol netbios-ns 137/tcp # NETBIOS Name Service netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS Datagram Service netbios-dgm 138/udp netbios-ssn 139/tcp # NETBIOS session service netbios-ssn 139/udp imap2 143/tcp # Interim Mail Access Proto v2 imap2 143/udp snmp 161/udp # Simple Net Mgmt Proto snmp-trap 162/udp snmptrap # Traps for SNMP cmip-man 163/tcp # ISO mgmt over IP (CMOT) cmip-man 163/udp cmip-agent 164/tcp cmip-agent 164/udp xdmcp 177/tcp # X Display Mgr. Control Proto xdmcp 177/udp nextstep 178/tcp NeXTStep NextStep # NeXTStep window nextstep 178/udp NeXTStep NextStep # server bgp 179/tcp # Border Gateway Proto. bgp 179/udp prospero 191/tcp # Cliff Neuman's Prospero prospero 191/udp irc 194/tcp # Internet Relay Chat irc 194/udp smux 199/tcp # SNMP Unix Multiplexer smux 199/udp at-rtmp 201/tcp # AppleTalk routing at-rtmp 201/udp at-nbp 202/tcp # AppleTalk name binding at-nbp 202/udp at-echo 204/tcp # AppleTalk echo at-echo 204/udp at-zis 206/tcp # AppleTalk zone information at-zis 206/udp z3950 210/tcp wais # NISO Z39.50 database z3950 210/udp wais ipx 213/tcp # IPX ipx 213/udp imap3 220/tcp # Interactive Mail Access imap3 220/udp # Protocol v3 ulistserv 372/tcp # UNIX Listserv ulistserv 372/udp # # UNIX specific services # exec 512/tcp biff 512/udp comsat login 513/tcp who 513/udp whod shell 514/tcp cmd # no passwords used syslog 514/udp printer 515/tcp spooler # line printer spooler talk 517/udp ntalk 518/udp route 520/udp router routed # RIP timed 525/udp timeserver tempo 526/tcp newdate courier 530/tcp rpc conference 531/tcp chat netnews 532/tcp readnews netwall 533/udp # -for emergency broadcasts uucp 540/tcp uucpd # uucp daemon remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem klogin 543/tcp # Kerberized `rlogin' (v5) kshell 544/tcp krcmd # Kerberized `rsh' (v5) kerberos-adm 749/tcp # Kerberos `kadmin' (v5) # webster 765/tcp # Network dictionary webster 765/udp # # From ``Assigned Numbers'': # #> The Registered Ports are not controlled by the IANA and on most systems #> can be used by ordinary user processes or programs executed by ordinary #> users. # #> Ports are used in the TCP [45,106] to name the ends of logical #> connections which carry long term conversations. For the purpose of #> providing services to unknown callers, a service contact port is #> defined. This list specifies the port used by the server process as its #> contact port. While the IANA can not control uses of these ports it #> does register or list uses of these ports as a convenience to the #> community. # ingreslock 1524/tcp ingreslock 1524/udp prospero-np 1525/tcp # Prospero non-privileged prospero-np 1525/udp rfe 5002/tcp # Radio Free Ethernet rfe 5002/udp # Actually uses UDP only bbs 7000/tcp # BBS service # # # Kerberos (Project Athena/MIT) services # Note that these are for Kerberos v4 and are unofficial. Sites running # v4 should uncomment these and comment out the v5 entries above. # kerberos4 750/udp kdc # Kerberos (server) udp kerberos4 750/tcp kdc # Kerberos (server) tcp kerberos_master 751/udp # Kerberos authentication kerberos_master 751/tcp # Kerberos authentication passwd_server 752/udp # Kerberos passwd server krb_prop 754/tcp # Kerberos slave propagation krbupdate 760/tcp kreg # Kerberos registration kpasswd 761/tcp kpwd # Kerberos "passwd" kpop 1109/tcp # Pop with Kerberos knetd 2053/tcp # Kerberos de-multiplexor zephyr-srv 2102/udp # Zephyr server zephyr-clt 2103/udp # Zephyr serv-hm connection zephyr-hm 2104/udp # Zephyr hostmanager eklogin 2105/tcp # Kerberos encrypted rlogin # # Unofficial but necessary (for NetBSD) services # supfilesrv 871/tcp # SUP server supfiledbg 1127/tcp # SUP debugging # # Datagram Delivery Protocol services # rtmp 1/ddp # Routing Table Maintenance Protocol nbp 2/ddp # Name Binding Protocol echo 4/ddp # AppleTalk Echo Protocol zip 6/ddp # Zone Information Protocol # # Debian GNU/Linux services rmtcfg 1236/tcp # Gracilis Packeten remote config server xtel 1313/tcp # french minitel cfinger 2003/tcp # GNU Finger postgres 4321/tcp # POSTGRES mandelspawn 9359/udp mandelbrot # network mandelbrot # Local services 実際には、新しいサービスが作られるたびに /etc/services ファイルは大き くなっていきます。自分が使っている /etc/services が不完全かもしれない と不安であれば、新しいディストリビューションから /etc/services をコピ ーしてくるとよいでしょう。 5.8.2. /etc/inetd.conf /etc/inetd.conf ファイルは inetd サーバデーモンの設定ファイルです。こ のファイルはあるサービスへの要求が来たとき、 inetd がどのように処理す るかを指定します。受けつけるサービスそれぞれについて、どのネットワーク デーモンをどのように起動するかについて inetd に指定してやらねばなりま せん。 このファイルも書式はごく単純です。普通のテキストファイルで各行に提供す べきサービスが記述してあります。# 以降の部分はコメントとして無視されま す。各行には任意の数の空白文字(タブかスペース)で区切られた 7 つの欄が あります。一般的な書式は以下の通りです: service socket_type proto flags user server_path server_args service /etc/services ファイルに指定したそれぞれのサービス名です。 socket_type この欄はこのエントリが使用するソケットの種類です。使えるのは stream, dgram, raw, rdm, seqpacket です。詳細は技術的な話になる ので省略しますが、経験則で言うと、tcp を使ったほぼ全てのサービス は stream を使い、udp を使ったほぼ全てのサービスは dgram を使い ます。これ以外のソケットを使うのはごく限られた特殊なサーバだけで す。 proto このエントリが使うプロトコルを示します。ここでの指定は /etc/services の対応するエントリと一致しておらねばならず、たいて いは tcp か udp のどちらかです。Sun の RPC(Remoto Procedure Call)を使ったサービスでは rpc/tcp か rpc/udp を使うことがありま す。 flags このフィールドには 2 種類しか設定がありません。 wait か nowait かのどちらかです。この欄は、inetd が起動したネットワークサービス 用デーモンが起動後すぐにソケットを解放して、即座に次の接続リクエ ストが受付け可能となるのか、ネットワークサービス用デーモンが動い ている間は新しい接続を受けつけずに待つのか、を指定します。この項 目の指定方法を説明するのもちょっと難しいのですが、経験則で言うと tcp を使ったサーバでは nowait に、udp を使ったサーバでは wait に なっているはずです。いくつか例外もありますので、不確実な場合は例 を見てください。 user このフィールドには、指定したネットワークサービスを起動するユーザ 名を指定します。このユーザ名は /etc/passwd に登録されていなけれ ばなりません。ユーザを指定しておくのはセキュリティ上も役立ちま す。起動するユーザを nobody にしておけば、ネットワークサーバのセ キュリティが破られても被害を最小限に留めることが可能です。もっと も、この欄はたいていの場合 root になっています。なぜならば、ほと んどのサービスでは正しく機能するためにルート権限が必要だからで す。 server_path この欄は実際に実行するサーバプログラムを絶対パスで指定します。 server_args この欄は行の残りの部分全てからなり、なくても構いません。この欄は サーバデーモンプログラムを起動する際に渡すコマンドライン引数を指 定するために使います。 5.8.2.1. /etc/inetd.conf の例 /etc/services ファイルと同じく、最近の Linux ディストリビューションに は充分な /etc/inetd.conf ファイルが付属しています。ここでも Debian ディストリビューションからコピーしてきた /etc/inetd.conf の例を示すことにしましょう。 # /etc/inetd.conf: see inetd(8) for further informations. # # Internet server configuration database # # # Modified for Debian by Peter Tobias # # # # Internal services # #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 time stream tcp nowait root internal time dgram udp wait root internal # # These are standard services. # telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd #fsp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.fspd # # Shell, login, exec and talk are BSD protocols. # shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd talk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.talkd ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd # # Mail, news and uucp services. # smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd #nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/in.nntpd #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico #comsat dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.comsat # # Pop et al # #pop-2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d # # `cfinger' is for the GNU finger server available for Debian. (NOTE: The # current implementation of the `finger' daemon allows it to be run as `root'.) # #cfinger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.cfingerd #finger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fingerd #netstat stream tcp nowait nobody /usr/sbin/tcpd /bin/netstat #systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." # #tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd #tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot #bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120 # # Kerberos authenticated services (these probably need to be corrected) # #klogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k #eklogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k -x #kshell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd -k # # Services run ONLY on the Kerberos server (these probably need to be corrected) # #krbupdate stream tcp nowait root /usr/sbin/tcpd /usr/sbin/registerd #kpasswd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kpasswdd # # RPC based services # #mountd/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.mountd #rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rstatd #rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rusersd #walld/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rwalld # # End of inetd.conf. ident stream tcp nowait nobody /usr/sbin/identd identd -i 5.9. その他のネットワークに関連した設定ファイル 他にもさまざまなネットワークに関する設定ファイルがあります。通常これら を修正する必要はありませんが、どのようなファイルが存在し、それらは何を 設定しているかを知っておいても損は無いでしょう。 5.9.1. /etc/protocols /etc/protocols ファイルは、 TCP/IP パケットに埋めこまれている各種プロ トコルの識別番号とプロトコルを結びつけるデータベースです。このファイル を使えば、プログラムから特定のプロトコルを識別番号ではなく名前で参照で きるようになり、tcpdump のようなプログラムも、番号ではなくプロトコル名 で出力するようになります。このファイルの一般的な書式は以下の通りです: protocolname number aliases Debian ディストリビューションに付属の /etc/protocols ファイルは以下の通りです: # /etc/protocols: # $Id: NET3-4-HOWTO.sgml,v 1.14 2000/12/18 02:12:43 morimoto Exp $ # # Internet (IP) protocols # # from: @(#)protocols 5.1 (Berkeley) 4/17/89 # # Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992). ip 0 IP # internet protocol, pseudo protocol number icmp 1 ICMP # internet control message protocol igmp 2 IGMP # Internet Group Management ggp 3 GGP # gateway-gateway protocol ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'') st 5 ST # ST datagram mode tcp 6 TCP # transmission control protocol egp 8 EGP # exterior gateway protocol pup 12 PUP # PARC universal packet protocol udp 17 UDP # user datagram protocol hmp 20 HMP # host monitoring protocol xns-idp 22 XNS-IDP # Xerox NS IDP rdp 27 RDP # "reliable datagram" protocol iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4 xtp 36 XTP # Xpress Tranfer Protocol ddp 37 DDP # Datagram Delivery Protocol idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport rspf 73 RSPF # Radio Shortest Path First. vmtp 81 VMTP # Versatile Message Transport ospf 89 OSPFIGP # Open Shortest Path First IGP ipip 94 IPIP # Yet Another IP encapsulation encap 98 ENCAP # Yet Another IP encapsulation 5.9.2. /etc/networks /etc/networks ファイルは /etc/hosts ファイルとよく似た機能を持ってお り、ネットワークアドレスとネットワーク名の対応表になっていま す。/etc/hosts ファイルとの違いは各行に 2 つの欄しか無いことで、各行は 以下のように構成されます: networkname networkaddress 例えばこのようになります: loopnet 127.0.0.0 localnet 192.168.0.0 amprnet 44.0.0.0 route コマンドを使う際、目的地がネットワークで、そのネットワークアドレ スが /etc/networks に登録されていれば、route コマンドの出力はアドレス ではなく名前になります。 5.10. ネットワークのセキュリティとアクセス制御 まず最初に注意しておきますが、悪意を持った攻撃からマシンとネットワーク のセキュリティを守るのは複雑な技術が必要になります。私自身この分野につ いてはとてもエキスパートとは言えません。そのため、以下に有益であろう手 段を紹介しますが、もしセキュリティについて真剣に考えるならば自分自身で 調べてみることをお勧めします。 Security-HOWTO を 含めて、インターネット上にはこの問題についての情報が豊富にあります。 重要な経験則は「使うつもりのないサーバは起動しない」ことです。Linux の 各種ディストリビューションでは予め全てのサービスが設定され、それらが自 動的に起動するようになっています。最低限の安全を確保するために、まず /etc/inted.conf に目を通して、使うつもりのないサービスをコメントアウ ト(行頭に # を付ける)しておきましょう。コメントアウトしておいた方がい いサービスは shell、login、 exec、uucp、ftp といったサービスと、 finger, netstat, systat といった情報提供用サービスです。 セキュリティとアクセス制御のメカニズムにはさまざまな種類がありますの で、以下ではごく基本的なものだけを説明します。 5.10.1. /etc/ftpusers /etc/ftpusers ファイルは、特定のユーザを ftp 経由でログインさせないた めの簡単な仕組みです。/etc/ftpusers は ftp 接続があった際に ftp デーモ ンプログラム ftpd が読みこみます。このファイルは単に ftp を許可しない ユーザを列挙しただけのものです。このファイルは以下のような内容です: # /etc/ftpusers - users not allowed to login via ftp root uucp bin mail 5.10.2. /etc/securetty /etc/securetty ファイルを使うと、どの tty デバイスから root がログオン できるかを指定できます。 /etc/securetty ファイルは login プログラム(通 常は /bin/login)が読みます。このファイルにはルートのアクセスを許可する tty を列挙します。その他の tty からはルートでアクセスできません。 # /etc/securetty - tty's on which root is allowed to login tty1 tty2 tty3 tty4 5.10.3. tcpd を使ったホスト別アクセス制御機構 tcpd プログラムは /etc/inetd.conf で見たように、指定されたサービスをよ り安全に実行するために、ログインとアクセス制御の機能を提供します。 inetd から起動されると、tcpd は指定したサービスへのアクセスを許可する か拒否するかを記述した 2 つのファイルを読み込みます。 tcpd は /etc/hosts.allow と /etc/hosts.deny の 2 つのファイルをこの順 に調べ、一致する記述があるかどうかをチェックします。一致する記述がなけ ればそのサービスは全ての人に許可しているものとみなします。以下では、こ れらのファイルについて順に説明していきます。詳しくはそれぞれの man ペ ージを読んでください(まず hosts_access(5) から始めるのがよいでしょ う)。 5.10.3.1. /etc/hosts.allow /etc/hosts.allow ファイルは /usr/sbin/tcpd 用の設定ファイルで す。hosts.allow ファイルにはどのマシンからの接続を許可するかの設定を記 述します。 このファイルの書式はごく単純です。 # /etc/hosts.allow # # : [: command] service list は、このルールを適用するサーバプログラムをコンマで区切って記述し ます。サーバプログラムには ftpd telnetd fingerd などがあります。 host list ホスト名をコンマで区切って記述します。ホスト名の代わりに IP アド レスを使うことも可能です。ワイルドカードキャラクタを使って複数の ホストや IP アドレスを指定可能です。例えば、gw.vk2ktj.ampr.org と書くと 1 つのホストを指定したことになりますが、.uts.edu.au と するとこの文字列で終るホスト(このドメインに属するホスト)全てを指 定したことになります。44. とすると、この IP アドレスで始まるホス ト全てに一致します。設定を簡単にするためにいくつか特別のキーワー ドが用意してあります。例えば ALL は全てのホスト名にマッチし、 LOCAL は . を含まないホスト名、すなわちそのマシンと同じドメイン にあるマシンにマッチし、PARANOID は登録されているホスト名と IP アドレスがマッチしない全てのマシン(名前を詐称しているマシン)に一 致します。もう一つ、役に立つキーワードに EXCEPT があります。これ は例外リストになります。例については後述します。 command 省略してもよいパラメータで、この行の規則が適用された際に実行され るコマンドへのフルパスを指定します。この機能を使えば、接続してき たホストに誰がログインしているかを調べたり、誰かが接続しようとし たときにメールなどの手段を用いて管理者に報せることが可能です。こ こには様々な変数が用意されており、たとえば %h は接続してきたホス ト名(ホスト名が分らない場合には IP アドレス)に変換され、%d は呼 び出されたデーモン名に変換されます。 例を示します: # /etc/hosts.allow # # Allow mail to anyone in.smtpd: ALL # All telnet and ftp to only hosts within my domain and my host at home. telnetd, ftpd: LOCAL, myhost.athome.org.au # Allow finger to anyone but keep a record of who they are. fingerd: ALL: (finger @%h | mail -s "finger from %h" root) 5.10.3.2. /etc/hosts.deny /etc/hosts.deny も /usr/sbin/tcpd プログラムの設定ファイルであり、どの ホストからの接続を拒否するかを設定します。 以下に簡単な例を示します: # /etc/hosts.deny # # Disallow all hosts with suspect hostnames ALL: PARANOID # # Disallow all hosts. ALL: ALL PARANOID の指定は実際のところ不要です。なぜならば、その次のエントリで 全ての接続を拒否しているからです。必要に応じてこれらのエントリのどちら かをデフォルトにするのもいいでしょう。 /etc/hosts.deny で ALL:ALL を設定しておき、有効にしたいサービスとホス トだけを /etc/hosts.allow で許可するのが最も安全な設定でしょう。 5.10.4. /etc/hosts.equiv hosts.equiv ファイルは、パスワード無しにあなたのマシンにアクセスできる ホストとユーザを指定します。この機能は全てのマシンがあなたの管轄下にあ る安全な環境では便利ですが、それ以外の状況ではセキュリティ的には危険で す。あなたのマシンのセキュリティは、このファイルに登録したホストの中の セキュリティが最も弱いマシンと同じレベルになってしまいます。セキュリ ティを高めるためにはこの機能は使わないようにして、各ユーザにも .rhosts ファイルを使わないようにさせましょう。 5.10.5. ftp デーモンの適切な設定 多くのサイトで、匿名(anonymous) ftp サーバを動かして、特定のユーザ ID が無い人々にもファイルのダウンロードやアップロードを許可しています。こ の機能を使う場合は ftp デーモンが匿名アクセスを正しく処理できるように 設定されているかを確認してください。 ftpd(8) の man ページは、この設定 のためにかなりの紙幅を費やしているので、それらの指示に従って設定してい るか、常に注意してください。重要なポイントは /etc/passwd ファイルのコ ピーを匿名 ftp 用の /etc/ ディレクトリで使わないことです。絶対に必要な アカウント以外は passwd ファイルから削除しておきましょう。そうしないと 総当たり式の攻撃でパスワードを解読されてしまう危険性があります。 5.10.6. ファイアウォール あなたのマシンやサーバにまでデータグラムが届きさえしないようにすること はセキュリティ的に優れた方法です。この方法については Firewall-HOWTO で詳しく説明されています。(それよりずっと簡単で すが)本文書でも後述します。 5.10.7. その他のお勧め 宗教的なところもありますが、その他の注意しておくべきポイントを述べてお きます。 sendmail デーモン これは有名なプログラムですが、しばしばセキュリティ的な問題につい ても報告されます。どうするかはおまかせしますが、私は sendmail は 動かさないことにしました。 NFS とその他 Sun の RPC を使うサービス これについても慎重になるべきです。これらのサービスはさまざまな方 法で悪用可能です。NFS のようなサービスの代わりを見つけるのは困難 ですが、これらを設定する際には誰にマウント許可を与えるかに充分注 意する必要があります。 6. IP 関係、イーサネット関係の情報 この章では、イーサネットと IP に固有の情報を説明します。この章に含まれ る内容は、以前の版で「それぞれのネットワーク技術についての情報」という 章に含まれていた内容から、筆者が特に面白いと思ったものをピックアップし て別個にまとめたものです。 LAN を引いている人なら誰でも、この章の内容 は役に立つはずです。 6.1. イーサネット イーサネットのデバイス名は `eth0', `eth1', `eth2'のようになります。カ ーネルが検出した最初のカードが `eth0'で、以下カードが検出する順に番号 が振られていきます。 デフォルトでは Linux カーネルはイーサネットデバイスを一つしか検出しな いので、それ以上のボードをカーネルに検出させるためには、コマンドライン 引数で指定する必要があります。 Linux でイーサネットカードを使う方法の詳細については Ethernet-HOWTO を参照してください。 お使いのイーサネットカードをサポートするようにカーネルをきちんと再構築 してしまえば設定そのものは簡単です。 設定は通常、以下のようになります(ほとんどのディストリビューションは、 イーサネットをサポートするように設定すれば自動的にこの設定も行うはずで す): root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up root# route add -net 192.168.0.0 netmask 255.255.255.0 eth0 ほとんどのイーサネットデバイスは Donald Becker becker@CESDIS.gsfc.nasa.gov が開発しました。 6.2. EQL - 複数回線のトラフィックイコライザ EQL のデバイス名は `eql' です。標準のカーネルソースでは一台のマシンで 一つの EQL デバイスしか使えないかもしれません。EQL を使えば、 PPP や slip、plip といった二点間接続を複数用意して、それらを一つの論理的な接 続のように利用できます。たいていの場合、高速の専用線よりも低速回線を複 数まとめた方が安価に回線速度を稼げます。 カーネルのコンパイルオプション: Network device support ---> [*] Network device support <*> EQL (serial line load balancing) support この機能を使うためには、接続先のマシンも EQL 機能を持っていなければい けません。Linux、 Livingstone Portmaster シリーズ以降のダイアルインサ ーバなどがこの機能をサポートしています。 EQL を設定するには、 metalab.unc.edu から入 手できる EQL 用ツールが必要になります。 EQL の設定はごく簡単です。まず最初に eql インターフェイスを設定しま す。 eql インターフェースは他のネットワークデバイスとほとんど同じで す。 IP アドレスや mtu は ifconfig を用いて下記のように設定します。 root# ifconfig eql 192.168.10.1 mtu 1006 次に、使おうとしている回線それぞれを手動で起動します。二点間接続を複数 用意することになるでしょう。どのように起動するかは使う接続の種類に依存 しますので、詳しい情報はそれぞれの接続形態について説明した章をご覧くだ さい。 最後にシリアル接続を EQL デバイスに結びつけます。これは「スレーブ化 (enslalving)」と呼ばれ、eql_enslave コマンドによって以下のように行いま す: root# eql_enslave eql sl0 28800 root# eql_enslave eql ppp0 14400 eql_enslave コマンドに与える「推定回線速度(estimated speed)」パラメー タは、直接には何もしません。このパラメータは EQL デバイスがデータグラ ムをそれぞれの回線からどのような割合で受けるかを決定するために使われる ので、この数字をうまく調整して最適値を探してください。 EQL デバイスから回線を開放するには、以下のように eql_emancipate コマン ドを使います: root# eql_emancipate eql sl0 他の二点間接続と同じく、EQL デバイスを使った経路制御も可能ですが、その 場合実際のシリアルデバイスではなく eql デバイスを経路に使います。例え ば、以下のように経路を設定できます: root# route add default eql EQL ドライバは Simon Janes simon@ncm.com が開発しました。 6.3. IP パケット統計情報の取得(Linux 2.0 用) カーネルに IP パケット統計情報の取得機能(IP accounting 機能)を組み込め ば、ネットワークの使用記録を取ることができます。記録できるデータは、最 後にカウンタをリセットしてからやりとりしたパケット数とデータのバイト数 です。カテゴリごとに異なるルールを指定でき、目的に応じた設定が可能で す。このオプションはカーネル 2.1.102 でなくなりました。古い ipfwadm ベ ースのファイアウォールが ``ipfwchains'' によって置き換えられたからで す。 カーネルのコンパイルオプション: Networking options ---> [*] IP: accounting カーネルに必要な機能を組み込んで再起動した後、ipfwadm コマンドを使って IP パケット統計取得機能を設定します。IP パケットの統計情報を細分するた めの方法はいろいろあります。以下に実際に使えそうな簡単な設定例を示して みます。詳細については ipfwadm の man ページを読んでください。 状況設定: PPP 経由でインターネットに接続されたイーサネットのネットワー クがあるとします。イーサネットのネットワーク上にはさまざまなサービスを 提供しているマシンがあり、ftp や WWW といったトラフィックがどれくらい 生じているかを知りたいとします。また tcp, udp 全体についても同様のこと を知りたいとします。 以下のようなコマンド群を実行することになります。シェルスクリプトの形に まとめて示します: #!/bin/sh # # Flush the accounting rules ipfwadm -A -f # # Set shortcuts localnet=44.136.8.96/29 any=0/0 # Add rules for local ethernet segment ipfwadm -A in -a -P tcp -D $localnet ftp-data ipfwadm -A out -a -P tcp -S $localnet ftp-data ipfwadm -A in -a -P tcp -D $localnet www ipfwadm -A out -a -P tcp -S $localnet www ipfwadm -A in -a -P tcp -D $localnet ipfwadm -A out -a -P tcp -S $localnet ipfwadm -A in -a -P udp -D $localnet ipfwadm -A out -a -P udp -S $localnet # # Rules for default ipfwadm -A in -a -P tcp -D $any ftp-data ipfwadm -A out -a -P tcp -S $any ftp-data ipfwadm -A in -a -P tcp -D $any www ipfwadm -A out -a -P tcp -S $any www ipfwadm -A in -a -P tcp -D $any ipfwadm -A out -a -P tcp -S $any ipfwadm -A in -a -P udp -D $any ipfwadm -A out -a -P udp -S $any # # List the rules ipfwadm -A -l -n # ``ftp-data'' や ``www'' といった名前は /etc/services における設定を参 照します。最後のコマンドはそれぞれの IP パケット統計の取得規則を列挙 し、集めたデータの合計値を表示します。 IP パケット統計情報を解析する際に注意すべきなのは、マッチしたすべての 規則における各合計エリアに対して(転送バイト数やパケット数が)それぞれ足 しこまれるということです。このため、差として現れる値を得るには多少の計 算が必要です。例えば、ftp でも www でもないデータ量を知るためには、全 てのポートにマッチする規則より得た転送量から、ftp や www といった個々 のプロトコルで転送したデータ量を引く必要があります。 root# ipfwadm -A -l -n IP accounting rules pkts bytes dir prot source destination ports 0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 20 0 0 out tcp 44.136.8.96/29 0.0.0.0/0 20 -> * 10 1166 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 80 10 572 out tcp 44.136.8.96/29 0.0.0.0/0 80 -> * 252 10943 in tcp 0.0.0.0/0 44.136.8.96/29 * -> * 231 18831 out tcp 44.136.8.96/29 0.0.0.0/0 * -> * 0 0 in udp 0.0.0.0/0 44.136.8.96/29 * -> * 0 0 out udp 44.136.8.96/29 0.0.0.0/0 * -> * 0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 20 0 0 out tcp 0.0.0.0/0 0.0.0.0/0 20 -> * 10 1166 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 80 10 572 out tcp 0.0.0.0/0 0.0.0.0/0 80 -> * 253 10983 in tcp 0.0.0.0/0 0.0.0.0/0 * -> * 231 18831 out tcp 0.0.0.0/0 0.0.0.0/0 * -> * 0 0 in udp 0.0.0.0/0 0.0.0.0/0 * -> * 0 0 out udp 0.0.0.0/0 0.0.0.0/0 * -> * 6.4. IPパケット統計取得(Linux 2.2 用) 新しい IP パケット統計取得機能は「IP Firewall Chains」を通じて利用しま す。詳しくは IP chains のホームページ を見 てください。特に注意すべきなのは、フィルタの設定には ipfwadm ではなく ipchains を使う必要がある点です(最新版カーネルの Documentation/Changes より)。 6.5. IP エイリアス 1 つのネットワークデバイスに複数個の IP アドレスを設定できると便利な用 途がいくつかあります。インターネットサービスプロバイダ(ISP)はよくこの 機能を用いて、顧客に合わせて「カスタマイズした」WWW サービスや ftp サ ービスを提供しています。ここに書いている以上の情報については、 ``IP- Alias mini-HOWTO'' をご覧ください。 カーネルのコンパイルオプション: Networking options ---> .... [*] Network aliasing .... <*> IP: aliasing support IP_Alias 機能を組み込んだカーネルを構築してインストールしてしまえば、 この機能を設定するのはごく簡単です。alias 機能は、実際のネットワークデ バイスに仮想的なネットワークデバイスを関連づけて追加します。仮想的なデ バイスに割りあてる名前は、: の形で、 eth0:0、ppp0:10 のようになります。ifname:number 形式のデバイスは、メイ ンのインタフェースの設定後でなければ設定できない点に注意してください。 たとえば、 2 つの異なった IP サブネットワークをサポートしているイーサ ネットネットワークに接続したマシンがあるとして、同時に双方のサブネット にアクセスしたい場合、以下のようにします。 root# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0 root# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up root# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0 エイリアスを削除する場合、仮想的なデバイス名の後に `-' を付けて ifconfig します。 root# ifconfig eth0:0- 0 仮想デバイスを削除すれば、関連した経路も全て自動的に削除されます。 6.6. IP ファイアウォール(Linux 2.0 用) IP ファイアウォールとファイアウォール全般については Firewall-HOWTO の方がずっと詳しく扱っています。IP ファイアウォ ールを使えば、許可した IP アドレスからのデータグラム以外は通さないよう に設定できます。ファイアウォールの設定には、入ってくるデータグラムに対 するもの、出ていくデータグラムに対するもの、内部で転送(forward)するデ ータグラムに対するものの 3 種類があります。入ってくるデータグラムに対 するルールはネットワークデバイスが受けとったデータグラムに対して適用さ れ、出ていくデータグラムに対するルールはネットワークデバイスが送出する データグラムに適用されます。転送するデータグラムに対するルールは、受け とったものの、自分宛てではないデータグラム、すなわち別の経路に送り出す データグラムに適用されます。 カーネルのコンパイルオプション: Networking options ---> [*] Network firewalls .... [*] IP: forwarding/gatewaying .... [*] IP: firewalling [ ] IP: firewall packet logging IP ファイアウォール機能は ipfwadm コマンドを使って設定します。以前にも 述べましたが、私はセキュリティについての専門家ではありません。以下に応 用可能な簡単な例を紹介しますが、セキュリティが重要な問題ならば、ご自分 で研究して必要な設定を開発してください。 IP ファイアウォール機能の最も一般的な使い方は、Linux マシンをルータや ファイアウォールゲートウェイとして用い、ローカルネットワークをネットワ ーク外部からの許可されていないアクセスから守ることでしょう。 以下の設定は Arnt Gulbrandsen が報告してくれたもの に基づいています。 以下に用いる例では、下図のような設定で、Linux マシンをファイアウォール /ルータにしています。 - - \ | 172.16.37.0 \ | /255.255.255.0 \ --------- | | 172.16.174.30 | Linux | | NET =================| f/w |------| ..37.19 | PPP | router| | -------- / --------- |--| Mail | / | | /DNS | / | -------- - - ファイアウォールを設定するためのコマンドは、通常 rc ファイルにまとめ て、システムの起動時に自動的に実行するように設定します。セキュリティを 最大限に強化するには、ネットワークインターフェイスが設定されてからこれ らの設定を行うべきですが、ファイアウォールマシンをリブートした際に誰か がイタズラするのを防ぐため、ネットワーク設定の前に実行する必要があるか もしれません。 #!/bin/sh # Flush the 'Forwarding' rules table # Change the default policy to 'accept' # /sbin/ipfwadm -F -f /sbin/ipfwadm -F -p accept # # .. and for 'Incoming' # /sbin/ipfwadm -I -f /sbin/ipfwadm -I -p accept # First off, seal off the PPP interface # I'd love to use '-a deny' instead of '-a reject -y' but then it # would be impossible to originate connections on that interface too. # The -o causes all rejected datagrams to be logged. This trades # disk space against knowledge of an attack of configuration error. # /sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30 # Throw away certain kinds of obviously forged packets right away: # Nothing should come from multicast/anycast/broadcast addresses # /sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24 # # and nothing coming from the loopback network should ever be # seen on a wire # /sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24 # accept incoming SMTP and DNS connections, but only # to the Mail/Name Server # /sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53 # # DNS uses UDP as well as TCP, so allow that too # for questions to our name server # /sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53 # # but not "answers" coming to dangerous ports like NFS and # Larry McVoy's NFS extension. If you run squid, add its port here. # /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \ -D 172.16.37.0/24 2049 2050 # answers to other user ports are okay # /sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \ -D 172.16.37.0/24 53 1024:65535 # Reject incoming connections to identd # We use 'reject' here so that the connecting host is told # straight away not to bother continuing, otherwise we'd experience # delays while ident timed out. # /sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113 # Accept some common service connections from the 192.168.64 and # 192.168.65 networks, they are friends that we trust. # /sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \ -D 172.16.37.0/24 20:23 # accept and pass through anything originating inside # /sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0 # deny most other incoming TCP connections and log them # (append 1:1023 if you have problems with ftp not working) # /sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24 # ... for UDP too # /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24 よいファイアウォールの設定は多少トリッキーになっているものですが、ここ に示した例は出発点として十分役に立つはずです。設定方法の詳細については ipfwadm の man ページを参照してください。ファイアウォールを設定する場 合、周囲の人にたずねて、信頼するに足る情報源からのアドバイスを可能な限 り受けてください。そして、設定が正しく機能しているかどうか、外部から確 認してもらいましょう。 6.7. IP ファイアウォール (Linux 2.2 用) 新しいファイアウォール機能は ``IP Firewall Chains'' を使って利用できま す。詳しくは IP chains のホームページ を見 てください。特に注意すべきなのは、フィルタの設定には ipfwadm ではなく ipchains を使う必要がある点です(最新版カーネルの Documentation/Changes より)。 この説明は非常に古くなっていることは筆者らもわかっており、この節を書き 直すべく現在作業中です。1999 年の 8 月には新しい版を出すのでお待ちくだ さい。 6.8. IPIP カプセル化 IP データグラムの中に IP データグラムをカプセル化して入れると、なんの 役に立つんでしょうか? 前もって使い途を知っていなければ、この手法はきっ と奇妙に思えることでしょう。では、これがよく使われる目的を 2 つ示しま しょう。モバイル IP と IP マルチキャストです。もっとも広く使われている けれど、ほとんど知られていない利用目的としてはアマチュア無線がありま す。 カーネルのコンパイルオプション: Networking options ---> [*] TCP/IP networking [*] IP: forwarding/gatewaying .... <*> IP: tunneling IP トンネルデバイスは `tunl0', `tunl1' 等となります。 「でも、どうしてこんなものを使うの?」かって? はいはい、説明しましょ う。今までの IP 経路制御では、IP ネットワークはネットワークアドレスと ネットワークマスクから構成されることになっていました。これにより、連続 した一連のアドレスの全てに対して 1 つの経路制御エントリを使った経路制 御が行えました。これは大変便利ですが、ある特定のネットワークの一部に接 続している間は特定の IP アドレスしか使えないということでもあります。ほ とんどの場合はこれでも大丈夫なのですが、あなたがモバイル派であれば、 ずっと 1 つの場所に接続したままというわけにはいかないと思います。 IP/IP カプセル化(IP トンネリング)を使うと、自分の IP アドレス宛のデー タグラムに IP の皮をかぶせて別の IP アドレスに送ることによって、この制 限を克服できます。しばらく別の IP ネットワークで作業をすることが分かっ ていれば、自分の元々のネットワーク上のマシンがあなたの IP アドレス宛の データグラムを受け付け、これを現在一時的に使っているアドレスに送るよう に設定できます。 6.8.1. トンネリングを行うネットワーク設定 192.168.1/24 192.168.2/24 - - | ppp0 = ppp0 = | | aaa.bbb.ccc.ddd fff.ggg.hhh.iii | | | | /-----\ /-----\ | | | | // | | | |---| A |------//---------| B |---| | | | // | | | | \-----/ \-----/ | | | - - この図は、IPIP カプセル化が必要となる別の理由、すなわち仮想プライベー トネットワーク(virtual private networking, VPN)を示しています。この例 では、ダイアルアップによる単純なインターネット接続をしているマシンが 2 台あることを前提とします。それぞれのホストは IP アドレスを 1 つだけ割 り当てられています。これらのマシンの後ろには、予約済みの IP ネットワー クアドレスを使う設定のプライベートな LAN がいくつかあります。このと き、ネットワーク A 上のホストとネットワーク B 上のホストを、あるネット ワーク経路を使って正しくインターネットに接続しているかのように接続した いとします。IPIP カプセル化を使うとこれが可能になります。カプセル化で は、ネットワーク A と B のホストをインターネット上の別のホストと通信さ せるという問題は解決されないので注意してください。 これを行うには、さ らに IP マスカレード等の技が必要となります。カプセル化は普通、マシンを ルータのように機能させることで実現します。 Linux によるルータ `A' は、以下のようなスクリプトを使って設定します: #!/bin/sh PATH=/sbin:/usr/sbin mask=255.255.255.0 remotegw=fff.ggg.hhh.iii # # Ethernet configuration ifconfig eth0 192.168.1.1 netmask $mask up route add -net 192.168.1.0 netmask $mask eth0 # # ppp0 configuration (start ppp link, set default route) pppd route add default ppp0 # # Tunnel device configuration ifconfig tunl0 192.168.1.1 up route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0 Linux によるルータ `B' も同様のスクリプトを使って設定します: #!/bin/sh PATH=/sbin:/usr/sbin mask=255.255.255.0 remotegw=aaa.bbb.ccc.ddd # # Ethernet configuration ifconfig eth0 192.168.2.1 netmask $mask up route add -net 192.168.2.0 netmask $mask eth0 # # ppp0 configuration (start ppp link, set default route) pppd route add default ppp0 # # Tunnel device configuration ifconfig tunl0 192.168.2.1 up route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0 以下のコマンド route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0 は、「192.168.1.0/24宛の全てのデータグラムを、終点アドレスが aaa.bbb.ccc.ddd である IPIP カプセル化データグラムの中に送ること」と読 みます。 設定は両端で対になる点に注意してください。トンネルデバイスは、経路を指 定するために受け取ったデータグラムを入れた IP データグラムの終点とし て、経路の中で `gw' を使います。そのマシンは IPIP データグラムのカプセ ル化解除の方法を知っていなければなりません。つまり、トンネルデバイスが 設定されていなければなりません。 6.8.2. トンネリングを行うホストの設定 ネットワーク全体でまとめて経路制御を行う必要はありません。例えば、1 つ の IP アドレスだけの経路を指定することもできます。この場合には、「リモ ート」のマシンのtunl デバイスにホームの IP アドレスを設定し、A 側では トンネルデバイスを通じて、ネットワークの経路制御ではなくホストの経路制 御(および Proxy Arp)を行うだけです。構成図を正しく書き直してみましょ う。今度の場合は、両方がインターネットに完全に接続し、かつホスト `A' がサポートしているリモートのネットワークの一部であるかのように動作させ たいホスト `B' があるだけです: 192.168.1/24 - | ppp0 = ppp0 = | aaa.bbb.ccc.ddd fff.ggg.hhh.iii | | /-----\ /-----\ | | | // | | |---| A |------//---------| B | | | | // | | | \-----/ \-----/ | also: 192.168.1.12 - Linux によるルータ `A' は以下のシェルスクリプトを使って設定します: #!/bin/sh PATH=/sbin:/usr/sbin mask=255.255.255.0 remotegw=fff.ggg.hhh.iii # # Ethernet configuration ifconfig eth0 192.168.1.1 netmask $mask up route add -net 192.168.1.0 netmask $mask eth0 # # ppp0 configuration (start ppp link, set default route) pppd route add default ppp0 # # Tunnel device configuration ifconfig tunl0 192.168.1.1 up route add -host 192.168.1.12 gw $remotegw tunl0 # # Proxy ARP for the remote host arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub Linux ホスト `B' は以下のシェルスクリプトを使って設定します: #!/bin/sh PATH=/sbin:/usr/sbin mask=255.255.255.0 remotegw=aaa.bbb.ccc.ddd # # ppp0 configuration (start ppp link, set default route) pppd route add default ppp0 # # Tunnel device configuration ifconfig tunl0 192.168.1.12 up route add -net 192.168.1.0 netmask $mask gw $remotegwtunl0 このような設定は、モバイル IP を考えるとよりはっきりします。モバイル IP では、1 つのホストがインターネット上であちこちに移動しつつ、その間 ずっと 1 つの IP アドレスを使い続けられると便利です。実際のモバイル IP の扱い方については、モバイル IP の節を参照してください。 6.9. IP マスカレード(IP Masquerade) インターネットに接続するためにダイアルアップ接続を使っている人もたくさ んいることでしょう。こういった接続を用いているほとんどの人は、 ISP か ら IP アドレスを 1 つしかもらえません。 1 台のホストが完全にネットワー クにアクセスするには、普通は IP アドレスが 1 つあれば十分だからで す。IP マスカレード(IP Masquerade)というのは、1 つの IP アドレスを複数 のコンピュータで使うためのうまい仕掛けです。IP マスカレードを使えば、 「マスカレード(masquerade, 変装)」という言葉の通り、他のホストをダイア ルアップ接続しているマシンに見せかけて IP アドレスを共有できます。ただ し注意点も少しあって、マスカレード機能はほぼ確実に片方向の通信でしか動 作しません。つまり、マスカレードされているホストは自分からの接続は行え ますが、リモートホストからの接続を受け付けることはできません。したがっ て、talk 等のネットワークサービスは動作しませんし、 ftp 等のサービスは パッシブ(PASV)モードで動作するように設定しなければなりません。幸運なこ とに、telnet, WWW, irc を含む大部分のネットワークサービスはうまく動作 します。 カーネルのコンパイルオプション: Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers Networking options ---> [*] Network firewalls .... [*] TCP/IP networking [*] IP: forwarding/gatewaying .... [*] IP: masquerading (EXPERIMENTAL) 普通の場合、あなたの Linux マシンには slip か PPP ダイアルアップ接続機 能が組み込まれている事でしょう (あたかもスタンドアロンのマシンであるか のように)。さらに、そのマシンには別のネットワークデバイス (多分イーサ ネット) が設定されていて、ネットワークが一つ割り振られていることになっ ているでしょう。マスカレード経由で接続するホストはこの 2 つめのネット ワーク上にあります。イーサネットネットワーク上にある各マシンのデフォル トの経路には、 IP マスカレードを組み込んでインターネットとのゲートウェ イになっている、この Linux マシンを指定します。 よくある IP マスカレードの設定は下図のようになります: - - \ | 192.168.1.0 \ | /255.255.255.0 \ --------- | | | Linux | .1.1 | NET =================| masq |------| | PPP/slip | router| | -------- / --------- |--| host | / | | | / | -------- - - IPFWADM を使った IP マスカレード この設定を行うため最も適切なコマンドは以下のようになります: # Network route for ethernet route add -net 192.168.1.0 netmask 255.255.255.0 eth0 # # Default route to the rest of the internet. route add default ppp0 # # Cause all hosts on the 192.168.1/24 network to be masqueraded. ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0 ipchains を使った IP マスカレード これは ipfwadm を使う場合と似ていますが、コマンドの構造が変わっていま す: # Network route for ethernet route add -net 192.168.1.0 netmask 255.255.255.0 eth0 # # Default route to the rest of the internet. route add default ppp0 # # Cause all hosts on the 192.168.1/24 network to be masqueraded. ipchains -A forward -s 192.168.1.0/24 -j MASQ IP マスカレード機能の詳しい説明は IP Masquerade Resource Page にあります。また、IP マスカレー ドに関する非常に詳しい説明として、 ``IP-Masquerade mini-HOWTO'' があり ます。この文書には、Linux を使った IP マスカレードサーバと他の OS を組 み合わせて使うための設定も載っています。 (注: 上記 uri は 2000/12 現在到達不能なようです。代りに Linux IP Masquerade Resource をご覧ください。) 6.10. IP 透過プロキシ(IP Transparent Proxy) IP transparent proxy 機能を使えば、別のマシンへのサービスリクエストや サーバへのアクセスをこのマシンにリダイレクトすることができます。この機 能は、Linux マシンをルータ兼プロキシサーバとして使っている場合に便利 で、外部のネットワークへ要求されたリクエストを全てローカルのプロキシサ ーバで処理できるようになります。 カーネルのコンパイルオプション: Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers Networking options ---> [*] Network firewalls .... [*] TCP/IP networking .... [*] IP: firewalling .... [*] IP: transparent proxy support (EXPERIMENTAL) 透過プロキシ機能は ipfwadm コマンドで設定します。 役立ちそうな設定例を以下に示しておきます: root# ipfwadm -I -a accept -D 0/0 telnet -r 2323 この例を実行した場合、任意のホストの telnet(23 番)ポートに接続しようと すると、透過プロキシホストの 2323 番ポートにリダイレクトされます。この ポートでサービスを実行すれば、telnet 接続を転送したりログを残す等、必 要に応じた動作をさせられます。 さらに面白い例として、全ての http トラフィックをローカルのキャッシュに リダイレクトすることもできます。しかし、プロキシサーバが使うプロトコル はネイティブの http: とは異なります。つまり、http クライアントは www.server.com:80 に接続して /path/page を要求しますが、ローカルキャッ シュに接続した場合は proxy.local.domain:8080 に接続して www.server.com/path/page を要求しなければなりません。 http リクエストにローカルプロキシのフィルタをかけるには、 transproxy と呼ばれる小さなサーバ(WWW で入手できます)を間に置いて、プロトコルを一 致させる必要があります。transproxy を 8081 番ポートで動作させるには、 以下のコマンドを実行します: root# ipfwadm -I -a accept -D 0/0 80 -r 8081 こうすると、transproxy は外部サーバにアクセスしようとする全ての接続を 受け取り、プロトコルの相違点を直した後に、これをローカルのプロキシに渡 します。 6.11. IPv6 やっと IP ネットワークについて理解し始めたところだというのに、ルールが 変ってしまうなんて…、と思われるかもしれません。IPv6 とは Internet Protocol Version 6 の省略形です。IPv6 は、現在インターネットコミュニ ティが直面している IP アドレスの枯渇問題に対応することを主目的に開発さ れています。IPv6 のアドレスは 16 バイト長(128 ビット)になっています。 それ以外にも、IPv6 では主として単純化のためのさまざまな変更が施され て、既存の IPv4 ネットワークよりも管理しやすいようになっています。 Linux 2.2.*シリーズには、既に IPv6 の実装が動作していますが、まだ完全 ではありません。 この次世代のインターネット技術を試してみたい場合や必要な場合は、 www.terra.net から入手できる IPv6-FAQ を まず読んでみましょう。 6.12. モバイル IP(Mobile IP) 「IP の可搬性(IP mobility)」とは、ある場所でインターネットに接続してい るホストが、別の場所に移っても IP アドレスを変更せずに接続できたり、接 続を切らずに場所を移動できることです。通常、IP アドレスを割り当てられ ているホストは、接続場所を変更すれば IP アドレスも変更しなければなりま せん。IP mobility 機能を使えば、ポータブルマシンにも決まった IP アドレ スを割り当て、自動ルーティング機能とIP カプセル化(トンネリング)機能を 使い、ポータブルマシン宛のデータグラムを、そのマシンが現在実際に使って いる IP アドレスに送ることができます。 Linux 用に IP mobility ツール一式を開発しようというプロジェクトが進行 中です。プロジェクトの進行状況とツールは Linux Mobile IP Home Page から入手できます。 6.13. マルチキャスト 通常、TCP/IP は接続先のマシンを指定した一対一の接続形態を取りますが、 IP マルチキャスト機能を使えば、異なる IP ネットワーク上にある任意の数 のホストへ、同時に IP データグラムを送ることが可能になります。この機能 は、インターネット全体へ音声やビデオの素材を「放送」するなど、さまざま な新しいアプリケーションのために開発されました。 カーネルのコンパイルオプション: Networking options ---> [*] TCP/IP networking .... [*] IP: multicasting IP マルチキャストを使うには、ツール一式と多少のネットワークの設定が必 要です。Linux のマルチキャスト対応に関する詳しい情報については Multicast-HOWTO をご覧ください。 6.14. NAT - ネットワークアドレス変換(Network Address Translation) IP ネットワークアドレス変換機能(NAT)は、Linux の IP マスカレード機能の 兄貴分が標準化されたもの、と思ってだいたいかまいません。NAT は RFC-1631 で詳しく仕様が決められています(RFC 文書はお近くの RFC アーカ イブから入手してください)。NAT にできて IP マスカレードにはできない機 能があるので、会社規模のファイアウォールの経路設計や大規模な設備で用い るには NAT の方がずっと適切です。 Linux 2.0.29 用の NAT のアルファ版の実装は Michael.Hasenstein Michael.Hasenstein@informatik.tu-chemnitz.de が開発しました。 Michaels が作成した文書と実装は以下の場所から入手できます: Linux IP Network Address Web Page 新しい Linux 2.2.x でも、経路制御アルゴリズムに NAT 機能の一部が入って います。 6.15. Traffic Shaper - 許可する帯域幅の変更 traffic shaper は、ユーザが定義したようにトラフィックを制限するインタ フェースデバイスを新しく作成するドライバです。このデバイスは、実際の送 信を行う物理的なネットワークデバイスに依存します。また、ネットワークト ラフィックに対しては送信用の routed として使えます。 traffic shaper は Linux 2.1.15 で導入され、Linux 2.0.36 にバックポー ト(訳注: 開発版カーネルの機能を安定版カーネルに移植すること) されまし た(traffic shaper は、Alan Cox が配布している 2.0.36-pre-patch-2 に含 まれています。Alan Cox は Linux 2.0 用の shaper デバイスの作者でありメ ンテナです)。 traffic shaper はモジュールとしてコンパイルしなければなりません。この デバイスは shapecfg コマンドを以下のように使って設定します: shapecfg attach shaper0 eth1 shapecfg speed shaper0 64000 shaper デバイスは送信するトラフィックの帯域幅の制御しかできません。と いうのも、パケットは経路表に従って shaper デバイス経由で送信されるから です。したがって、「始点アドレスを使った経路制御」機能を利用すれば、 Linux ルータを使っている特定のホストの全体の帯域幅を制限できます。 Linux 2.2 は最初からこのような経路制御に対応しています。Linux 2.0 でこ の機能が必要ならば Mike McLagan によるパッチを調べてください。このパッ チは ftp.invlogic.com にあります。shaper デバイスに関するの詳しい情報 については、Documentationnetworking/shaper.txt/ を見てください。 受信するパケットの(試験的な)調整を試してみたければ、 rshaper-1.01 を試 すとよいでしょう(さらに新しいバージョンがあるかもしれません)。これは ftp.systemy.it から入手できます。 6.16. Linux 2.2 における経路制御 最新版の Linux であるバージョン 2.2 では、経路制御のポリシーは非常に柔 軟に設定できます。申し訳ありませんが、解説については本文書の次の版を待 つか、カーネルのソースを読むかしてください。 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 カードをサポートしていま す。以下のカードがカーネルの設定時の選択肢として表示されます: o ICN 2B と 4B o Octal PCBIT-D o Teles 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 です。 localplip と remoteplip の部分は PLIP ケーブル上の通信で使われるホスト名か IP アド レスです。筆者は、localplip と remoteplip を /etc/hosts データベースに 登録しています。 # plip entries 192.168.3.1 localplip 192.168.3.2 remoteplip pointtopoint パラメータは SLIP の場合と同じ意味で、接続のもう一方の端 にいるマシンのアドレスを設定します。 ほとんどの場合、plip インターフェイスは SLIP インターフェイスと同様に 使えます。ただし plip は dip や slattach を使う必要もなければ、使うこ ともできません。 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 で詳しく説明されていま す。 7.4.1. 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 のデバイス名は sl0、 sl1 など ですが、これらとシリアルデバイスとの関係はどのようになっているのでしょ うか? SLIP のプログラムは ioctl (I/O control) システムコールを使ってシ リアルデバイスを SLIP デバイスに変換しています。このためのプログラムが dip と slattach です。 7.5.1. 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 このパッケージに入っている Makefile は uucp というグループがあることを 前提にしています。環境に合わせて、このグループを dip や SLIP にしてく ださい。 7.5.2. slattach slattach は dip に比べるとずいぶん単純なプログラムです。非常に簡単に使 えますが、dip ほどの機能は持っていません。 slattach はスクリプト機能も なく、シリアルデバイスを SLIP デバイスに変換する機能しか持っていませ ん。slattach を使う場合には、 IP アドレスなどの情報が予め分っており、 さらに起動前にシリアル接続が確立されていなければいけません。slattach は、シリアル回線を経由してサーバに直結していたり、シリアルの専用回線を 使っている際に便利なプログラムです。 7.5.3. どんな場合にどれを使うべきか? dip は、モデムを経由して SLIP サーバに接続する場合か、一時的な接続を張 る場合に使います。専用回線でサーバと接続しており、接続のために特別の処 理が不要の場合は slattach が便利です。詳細については「恒久的な SLIP 接 続」の節を参照してください。 SLIP インターフェイスの設定はイーサネットインターフェイスの設定によく 似ています(既述の「イーサネットデバイスの設定」の節を参照してくださ い)。しかしながら、いくつか重要な違いもあります。 まず第一に、SLIP の場合はイーサネットのネットワークとは異なり、接続の 両端に一台ずつのマシンしかありません。ethernet の場合はケーブルを繋げ ばすぐに使えますが、SLIP の場合、接続形態にもよりますが、ネットワーク 接続を開始するには何らかの初期化処理が必要です。 dip の場合、システムの起動時には設定できず、シリアル接続の準備ができた 段階で起動することになります。この手順は自動化できます。 slattach の場 合、rc.inet1 の中で設定するのがいいでしょう。この方法については後述し ます。 SLIP サーバには動的に IP アドレスを割り当てるタイプのサーバと予め決 まった IP アドレスを使うタイプのサーバの 2 種があります。また、ほとん どの SLIP サーバが、電話をかけてログインする時にはユーザ名とパスワード の入力を求めます。dip を使えば、この処理を自動化できます。 7.5.4. 予め決まった IP アドレスを使う SLIP サーバ 予め割り当てておいた IP アドレスを使うタイプのサーバでは、事前に専用の IP アドレスを各クライアントに割り当てて、各クライアントは接続の際にそ の IP アドレスで SLIP ポートを設定します。この種の SLIP サーバでは、モ デムからの着信に答えて、ユーザ名とパスワードの入力を促してユーザを確認 した後、あなた用の IP アドレス向けのデータグラムはすべてその SLIP デバ イスに送るように経路制御情報を設定します。この種のサーバを使っている場 合は、自分のホスト名と IP アドレスは予め決まっていますから、 /etc/hosts に書いておくことも可能です。また rc.inet2 や host.conf, resolv.conf, /etc/HOSTNAME, rc.local などを通常のイーサネット接続と同 様に設定することができます。rc.inet1 を設定する場合、SLIP 接続用に特別 のコマンドを設定する必要はありません。ネットワークインターフェイスを設 定するなどの作業は dip の仕事です。必要な情報は dip に与え、dip がモデ ムを使って電話をかけ、接続が確立してから必要な設定を実行するようにしま す。 接続先の SLIP サーバがこの種の設定の場合、次に「DIP の使い方」の節に進 んで、dip の設定方法を調べてください。 7.5.5. 接続時に IP アドレスを割り当てるタイプのサーバ 動的な SLIP サーバとは、予め用意してある複数の IP アドレスの中から、接 続のたびに異なる IP アドレスをクライアントに割り当てるタイプのサーバで す。この場合、接続のたびに割り当てられる IP アドレスは異なり、あなたが 今使っているアドレスも、ログアウト後は誰か別の人に割り当てられることに なります。SLIP サーバを設定するネットワークの管理者は、予め SLIP で使 うための IP アドレスを複数個用意しておき、新しく接続してきたマシンには 使っていない IP アドレスを割り当てるように設定します。この場合、ログイ ンプロセスの中でウェルカム・メッセージとともに割り当てた IP アドレスが 示され、その接続の間はその IP アドレスを使って通信します。 この種のサーバを使う場合も、予め IP アドレスを割り当てるタイプのサーバ とほぼ同じ設定になりますが、接続の度に割り当てられた IP アドレスを使っ て SLIP デバイスを設定するというステップが余計に必要になります。 ここでも dip がこの大変な作業を引き受けてくれます。 dip はログイン処理 をするだけでなく、ウェルカムメッセージの中に示される IPアドレスを自動 的に読みこんで、それを使って SLIP デバイスを設定してくれます。 接続先の SLIP サーバがこの種の設定の場合は、「DIP の使い方」の節へ進ん で dip の設定方法を覚えてください。 7.5.6. DIP の使い方 今までに述べてきたように、dip を使えば SLIP サーバへ電話をかけてログイ ンするという処理が自動的にできます。ログインすれば、 dip は自動的に ifconfig とroute コマンドを使って SLIP デバイスを設定します。 dip を使うためには、`dip スクリプト' を書く必要があります。 `dip スク リプト' は、基本的に dip が理解できるコマンドを並べたもので、dip で実 行したいコマンドを、どのように実行するかを記述しておきます。どのように 書くかは、dip プログラムに付属の sample.dip をご覧ください。dip は多数 のオプションを有する強力なプログラムなので、ここではその詳細に触れるこ とができません。 dip の man や 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, # 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 を使ってくだ さい。 dip に get $local コマンドを与えれば、 dip は接続先から送られてきたテ キストの中から IP アドレスのように見える文字列(例えば `.' で区切られた 数字)を探します。この修正は、動的に IP アドレスを割り当てるタイプの SLIP サーバ用で、サーバから与えられる IP アドレスを読み取る過程を自動 化できます。 上記の例では、自動的に SLIP 接続をデフォルトの経路に指定します。既に ethenet ネットワークに接続していて、デフォルトの経路はそちらにしたいよ うな場合には、上記のスクリプトから default を指定している行を削除して ください。このスクリプトが終了してから ifconfig コマンドを使って sl0 デバイスができていることを確認します。これが SLIP デバイスです。必要な らば、dip コマンドが終了してから ifocnfig や route コマンドを使って手 動で設定してください。 dip では mode コマンドを使って、複数のプロトコルの中から使うべきプロト コルを指定できます。もっともよく使われているプロトコルは SLIP に圧縮機 能を組み込んだ cSLIP です。接続の両端が同じプロトコルを使う必要がある ので、サーバの選んだプロトコルと同じものを使っているかを確認してくださ い。 上記のスクリプトはたいていのエラーには耐えられるように頑丈に作ってあり ます。より詳しい情報は dip の man ページをご覧ください。少し工夫をすれ ば、設定した時間内にサーバへ接続できなければ自動的にリダイアルしたり、 複数のサーバを順に試してみるような機能を組み込むことも可能です。 7.5.7. 専用線と 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 引数を指定すれば、異なるプロトコルを設定可能です。この 機能を使って、圧縮の有無によって SLIP か cSLIP を使い分ける場合がよく あります。注意:圧縮の有無は接続の両端で同じ設定にする必要があります。 7.6. SLIP サーバ インターネットなどのネットワークに接続したマシンがあり、電話を経由して 接続してきた他の人に各種のサービスを提供したい場合、あなたのマシンをサ ーバとして設定する必要があります。接続のためのシリアル回線のプロトコル に SLIP を使った場合、設定の仕方には 3 種類の方法があります。それぞれ の方法を以下に示しますが、私のお薦めは最初の sliplogin を使う方法で す。この方法が一番設定も理解も簡単です。でも他の方法についても説明しま すので、どれを使うかは御自分で判断してください。 7.6.1. 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 を使うためには設定ファイルがいくつか必要です。以下に、それら をどこから入手してどのように設定するかを説明します。必要なファイルは以 下の通りです: o /etc/passwd は電話経由で接続してくるユーザのアカウントを設定しま す。 /etc/slip.hosts には、それぞれのユーザごとの情報を設定します。 o /etc/slip.login には、ユーザに対して行う必要がある経路制御の設定を 行います。 o /etc/slip.tty は、「動的な IP アドレス割り当て」用のサーバを設定す る場合に限って必要となるファイルで、割り当てるアドレスの表になって います。 o /etc/slip.logout には、ユーザが接続を切ったりログアウトした際の後始 末のためのコマンドを設定します。 7.6.1.1. sliplogin の入手先 すでにディストリビューションの一部として sliplogin をインストール済み かもしれませんが、そうでなければ metalab.unc.edu から入手できます。この tar ファイルには、ソースとコンパイル済みのバイ ナリ、man ページが入っています。 sliplogin を実行できるのは、その権限を持ったユーザだけなので、以下のよ うなエントリを/etc/group ファイルに登録する必要があります。 .. slip::13:radio,fred .. sliplogin パッケージをインストールすれば、Makefile が自動的に sliplogin のグループを slipにし、このグループに属するユーザだけが sliplogin プログラムを実行できるようになります。上の例では radio と fred のみが 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 してください。どこか別のディレクトリにインストールす る場合は Makefile の install の指定を変更します。 詳しくは、パッケージに付属の README ファイルをご覧ください。 7.6.1.2. SLIP ホスト用の /etc/passwd 通常、SLIP で接続してくる人向けに特別のエントリを /etc/passwd に用意す る必要があります。よく行なわれているのは、接続してくるホスト名の頭に大 文字の `S' を付けて登録する方法です。今回紹介した例の場合、 radio 用に は以下のような /etc/passwd エントリを追加します: Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin 実際にはアカウント名には特に意味が無いので、自分にとって分りやすい名前 を付けてかまいません。 注意: 電話をかけてくる人はシェルを使うわけではないので、専用のホーム ディレクトリを用意する必要はありません。/tmp あたりを指定しておけばい いでしょう。また、通常のログインシェルの代わりに sliplogin を指定して いることに注意してください。 7.6.1.3. /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 ページを参照してください。 7.6.1.4. /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 pub exit 0 # お気づきのように、このスクリプトでは ifconfig と route を使って自分の IP アドレスと接続先の IP アドレス、ネットマスクを設定し、SLIP デバイス を使って接続先への経路を設定しているだけです。必要な設定は slattach コ マンドで設定することもできます。 サーバマシンと同じイーサネット上にいるホストから、電話を経由して接続し てきているホストへ接続するために、arp コマンドで代理 ARP(Proxy ARP)を 設定していることにも注意してください。 欄は、このマシンのイー サネットカードのハードウェアアドレスを指定します。イーサネットのネット ワークに接続していないサーバの場合はこの行を指定する必要はありません。 7.6.1.5. /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 も削除します。この作業もサーバマシンがイーサネットに接続してい ない場合は必要ありません。 7.6.1.6. /etc/slip.tty ファイル の設定 動的に IP アドレスを割り当てる場合(すなわち /etc/slip.hosts に DYNAMIC というキーワードを指定したエントリを作った場合)、割り当てるポート用の 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 アドレスは少なくて 済みます。 7.6.2. dip を使った SLIP サーバ 以下に説明する情報のいくつかは dip の man ページから引用したことを最初 に白状しておきます。この man ページでは Linux を SLIP サーバにする方法 について簡単に紹介してあります。また、以下の記述は dip337o-uri.tgz パッケージ用のもので、その他のバージョンの dip には当てはまらないこと も多いので御注意ください。 dip には input モード動作があります。ここでは起動したユーザのエントリ を用い、 /etc/diphosts ファイルの設定に従って自動的にシリアル回線を SLIP 接続として設定します。このモードに入るには、 dip を diplogin とい う名前で起動します。この機能を使えば 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 コマンドを 実行します。dip は diplogin というコマンド名で起動されると、自動的にロ グインシェルとして機能します。diplogin は、まず getuid() ファンクショ ンコールを使って自分を起動したユーザのユーザ ID を調べます。その 後、/etc/diphosts ファイルの最初のエントリを見て、そのユーザ ID か接続 があったデバイスの tty 名を調べ、その設定に従って適切な設定を行いま す。diphosts にユーザ名のエントリを作るか、サーバのデフォルトの設定を 使って、ユーザごとに静的な IP アドレスの割り当てと動的な割り当てを混在 させるような方法を取るかは判断におまかせします。 dip コマンドは input モードで起動されれば、自動的に「代理 ARP」のエン トリを追加するので、arp コマンドを手動で実行する必要はありません。 7.6.2.1. /etc/diphosts の設定 /etc/diphosts は dip が用いるファイルで、リモートホストの設定を前もっ てここに書いておきます。このファイルに設定するリモートホストは電話をか けて接続してくるユーザーのマシンの場合もあれば、あなたが 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 ファイルの指定に従って設定されるようになるはずです。 7.6.3. dSLIP パッケージを使った SLIP サーバ Matt Dillon は、 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 エントリを作ることをお忘れなく。 8. その他のネットワーク技術 以下の各節では特定のネットワーク技術を説明します。それぞれの節は独立し ているので、ある節を読むのに別の節の情報は特に必要ありません。話題はア ルファベット順に並べています。 8.1. ARCNet ARCNet のデバイス名は `arc0e', `arc1e', `arc2e' あるいは `arc0s', `arc1e', arc2e' のようになります。最初に検出されたカードが `arc0e' ま たは `arc0s' で、それ以降は検出された順に番号が振られます。デバイス名 の最後の s や e はパケットをイーサネットにカプセル化するか、 RFC1051 の形式にするかを示します。 カーネルのコンパイルオプション: Network device support ---> [*] Network device support <*> ARCnet support [ ] Enable arc0e (ARCnet "Ether-Encap" packet format) [ ] Enable arc0s (ARCnet RFC1051 packet format) ARCnet カードをサポートするようにカーネルを作成すれば、カードの設定は 簡単です。 通常は以下のように設定します: root# ifconfig arc0e 192.168.0.1 netmask 255.255.255.0 up root# route add -net 192.168.0.0 netmask 255.255.255.0 arc0e 詳細については /usr/src/linux/Documentation/networking/arcnet.txt と /usr/src/linux/Documentation/networking/arcnet-hardware.txt をご覧くだ さい。 ARCNet の機能は Avery Pennarrun apenwarr@foxnet.net が開発しました。 8.2. Appletalk ( AF_APPLETALK ) Appletalk 機能は既存のネットワークデバイスを使うので特別のデバイス名は 不要です。 カーネルのコンパイルオプション: Networking options ---> <*> Appletalk DDP Appletalk 機能を使えば、Linux を Apple のネットワークと協働させ、プリ ンタやディスクといったリソースを Linux と Apple 製のコンピュータの間で 共有できます。この機能を使うには netatalk と呼ばれるソフトが別途必要で す。ミシガン大学で `Research System Unix Group' というチームを率いてい る Wesley Craig netatalk@umich.edu が、 Appletalk のプロトコルスタック とその他有益なプログラムをまとめた netatalk と呼ばれるプログラムを開発 しました。 netatalk パッケージは Linux の配布パッケージに含まれている かもしれませんし、見つからなければミシガン大学 から FTP で入手でき ます。 このパッケージをコンパイルしてインストールするには以下のようにします。 user% tar xvfz .../netatalk-1.4b2.tar.Z user% make root# make install 実際に make を実行してソフトウェアをコンパイルする前に、 `Makefile' を 編集するとよいでしょう。特に、後でファイル群がインストールされる先を定 義する変数である DESTDIR は変更しておきましょう。デフォルト値の /usr/local/atalk でも十分安全です。 8.2.1. Appletalk 用ソフトウェアの設定 Appletalk を動作させるためにまずしなければならないことは、 /etc/services に適切な設定があるかどうかを確かめることです。必要なエン トリは以下の通りです: rtmp 1/ddp # Routing Table Maintenance Protocol nbp 2/ddp # Name Binding Protocol echo 4/ddp # AppleTalk Echo Protocol zip 6/ddp # Zone Information Protocol 次に /usr/local/atalk/etc ディレクトリ(またはパッケージのインストール 先のディレクトリ)に Appletalk の設定ファイルを作ります。 最初に作成すべきファイルは /usr/local/atalk/etc/atalkd.conf です。この ファイルには Apple のマシンのネットワークが接続しているネットワークデ バイス名のみを登録しておきます。 eth0 Appletalk デーモンプログラムが実行されると、このファイルに設定情報が追 加されます。 8.2.2. Linux のファイルシステムを Appletalk 経由で提供する方法 Linux マシンのファイルシステムを提供して、ネットワーク上の Apple のマ シンから使えます。 このためには /usr/local/atalk/etc/AppleVolumes.system ファイルを作成し ます。もう一つ、 /usr/local/atalk/etc/AppleVolumes.default というファ イルもあり、このファイルは AppleVolumes.system と全く同じ形式で、ゲス トアカウントでも利用できるファイルシステムを設定します。 これらのファイルを設定する詳しい方法や各種のオプションについては afpd の man ページをご覧ください。 以下に簡単な例を示します: /tmp Scratch /home/ftp/pub "Public Area" この例では /tmp ファイルシステムを `Scratch' という名で、 ftp の public ディレクトリを `Public Area' という名で、それぞれ AppleShare に 提供しています。`Scratch' や `Public Area' といったボリューム名は必須 ではなく、指定しなければデーモンが自動的に命名してくれますが、付けてお いても問題はありません。 8.2.3. AppleTalk 経由での Linux のプリンタの共有 Linux マシンに接続されたプリンタを Apple 製のマシンと共有するのも簡単 で、AppleTalk のプリンタ・アクセス・プロトコル・デーモン papd を使いま す。このプログラムは、Apple マシンからのプリントリクエストを受けつけて スプールし、lpr デーモンに渡して Linux マシンのプリンタに出力します。 papd の設定には /usr/local/atalk/etc/papd.conf ファイルを使います。こ のファイルの書式は /etc/printcap ファイルと同じで、登録したプリンタ名 が Appletalk の命名プロトコル NBP を使って Appletalk 上に設定されま す。 papd.conf の設定例を以下に示します: TricWriter:\ :pr=lp:op=cg: この設定で `TricWriter' というプリンタ名が Appletalk 上に設定され、そ のプリンタに送られた出力は lpd を使って Linux の `lp' プリン タ(/etc/printcap ファイルで設定されている lp プリンタです)に出力されま す。 `op=cg' の指定は Linux マシンのユーザ `cg' がプリンタの使用者にな ることを意味します。 8.2.4. appletalk ソフトウェアの起動 さて以上で、この基本的な設定を試す準備ができました。netatalk パッケー ジには rc.atalk ファイルが含まれていますので、 netatalk を起動するには 以下のようにします。 root# /usr/local/atalk/etc/rc.atalk これで必要なデーモン類が全て起動するはずです。エラーが出なければ、ソフ トウェアはコンソールにそれぞれの段階のメッセージを示していくはずです。 8.2.5. appletalk ソフトウェアのテスト netatalk が正しく機能しているかを確認するには、Apple のマシンを使っ て、アップルメニューから「セレクタ」を選び、AppleShare をクリックして Linux マシンが表示されるかどうかを確かめます。 8.2.6. netatalk の注意点 o 場合によっては、IP ネットワークを設定する以前に Appletalk 機能を起 動しなければいけないかもしれません。netatalk が起動しなかったり、 netatalk が起動すると IP ネットワークにトラブルが生じたりする場合、 netatalk を /etc/rc.d/rc.inet1 以前に起動してください。 o afpd(Apple Filing Protocol Daemon)は HDD をひどく散らかします。マウ ントポイントの下には、.AppleDesktop と Network Trash Folder という ファイルが作られます。さらに、アクセスがあった全てのディレクトリに はリソースフォーク等を保存するための .AppleDouble が作られます。で すから、/ を afpd で公開する前にはくれぐれもよく考えてください。さ もないと大変な時間をかけて後始末をする羽目になってしまいます。 o afpdは Mac に対して平文のパスワードを求めます。これはセキュリティ的 には問題なので、afpd をインターネット等の外部ネットワークに接続した マシンで起動する際には十分注意してください。さもないと、誰か悪い人 に被害を与えられて後悔することになるかもしれません。 o netstat や ifconfig といった既存のネットワーク診断ツールは AppleTalk をサポートしていません。必要ならば /proc/net/ 以下のディ レクトリに用意されている情報を調べてください。 8.2.7. さらに詳しい情報について Linux で AppleTalk を設定する方法のより詳しい説明については thehamptons.com で公開されて いる Anders Brownworth の Linux Netatalk-HOWTO を参照してください。 8.3. ATM Werner Almesberber は Linux で ATM(Asynchronous Transfer Mode)をサポートするための計画を統括していま す。この計画の現状は lrcwww.epfl.ch で見ることができます。 8.4. AX25 ( AF_AX25 ) AX.25 デバイスの名称は 2.0.* カーネルでは `sl0' や `sl1' ですが、2.1.* カーネルでは `ax0' や `ax1' になっています。 カーネルのコンパイルオプション: Networking options ---> [*] Amateur Radio AX.25 Level 2 AX25 と Netrom, Rose プロトコルについては AX25-HOWTO に詳しく説明されています。これらのプロトコルはパケット通信の実験で世界 中のアマチュア無線のオペレータに使われています。 これらのプロトコルのほとんどは Jonathon Naylor jsn@cs.not.ac.uk が実装 しました。 8.5. DECNet DECNet のサポートも現在開発中です。将来の 2.1.* シリーズで公開されるは ずです。 8.6. FDDI FDDI のデバイス名は `fddi0'、`fddi1'、 `fddi2' などになります。カーネ ルが検出した最初のカードが `fddi0' で、その後は検出した順に番号が振ら れていきます。 Larry Stefani lstefani@ultranet.com が DEC 製の EISA バスと PCI バスの FDDI カード用のドライバを開発しました。 カーネルのコンパイルオプション: Network device support ---> [*] FDDI driver support [*] Digital DEFEA and DEFPA adapter support FDDI ドライバを組み込んだカーネルを構築すれば、FDDI インターフェイスの 設定はイーサネットインターフェイスの設定とほぼ同じです。適切な FDDI イ ンターフェイスの名称を指定して ifconfig と route コマンドで設定しま す。 8.7. フレームリレー フレームリレーのデバイス名のうち、DLCI にカプセル化するデバイス名は `dlci00', `dlci01' 等になり、FRAD のデバイス名は `sdla0', `sdla1 等に なります。 フレームリレーは新しいネットワーク技術で、「突発的」に膨大なデータ転送 が起こるような種類の通信向けに設計されています。フレームリレーネットワ ークに接続するにはフレームリレー・アクセス・デバイス(FRAD : Frame Relay Access Device)を使います。Linux では RFC-1490 に定義されている、 フレームリレー上に IP 接続を乗せる機能がサポートされています。 カーネルのコンパイルオプション: Network device support ---> <*> Frame relay DLCI support (EXPERIMENTAL) (24) Max open DLCI (8) Max DLCI per device <*> SDLA (Sangoma S502/S508) support フレームリレー対応と設定用ツールは Mike McLagan mike.mclagan@linux.org が開発しました。 現在サポートされている FRAD は Sangoma Technologies 製の S502A, S502E, S508 だけです。 カーネルに必要な機能を組み込んで再構築した後、 FRAD と DLCI デバイスを 設定するには、フレームリレー設定用プログラムが必要になります。これらは ftp.invlogic.com から入手できます。このプログラムをコンパイルしてインストールするのは簡 単ですが、大元の Makefile が無いために手動でやる作業がかなりあります。 user% tar xvfz .../frad-0.15.tgz user% cd frad-0.15 user% for i in common dlci frad; make -C $i clean; make -C $i; done root# mkdir /etc/frad root# install -m 644 -o root -g root bin/*.sfm /etc/frad root# install -m 700 -o root -g root frad/fradcfg /sbin rppt# install -m 700 -o root -g root dlci/dlcicfg /sbin 上記のコマンドは sh の記法を使っているので注意してください。 sh 系でな く csh 系のシェル(tcsh 等)を使っている場合は、 for ループの書き方が異 なります。 必要なファイルをインストールした後、/etc/frad/router.conf ファイルを作 る必要があります。以下に、例として付いてきたファイルを多少修正したもの を雛型として紹介します。 # /etc/frad/router.conf # This is a template configuration for frame relay. # All tags are included. The default values are based on the code # supplied with the DOS drivers for the Sangoma S502A card. # # A '#' anywhere in a line constitutes a comment # Blanks are ignored (you can indent with tabs too) # Unknown [] entries and unknown keys are ignored # [Devices] Count=1 # number of devices to configure Dev_1=sdla0 # the name of a device #Dev_2=sdla1 # the name of a device # Specified here, these are applied to all devices and can be overridden for # each individual board. # Access=CPE Clock=Internal KBaud=64 Flags=TX # # MTU=1500 # Maximum transmit IFrame length, default is 4096 # T391=10 # T391 value 5 - 30, default is 10 # T392=15 # T392 value 5 - 30, default is 15 # N391=6 # N391 value 1 - 255, default is 6 # N392=3 # N392 value 1 - 10, default is 3 # N393=4 # N393 value 1 - 10, default is 4 # Specified here, these set the defaults for all boards # CIRfwd=16 # CIR forward 1 - 64 # Bc_fwd=16 # Bc forward 1 - 512 # Be_fwd=0 # Be forward 0 - 511 # CIRbak=16 # CIR backward 1 - 64 # Bc_bak=16 # Bc backward 1 - 512 # Be_bak=0 # Be backward 0 - 511 # # # Device specific configuration # # # # The first device is a Sangoma S502E # [sdla0] Type=Sangoma # Type of the device to configure, currently only # SANGOMA is recognized # # These keys are specific to the 'Sangoma' type # # The type of Sangoma board - S502A, S502E, S508 Board=S502E # # The name of the test firmware for the Sangoma board # Testware=/usr/src/frad-0.10/bin/sdla_tst.502 # # The name of the FR firmware # Firmware=/usr/src/frad-0.10/bin/frm_rel.502 # Port=360 # Port for this particular card Mem=C8 # Address of memory window, A0-EE, depending on card IRQ=5 # IRQ number, do not supply for S502A DLCIs=1 # Number of DLCI's attached to this device DLCI_1=16 # DLCI #1's number, 16 - 991 # DLCI_2=17 # DLCI_3=18 # DLCI_4=19 # DLCI_5=20 # # Specified here, these apply to this device only, # and override defaults from above # # Access=CPE # CPE or NODE, default is CPE # Flags=TXIgnore,RXIgnore,BufferFrames,DropAborted,Stats,MCI,AutoDLCI # Clock=Internal # External or Internal, default is Internal # Baud=128 # Specified baud rate of attached CSU/DSU # MTU=2048 # Maximum transmit IFrame length, default is 4096 # T391=10 # T391 value 5 - 30, default is 10 # T392=15 # T392 value 5 - 30, default is 15 # N391=6 # N391 value 1 - 255, default is 6 # N392=3 # N392 value 1 - 10, default is 3 # N393=4 # N393 value 1 - 10, default is 4 # # The second device is some other card # # [sdla1] # Type=FancyCard # Type of the device to configure. # Board= # Type of Sangoma board # Key=Value # values specific to this type of device # # DLCI Default configuration parameters # These may be overridden in the DLCI specific configurations # CIRfwd=64 # CIR forward 1 - 64 # Bc_fwd=16 # Bc forward 1 - 512 # Be_fwd=0 # Be forward 0 - 511 # CIRbak=16 # CIR backward 1 - 64 # Bc_bak=16 # Bc backward 1 - 512 # Be_bak=0 # Be backward 0 - 511 # # DLCI Configuration # These are all optional. The naming convention is # [DLCI_D_] # [DLCI_D1_16] # IP= # Net= # Mask= # Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames # DLCIFlags=TXIgnore,RXIgnore,BufferFrames # CIRfwd=64 # Bc_fwd=512 # Be_fwd=0 # CIRbak=64 # Bc_bak=512 # Be_bak=0 [DLCI_D2_16] # IP= # Net= # Mask= # Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames # DLCIFlags=TXIgnore,RXIgnore,BufferFrames # CIRfwd=16 # Bc_fwd=16 # Be_fwd=0 # CIRbak=16 # Bc_bak=16 # Be_bak=0 /etc/frad/router.conf ファイルが設定できれば、残る作業は実際のデバイス を設定するだけです。これは通常のネットワークデバイスの設定よりも少し複 雑なだけですが、DLCI カプセル化デバイス以前に FRAD デバイスを設定する ことをお忘れなく。これらのコマンドは数が多いので、シェルスクリプトにし ておくのがよいでしょう: #!/bin/sh # Configure the frad hardware and the DLCI parameters /sbin/fradcfg /etc/frad/router.conf || exit 1 /sbin/dlcicfg file /etc/frad/router.conf # # Bring up the FRAD device ifconfig sdla0 up # # Configure the DLCI encapsulation interfaces and routing ifconfig dlci00 192.168.10.1 pointopoint 192.168.10.2 up route add -net 192.168.10.0 netmask 255.255.255.0 dlci00 # ifconfig dlci01 192.168.11.1 pointopoint 192.168.11.2 up route add -net 192.168.11.0 netmask 255.255.255.0 dlci00 # route add default dev dlci00 # 8.8. IPX ( AF_IPX ) IPX プロトコルは Novell の NetWare(tm) LAN 環境で広く使われているプロ トコルです。Linux はこのプロトコルもサポートしており、ネットワークの端 末としても、IPX のルータとしても機能します。 カーネルのコンパイルオプション: Networking options ---> [*] The IPX protocol [ ] Full internal IPX network IPX プロトコルと NCPFS については IPX-HOWTO で詳しく 説明されています。 8.9. NetRom ( AF_NETROM ) NetRom のデバイス名は `nr0', `nr1' になります。 カーネルのコンパイルオプション: Networking options ---> [*] Amateur Radio AX.25 Level 2 [*] Amateur Radio NET/ROM AX25 と Netrom, Rose プロトコルについては AX25-HOWTO に詳しく説明されています。これらのプロトコルはパケット通信の実験で世界 中のアマチュア無線のオペレータに使われています。 これらのプロトコルのほとんどは Jonathon Naylor jsn@cs.not.ac.uk が実装 しました。 8.10. Rose プロトコル (AF_ROSE) 2.1.* カーネルでは、Rose デバイスの名前は `rs0', rs1' などのようになり ます。Rose デバイスは 2.1.* カーネルでないと使えません。 カーネルのコンパイルオプション: Networking options ---> [*] Amateur Radio AX.25 Level 2 <*> Amateur Radio X.25 PLP (Rose) AX25, Netrom, Rose の各プロトコルについては AX25-HOWTO に詳しく説明されています。これらのプロトコルはパケッ ト通信の実験で世界中のアマチュア無線のオペレータに使われています。 これらのプロトコルのほとんどは Jonathon Naylor jsn@cs.not.ac.uk が実装 しました。 8.11. SAMBA - `NetBEUI', `NetBios', `CIFS' のサポート SAMBA は Session Menagement Block プロトコルを実装したものです。Samba を使えば、Microsoft やその他のシステムから Linux のディスクをマウント したり、プリンタを使うことが可能になります。 SAMBA とその設定方法は SMB-HOWTO で詳しく解説されてい ます。 8.12. STRIP (Starmode Radio IP) 機能 STRIP のデバイス名は `st0', `st1' になります。 カーネルのコンパイルオプション: Network device support ---> [*] Network device support .... [*] Radio network interfaces < > STRIP (Metricom starmode radio IP) STRIP プロトコルはスタンフォード大学の MosquitoNet Project と呼ばれる研究プロ ジェクトが開発した、 Metricom 社の無線モデム用のプロトコルです。 Metricom 社の無線装置は、シリアルポートに接続し、スペクトル拡散法を 使って 100Kbps での通信を可能にしています。Metricom の無線装置について の情報については Metricom Web Server をご覧 ください。 現在のところ、標準のネットワークツールやユーティリティは STRIP ドライ バをサポートしていないので、MosquitoNet の WWW サーバから必要な改造版 のツールをダウンロードする必要があります。どのソフトウェアが必要かにつ いては MosquitoNet STRIP Page を見てください。 設定方法を簡単に述べると、改造された slattach プログラムを使ってシリア ルの tty デバイスを STRIP 用に設定して、`st[0-9]' デバイスをイーサネッ トのように設定します。ただし一つ重要な違いがあります。これは STRIP で は ARP プロトコルを技術的な理由から サポートしていないことで、サブネッ トのホストごとに ARP エントリを手動で設定してやる必要があります。でも これはそれほど大変な仕事でないことが分るでしょう。 8.13. トークンリング トークンリングのデバイス名は `tr0' や `tr1' のようになります。トークン リングは IBM の提案した LAN プロトコルで、同時に 1つの LAN 上のノード しかデータの転送をしないようにして、通信のコリジョン (衝突)を防ぐよう になっています。このために使われるのが「トークン」で、この「トークン」 がそれぞれのノードを順に回り、「トークン」を持ったノードのみがデータを 送ることができます。データを送り終ればトークンを次のノードに送ります。 このように、トークンが全てのノードを順に巡るので「トークンリング」とい う名前になっています。 カーネルのコンパイルオプション: Network device support ---> [*] Network device support .... [*] Token Ring driver support < > IBM Tropic chipset based adaptor support トークンリングの設定はネットワークデバイスの名称が異なるだけでイーサ ネットの場合と同じです。 8.14. X.25 X.25 は回路ベースのパケットスイッチングプロトコルで、C.C.I.T.T. (世界 中のほとんどの地域のテレコミュニケーション会社の標準規格を作る団体)が 定義しています。X.25 と LAPB プロトコルの実装は現在進行中で、最新の 2.1.* カーネルに進行中の作業が組み込まれています。 Linux における X.25 の実装については Jonathon Naylor jsn@cs.nott.ac.uk が開発のリーダーになっており、専用のメーリングリストもあります。メーリ ングリストに参加するには、本文に "subscribe linux-x25" とだけ書いたメ ールを majordomo@vger.rutgers.edu 宛に送ってください。 設定用ツールも初期バージョンが Jonathon の ftp サイト ftp.cs.nott.ac.uk から入手できます。 8.15. WaveLan カード Wavelan のデバイス名は `eth0', `eth1' のようになります。 カーネルのコンパイルオプション: Network device support ---> [*] Network device support .... [*] Radio network interfaces .... <*> WaveLAN support WaveLAN カードはスペクトラム拡散法(spread spectrum)を使った無線 LAN カ ードで、カードそのものはイーサネットと同じように扱え、イーサネットカー ドと同じ方法で設定できます。 WaveLAN カードについての情報は Wavelan.com から入手できます。 9. ケーブルと接続方法 ハンダごてを握ったことがある人ならば、2 台の Linux マシンを接続するた めのケーブルも簡単に自作できます。以下に示す結線図が参考になるでしょ う。 9.1. シリアル用クロスケーブル 全てのクロスケーブルが同じわけではありません。多くのクロスケーブルは、 適切な信号が来ているとコンピュータに思わせて、送信と受信のデータを入れ 替えるような細工をしています。この種のケーブルでも動作しますが、この場 合はハードウェアフロー制御よりも効率が悪い(XON/XOFF を使った) ソフト ウェアフロー制御を使わなければいけません。以下に示す配線なら 2 台のマ シンの間で最適な信号のやりとりができ、ハードウェア(RTS/CTS を使った)フ ロー制御も可能です。 ピン名称 ピン ピン Tx Data 2 ----------------------------- 3 Rx Data 3 ----------------------------- 2 RTS 4 ----------------------------- 5 CTS 5 ----------------------------- 4 Ground 7 ----------------------------- 7 DTR 20 -\--------------------------- 8 DSR 6 -/ RLSD/DCD 8 ---------------------------/- 20 \- 6 9.2. パラレルポート用ケーブル(PLIP ケーブル) PLIP プロトコルを使って 2 台のマシンを接続する場合、以下に示すケーブル を使えば、どんな種類のパラレルポートでも接続できます。 ピン名称 ピン ピン STROBE 1* D0->ERROR 2 ----------- 15 D1->SLCT 3 ----------- 13 D2->PAPOUT 4 ----------- 12 D3->ACK 5 ----------- 10 D4->BUSY 6 ----------- 11 D5 7* D6 8* D7 9* ACK->D3 10 ----------- 5 BUSY->D4 11 ----------- 6 PAPOUT->D2 12 ----------- 4 SLCT->D1 13 ----------- 3 FEED 14* ERROR->D0 15 ----------- 2 INIT 16* SLCTIN 17* GROUND 25 ----------- 25 注意: o アスタリスク(*)が記されているピンは接続しないこと。 o 18,19,20,21,22,23,24 はアースです。 o お使いのケーブルが金属シールドされている場合、シールドは DB-25 コネ クタと一端でのみ接続してください。 警告: 配線を間違えた PLIP ケーブルを使うとコントロールカードが破壊 されるかもしれません。 全ての配線をダブルチェックして、将来の不要な 手間や頭痛のタネが無くなるように、十分注意して配線してください。 長い PLIP ケーブルでも使えるかもしれませんが、これはできるだけ避けるべ きです。仕様で許されているケーブルの長さは 1 メートル程度です。長い PLIP ケーブルを使う時には特に注意してください。というのも、雷や電線、 無線の発信器のような強力な電磁波の発生源がコントローラと干渉し、これを 壊してしまうことさえあるからです。遠く離れた 2 台のコンピュータを接続 する必要が本当にある場合は、10base2 用のイーサネットカードを使い、同軸 ケーブルで接続すべきでしょう。 9.3. 10base2 (細い同軸の)イーサネットケーブル 10base2 は直径約 5 mm の 52Ωの同軸ケーブルを使うイーサネットケーブル の規格です。10base2 でマシンを接続する場合、いくつか覚えておかなければ ならない重要な決まりがあります。まず第一に、ケーブルの 両端にターミネ ータを付けること。52Ωの抵抗値をもつターミネータを付ければ、ケーブルの 端に達した信号は反射されずに吸収されます。ターミネータを付けないとイー サネットは不安定になり、全く使えなくなることもあります。通常、コンピュ ータを接続する部分には「T 型」のコネクタを使うので、配線は以下のような 形になります: |==========T=============T=============T==========T==========| | | | | | | | | ----- ----- ----- ----- | | | | | | | | ----- ----- ----- ----- この図のうち、両端にある `|' はターミネータで、 `======'は両端に BNC プラグを付けた同軸ケーブル、`T' は「T 型コネクタ」を表します。「T 型コ ネクタ」間の同軸ケーブルと PC のイーサネットカードとの接続の長さは可能 な限り短くしましよう。理想的には「T 型コネクタ」から直接イーサネットに 接続する形が最善です。 9.4. ツイストペア(Twisted Pair)イーサネットケーブル 2 枚のツイストペアタイプのイーサネットカードを接続したいだけなら、ハブ 無しに直結しても構いません。そのためのケーブルの配線は Ethernet-HOWTO に書いてあります。 10. この文書で使われている用語の解説 以下に、この文書に現われる重要な用語について簡単に説明します。 ARP Address Resolution Protocol の頭文字を取った語で、ネットワーク上 のマシンが IP アドレスをハードウェアアドレス(MAC アドレス)と対応 付けるために使うプロトコルです。 ATM Asynchronous Transfer Mode の頭文字を取った語です。 ATM ネットワ ークでは、データを一定サイズのパケットにまとめて 2 点間で効率的 に転送できるようになっています。ATM は回路切替え型のパケットネッ トワーク技術です。 クライアント(client) ユーザがいる側のシステムで使うソフトウェアを指します。これには例 外もあり、X11 ウィンドウシステムではユーザ側にサーバがあり、クラ イアントがリモートで動きます。クライアントとは、サーバが提供する サービスを受けるプログラムやシステムです。slip や ppp といった一 対一接続の場合、電話をかけるなど接続を開始する側をクライアントと 呼び、呼び出される側をサーバと呼びます。 データグラム(datagram) データグラムとは、あるデータのかたまりに、宛先/送り元アドレスな どが含まれたヘッダの付いたもので、 IP ネットワークで転送されるデ ータの基本単位です。「パケット」と呼ばれることもあります。 DLCI DLCI とはデータ接続識別子 (Data Link Connection Identifier)のこ とで、フレームリレーネットワークを経由した仮想 2 点間接続を区別 するために使われます。DLCI は通常フレームリレーネットワークのプ ロバイダが割り当てます。 フレームリレー(Frame Relay) フレームリレーとは、散発的に多量のデータをやりとりする必要のある ネットワークに適した技術です。多数のフレームリレーのユーザーが同 じネットワーク容量を共有するのでフレームリレーのコストは安くて済 み、各ユーザは少しずつ異なるタイミングでデータをやりとりします。 ハードウェアアドレス(hardware address) ハードウェアアドレスとはネットワークの MAC 層(Media ACcess layer)でホストを識別するためのアドレスです。この例にはイーサネッ トアドレスと AX.25 アドレスがあります。 ISDN ISDN は Integrated Services Dedicated Network の頭文字です。 ISDN は通信会社が音声やデータを各家庭に運ぶための標準規格です。 技術的には、ISDN は回路切替え型のデータネットワークです。 ISP Internet Service Provider の頭文字です。ISP とはインターネットへ の接続を提供する会社や組織です。 IP アドレス(IP address) IP アドレスとはネットワーク上の TCP/IP ホストを識別するための番 号です。 IP アドレスは 4 バイト長で、通常「ドット区切りの 10 進 表記」、すなわち各バイトを 10 進数で表記し、バイト間を `.' で区 切ったかたちで記述されます。 最大セグメントサイズ(MSS) 最大セグメントサイズ(MSS, Maximum Segment Size)とは、一時に送信 できるデータの最大量です。データが細分化されないためには MSS は (MTU - IP ヘッダ) バイト以上が必要です。 最大転送単位(MTU) 最大転送単位(MTU, Maximum Transmission Unit)とは、より小さな断片 に分割せずに IP インターフェイスから送信できる最大のデータグラム の大きさを示すパラメータです。MTU は、分割されたくないデータグラ ムの大きさよりも大きくしなければいけません。ただし、この設定はロ ーカルな断片化を避けるためのもので、経路上のどこかでより小さな MTU が設定されていれば、そこで分割されるかもしれません。よく使わ れる値としては、イーサネットインターフェイスでは 1500 バイ ト、SLIP インターフェイスでは 576 バイトです。 経路(route) 経路とは、目的地に達するまでにデータグラムが通過していく通り道で す。 サーバ(server) 通常、ユーザから遠い側にあるソフトウェアかシステムを指します。サ ーバはなんらかのサービスをクライアントに提供します。サーバの例と しては、 ftp や NFS(Networked File System), DNS(Domain Name Server) 等があります。slip や ppp といった一対一(peer to peer)シ ステムの場合、サーバは電話で呼び出される側を指し、クライアントは 呼び出す側を指します。 ウィンドウ(window) ウィンドウ(window)とは、受信端が一度に受けとれるデータ量の最大値 です。 11. ISP 用の Linux? Linux を ISP に使いたいのであれば、 Linux ISP homepage を見ることをお勧めします。このページ には必要な情報へのポインタが豊富に登録されています。 12. 謝辞 本文書に貢献してくださった以下の方々に感謝します(順不同です): Terry Dawson, Axel Boldt, Arnt Gulbrandsen, Gary Allpike, Cees de Groot, Alan Cox, Jonathon Naylor, Claes Ensson, Ron Nessim, John Minack, Jean-Pierre Cocatrix, Erez Strauss 13. 著作権 著作権に関する情報 The NET-3-HOWTO, information on how to install and configure networking support for Linux. Copyright (c) 1997 Terry Dawson, 1998 Alessandro Rubini, 1999 {POET} - LinuxPorts This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 14. 日本語版について 日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見 は JF プロジェクト 宛に連絡してください。 改訂履歴を以下に示します。 v1.5j, 1 Jan 2000 翻訳: 藤原 輝嘉 訳語統一・校正: o 佐藤 亮一 o 佐野 武俊 o 武井 伸光 o 中野 武雄 v.1.5j の翻訳にあたっては、こじまみつひろさんによる Linux NET-3-HOWTO の翻訳(1997/07/07 版)から多くの部分を流用させていた だきました。深く感謝します。