Linux NET-3-HOWTO, Linux Networking. Terry Dawson, VK2KTJ, terry@perf.no.itg.telstra.com.au v1.0, 22 February 1997 こじまみつひろ isle@st.rim.or.jp(1997/07/07) Linux オペレーティングシステムのカーネルには、ゼロから書きあげられた ネットワークコードが組みこまれています。最近のカーネルに実装されている TCP/IP の性能は、既存の最高のシステムにも比肩しうる結果を示していま す。この文書は Linux のネットワーク用のソフトウェアのインストールと設 定法、さらに関連するツール類について解説します。 ______________________________________________________________________ 目次 1. 前のバージョンからの変更点 2. はじめに 2.1 フィードバック 3. この HOWTO 文書の使い方(NET-3-HOWTO-HOWTO ?) 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.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 Network ファイアウォール 5.10.7 その他のコメント 6. それぞれのネットワーク技術についての情報 6.1 ARCNet 6.2 Appletalk (AF_APPLETALK) 6.2.1 Appletalk 用ソフトウェアの設定 6.2.2 Linux のファイルシステムを Appletalk 経由で提供するには。 6.2.3 AppleTalk 経由で Linux のプリンタの共有 6.2.4 appletalk ソフトウェアの起動 6.2.5 appletalk ソフトウェアのテスト 6.2.6 netatalk の注意点 6.2.7 更なる情報源 6.3 ATM 6.4 AX25 (AF_AX25) 6.5 DECNet 6.6 EQL - multiple line traffic equaliser EQL - 複数回線のトラフィック・イコライザー 6.7 Ethernet 6.8 FDDI 6.9 フレームリレー 6.10 IP アカウンティング 6.11 IP エイリアス 6.12 IP ファイアウォール 6.13 IPX (AF_IPX) 6.14 IPv6 6.15 ISDN 6.16 IP Masquerade 6.17 IP 透過プロキシ(IP Transparent Proxy) 6.18 モバイル IP(Mobile IP) 6.19 Multicast 6.20 NetRom (AF_NETROM) 6.21 PLIP 6.21.1 PLIP ケーブルの結線図 6.22 PPP 6.22.1 pppdを使ってインターネットと恒久的な接続をするには 6.23 Rose プロトコル (AF_ROSE) 6.24 SAMBA - `NetBEUI', `NetBios' 機能 6.25 SLIP クライアント 6.25.1 dip 6.25.2 slattach 6.25.3 いつ、どちらを使うべきか? 6.25.4 あらかじめ決まった IP アドレスを使う SLIP サーバ 6.25.5 接続時に IP アドレスを割りあてるタイプのサーバ 6.25.6 DIP の使いかた 6.25.7 専用線と slattach を使って恒久的な SLIP 接続を行うには。 6.26 SLIP サーバ 6.26.1 sliplogin を使った SLIP サーバの設定 6.26.1.1 sliplogin の入手先 6.26.1.2 SLIP ホスト用の /etc/passwd 6.26.1.3 /etc/slip.hosts の設定 6.26.1.4 /etc/slip.login ファイルの設定 6.26.1.5 /etc/slip.logout ファイルの設定 6.26.1.6 /etc/slip.ttyファイル 6.26.2 dip を使った SLIP サーバ 6.26.2.1 /etc/diphostsの設定 6.26.3 dSLIPパッケージを使ったSLIPサーバ 6.27 STRIP (Starmode Radio IP) 機能 6.28 Token Ring 6.29 X.25 6.30 WaveLan Card 7. ケーブルと接続方法 7.1 シリアル・ヌル・モデムケーブル 7.2 パラレルポート用ケーブル(PLIP ケーブル) 7.3 10base2 (thin coax) イーサネットケーブル 7.4 ツイストペア(Twisted Pair)イーサネットケーブル 8. この文書で使っている用語集 9. ISP 用の Linux ? 10. 謝辞(Acknowledgements) 11. Copyright. ______________________________________________________________________ 1. 前のバージョンからの変更点 追加: いっぱい。 修正/更新: 全て。 2. はじめに 元々の NET-FAQ は、Linux Documentation Project が始まる前に、しばしば 質問されていた Linux のネットワークに関する疑問に答えるために Matt Welsh と私が書きました。この NET-FAQ が扱っていたのは、開発最初期の ネットワーク機能についてでした。最初の LDP HOWTO ドキュメントの一つと してまとめられた NET-2-HOWTO が NET-FAQ に取って代わり、Linux カーネル の NET-2 ないし NET-3 と呼ばれるネットワーク機能について解説していまし た。この文書(NET3-HOWTO)は NET-2-HOWTO に取って代わるもので、最近のカ ーネルの NET-3 ネットワークコードについてのみ扱うことにしました。 話題をあれこれと取りこみすぎたため、この文書の以前のバージョン (NET-2/3-HOWTO)はかなり肥大化していました。そのため、ネットワーク機能 のうち、特定の領域のみを扱う HOWTO がいくつも書かれてきました。この文 書では、そのような HOWTO が書かれている話題については、その HOWTO への ポインタを示し、主に他の文書が扱っていない分野の話題を扱うことを意図し ています。 2.1. フィードバック 各種のフィードバック、特に情報の追加は歓迎します。それらは直接私(email )までメールしてください。日本 語訳に関わることは訳者 へお願いします。 3. この HOWTO 文書の使い方(NET-3-HOWTO-HOWTO ?) この文書の形式は以前のバージョンとは大きく異なっています。各章を整理し て、4 章で Linux のネットワーク機能についての概論的な解説をし、5 章で ネットワークについての一般的な知識を解説し、6 章でそれぞれのネットワー ク技術ごとに解説し、7 章で必要なケーブル類を説明しています。 4 章の概 論的な部分は興味が無ければ飛ばしてくださって結構です。5 章のネットワー クに関する一般的な知識は、6 章のネットワーク機能ごとの技術的な話題を理 解するために必要となります。 この HOWTO の読み方を簡単に説明します。 概論的な話題の章を読む この HOWTO では、前半で概論的な話題を扱っています。これらの章で は、後半に出てくるそれぞれの技術についての詳細を全て、あるいはほ ぼ全て説明していますので、後半の話題の理解するのに役立つことで しょう。 使っているネットワークについて考える 自分の使っているネットワークがどうなっているか、これからどうして いくべきか、どのようなハードウェアやネットワーク技術が必要か、き ちんと考えてみましょう。 必要に応じてそれぞれのネットワーク技術の詳細についての章を読む 何が必要かが分かれば、どのような情報が必要かもおのずと分かりま す。この文書の後半の各章は、それぞれある特定の技術の詳細について 説明しています。 ネットワークを設定してみる 実際にネットワークを設定してみて、どのような問題が起きたかを詳細 に記録しましょう。 必要ならばさらなる情報を探しましょう この文書では解決できない問題が生じたら、どこで質問すればよいか、 またどこにバグレポートすべきかを説明した章を読んでください。 楽しんでね! ネットワークは本質的に面白いものです。楽しんでくださいね。 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 プロトコルもサポートしました。 Linux 以 外の OS で AX.25/NetRom プロトコルを組みこんだ OS は存在しないため、こ の機能も Linux の特色として重要な役割を果しています。 もちろん、ここで紹介した人以外にも何百人もの人々が Linux のネットワー クソフトウェアを開発する中で重要な役割を果してきました。彼らの何人かは 後にそれぞれの技術の詳細について触れる際に紹介することになるでしょう。 その他、モジュール化や各種のドライバの開発、バグの修正、新しい機能の提 案、テストレポート、精神的な支援、をしてきた多数の人々がいます。その全 ての人が、「自分は自分の役割を果し、自分に可能なことをしてきただけ」、 と言うことでしょう。Linux カーネルのネットワークコードは Linux 風のア ナーキーな開発がどのような結果をもたらすかの優れた実例です。今までの話 に驚かなかった人でも、これからの発展に驚くことは確実です。開発は現在も 続いているのですから。 4.2. Linux のネットワーク機能についての情報源 Linux のネットワーク機能についての情報はさまざまなところから入手できま す。 現在の Linux カーネルのネットワークコードのメンテナンスをしている Alan Cox はネットワーク機能の現状と今後について紹介したページを公開していま す。 www.uk.linux.org もう一つお勧めの情報源は Olaf Kirch が書いた Network Administrators Guide です。この文書は Linux Documentatation Project の成果の一つで、 Network Administrators Guide HTML version を使 えば HTML 版を読むことができます。その他、さまざまな形式に変換したバー ジョンを sunsite.unc.edu LDP ftp archive から入手でき ます。 Olaf の著書はわかりやすく書かれており、Linux におけるネットワー ク関係の設定の概要についての高度な情報が提供されています。 Linux のネットワーク機能について論じるニュースグループもあります。 comp.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-intro.doc) この文書はテキスト版 あるいは postscript 版 を 入手可能です。 TCP/IP の管理(tcp-ip-admin.doc) この文書もテキスト版 と postscript 版 があります。 TCP/IP ネットワークについて、より詳細な情報を知りたい場合は、次の書籍 がお勧めです。 "Internetworking with TCP/IP" by Douglas E. Comer ISBN 0-13-474321-0 Prentice Hall publications. Unix 互換の環境でネットワーク機能を使ったアプリケーションを書くために は以下の書籍が参考になるでしょう。 "Unix Network Programming" by W. Richard Stevens ISBN 0-13-949876-1 Prentice Hall publications. TCP/IP に関するニュースグループもあります(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. 最新のカーネルソース 多分、現在お使いのカーネルにはネットワークに必要な機能やネットワークカ ード用のドライバが組みこまれていないでしょうから、カーネルのソースを入 手して、適切なオプションを指定し、カーネルを再構築する必要があるでしょ う。 最新のカーネルソースは ftp.funet.fi から入手できます。 通常、カーネルのソースは /usr/src/linux ディレクトリに展開します。パッ チのあて方やカーネルの構築の仕方については Kernel-HOWTO を読んでください。カーネルモジュールについてはModule-HOWTO を御覧ください。 特別に言及しない限り、安定版のカーネルを使うことをお勧めします(バー ジョンナンバーの 2 つめの数字が偶数のバージョンです)。開発版のカーネ ル(2 つめの数字が奇数のバージョン)は内部構造が大きく変っていたり、その 他さまざまな変更が行なわれているため、今まで動いていたソフトウェアがう まく動かないかも知れません。自分でそれらの問題を解決したり、それらのソ フトウェアに潜む問題を解決できない限り、開発版のカーネルは使わないほう がいいでしょう。 5.1.2. 最新のネットワークツール ネットワークツールとは、Linux のネットワークデバイスを設定するためのプ ログラムです。これらのプログラムを用いてネットワークデバイスにアドレス を割り当てたり、経路情報を設定したりします。 最近の Linux の配布パッケージ(Slackware や Red Hat といったディストリ ビューション)には、たいてい、ネットワークツールも含まれています。しか し、それらの配布パッケージを使っていてもネットワークツールをインストー ルしていない場合、まずそれらをインストールするところから始めましょう。 Slackware や Red Hat といった配布パッケージを使わずに構築したシステム の場合、ネットワークツールはソースコードを入手してコンパイルする必要が ありますが、これはそう難しい作業ではありません。 ネットワークツールは Bernd Eckenfels がメンテナンスしてお り、ftp.inka.de から入手可能 です。ここは ftp.linux.uk.org にミ ラーされています。 お使いのカーネルのバージョンにあったバージョンを入手して、インストール の際は付属の文書の指示に従ってください。 この文書を執筆している時点での最新版のネットワークツールを、コンパイル してインストールするには以下のようにします。 # # cd /usr/src # tar xvfz net-tools-1.32-alpha.tar.gz # cd net-tools-1.32-alpha # make config # make # make install # 加えて、ファイアウォールを設定したり、IP masquerade 機能を使いたい場合 は、ipfwadm コマンドも必要です。ipfwadm の最新版は ftp.xos.nl から入手できます。このコマンドに もいくつかのバージョンがあり、カーネルのバージョンに合ったものを入手し てください。 この文書の執筆時点での最新版をインストールするには以下のようにします。 # # cd /usr/src # tar xvfz ipfwadm-2.3.0.tar.gz # cd ipfwadm-2.3.0 # make # make install # 5.1.3. 各種ネットワーク用アプリケーションプログラム ネットワークアプリケーションプログラムとは、telnet や ftp などと、それ らのサーバプログラムのことです。これらの大部分は David Holland がメンテナンスしており、ftp.uk.linux.org から入手可能です。 執筆時点での最新版をインストールするには以下のようにします。 # # cd /usr/src # tar xvfz /pub/net/NetKit-B-0.08.tar.gz # cd NetKit-B-0.08 # more README # vi MCONFIG # make # make install # 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 ----------------- --------------- ホストに付けられたアドレスのうち、ネットマスクとビットごとに論理和を 取ったものがネットワークアドレスになります。すなわち、ネットワークアド レスは、それぞれのネットワークに割りあてられたアドレスの最小のものにな ります。つまり、ネットワークアドレスはアドレスのホスト部を全て 0 にし たものです。 ネットワークに接続されているホストは自分自身のアドレスに送られたパケッ トを受けとりますが、それ以外にも「ブロードキャストアドレス」という特別 に設定されたアドレスに送られたパケットも受けとります。ブロードキャスト アドレスは、ネットワーク上にいる全てのホストにパケットを送りたい場合に 利用する特別のアドレスです。経路情報や各種の警告メッセージなどはブロー ドキャストアドレスへ送出され、ネットワーク上にいる全てのホストが同時に 受けとることができます。ブロードキャストアドレスはそのネットワークで利 用可能な最大の IP アドレスにすることが慣例になっています。例えば、上記 の例ではブロードキャストアドレスは 192.168.110.255 になっています。何 らかの理由からネットワークアドレスとブロードキャストアドレスを同じにし ているサイトがあるかも知れません。実用上はどちらにしておいても大差はあ りませんが、ネットワーク上の全てのホストは同じブロードキャストアドレス を使わなければなりません。 IP プロトコルの開発の早期の段階で、何らかの管理上の理由から、いくつか のIP 番号のグループがネットワークを構築し、これらの番号がいわゆる「ク ラス」へと発展しました。IP アドレスにおけるクラスはそのネットワークで 使用できるホストの数を決定します。ネットワークのクラスは以下のように分 けられています。 ---------------------------------------------------------- | Network | Netmask | Network Addresses | | Class | | | ---------------------------------------------------------- | 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 | |Multicast| 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では以下のアドレスがプライベートネット ワーク用に割りあてられています。 ----------------------------------------------------------- | プライベートネットワーク用のアドレス | ----------------------------------------------------------- | Network | Netmask | Network Addresses | | Class | | | ----------------------------------------------------------- | 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 にはいくつかの種類があり、この違いが配布パッケージやマシン ごとのもっとも大きな違いになっています。 通常、/etc/inittab ファイルには以下のような行があります。 si::sysinit:/etc/init.d/boot この行で実際の起動方法を管理するシェルスクリプトを指定しています。この ファイルは MS-DOS の AUTOEXEC.BAT と同等の機能を果します。 通常、いくつものスクリプトが boot スクリプトから呼びだされ、ネットワー ク用の設定スクリプトも boot スクリプトから呼びだされます。 以下の表にシステムごとの違いをまとめました。 ------------------------------------------------------------------------------- Distrib. |ネットワークの初期化 |サーバの起動 ------------------------------------------------------------------------------- Debian |/etc/init.d/network |/etc/init.d/netbase | |/etc/init.d/netstd_init | |/etc/init.d/netstd_nfs | |/etc/init.d/netstd_misc ------------------------------------------------------------------------------- Slackware|/etc/rc.d/rc.inet1 |/etc/rc.d/rc.inet2 ------------------------------------------------------------------------------- RedHat |/etc/sysconfig/network-scripts/ifup-|/etc/rc.d/init.d/network ------------------------------------------------------------------------------- 最近の配布パッケージには、一般的なネットワークインターフェイスを設定す るためのプログラムはあらかじめ含まれています。次に示すような設定用のプ ログラムがある場合、手動で設定するまえに、これらを使って必要な設定が可 能かチェックしてみてください。 ----------------------------------------- Distrib | ネットワーク設定用ツール ----------------------------------------- RedHat | /sbin/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 は、通常、以下のような書式で使います。 # ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up この例では、``eth0''イーサネットインターフェイスを `192.168.0.1' とい う IP アドレスと `255.255.255.0' というネットマスクで設定し、`up' コマ ンドでインターフェイスを使用可能にしています。 カーネルはインターフェイスのデフォルトの設定値を知っています。上記の例 でインターフェイスにネットワークアドレスとブロードキャストアドレスを設 定しても構いませんが、例のように、それらを指定しなければ自動的にカーネ ルが IP アドレスのクラスに従って適切な値を設定してくれます。上記の例で は、このインターフェイスに class-C のネットワークアドレスが割りあてら れたことをカーネルが認識し、ネットワークアドレスとして `192.168.0.0' を、ブロードキャストアドレスとして `192.168.0.255 を自動的に割りあてま す。 ifconfigコマンドで指定できるオプションはいろいろあります。もっとも重要 なものを列挙すると、 up このオプションでインターフェイスを利用可能(アクティブ)にします。 down このオプションではインターフェイスを使用停止にします。 [-]arp このオプションで ARP(Address Resolution Protocol)を使うかどうか の指定ができます。 [-]allmulti このオプションで promiscuous モードの有無を指定しま す。promiscuous モードとは、そのデバイス宛ではないパケットも受け つけるモードです。 tcpdump などのパケット snooper を使う場合はこ の指定が必要です。 mtu N このパラメータはデバイスの MTU(Maximum Transfer Unit)を設定しま す。 netmask addr このパラメータはデバイスが接続しているネットワークのネットワーク マスクを設定します。 irq addr このパラメータは特定の種類のハードウェアにしか使えませんが、デバ イスのハードウェアの IRQ を設定します。 [-]broadcast [addr] このパラメータで、指定したブロードキャストアドレス宛のデータグラ ムを受け取るかどうかを設定できます。 [-]pointopoint [addr] このパラメータは slip や ppp などの一対一接続の場合の接続先アド レスの指定です。 hw このパラメータは特定の種類のネットワークデバイスのハードウェアア ドレスを設定します。Ethernet の場合はそれほど役に立ちません が、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 その他の組織 Country Designator 国を示す 2 文字のコード これらのトップレベル・ドメインはそれぞれサブドメインを持っています。国 を示す 2 文字のコードがトップレベル・ドメインになっている場合、サブド メインとしてcom や edu、 gov、 mil、 org といった組織の種別を示すドメ インが来ます。例えば com.au と gov.au はオーストラリアの営利組織と政府 機関です。歴史的な理由から、トップレベル・ドメインとして国名を示すコー ドの無いドメインは米国の組織に限られています。もっとも、米国にも .us という国名を示すコードはあります。 次のレベルはたいていその組織や団体の名称になります。それより細かいレベ ルのドメインはそれぞれの組織によって異なりますが、よくあるのは部門別に サブドメインを設定する方法です。しかし、このレベル以下はどのようなサブ ドメインを作ることも可能なので、それぞれの組織ごとに、ネットワークの管 理者がふさわしい分け方を設定しています。 もっとも左に位置する名前が、たいていの場合、そのマシンに付けられた独自 の名前で、ホスト名と呼ばれます。ホスト名よりも右側の部分をドメイン名と 呼び、両者を合せた完全な名前を「完全に記述された名前」 Fully Qualified Domain Name(FQDN) と呼びます。 私が使っている電子メールのホストを例に取ると、FQDN は `perf.no.itg.telstra.com.au' です。この場合、ホスト名は `perf' でドメ イン名は no.itg.telstra.com.au です。ドメイン名のうち、トップドメイン 名は私のいる国、オーストラリアを示す 2 文字のコード(au)になっており、 その次のレベルは営利組織を示す .com です。会社の名前は `telestra' で、 それ以下のサブドメイン名の構造は組織の構造を反映したものになっており、 ここに示した例では、私のマシンはインフォメーション・テクノロジー・グル ープ (itg)のネットワーク・オペレーション(no)部門に属しています。 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.6. ループバックインターフェイスの設定 ループバックインターフェイスとは、自分自身に接続するために用意された特 別な種類のインターフェイスです。このようなインターフェイスを用意してい るのにはいくつかの理由があります。例えば、実際のネットワークに接続せず にネットワーク用のソフトウェアをテストするなどの目的に使えます。慣例と して、ループバックインターフェイスには `127.0.0.1 のアドレスが使われま す。ですから、どんなマシンを使っていようとも telnet で 127.0.0.1 に接 続すれば、自分自身に接続することになります。 ループバックインターフェイスの設定は簡単で、次のようにするだけです。 # ifconfig lo 127.0.0.1 # route add -host 127.0.0.1 lo route コマンドについては次節で説明します。 5.7. 経路制御(ルーティング) 経路制御は大きな話題で、それだけで大部の本を書くことができます。一部の 人を別にすれば、ほとんどの人はごく単純な経路制御が必要なだけと思います ので、以下ではごく基本的な話題についてのみ扱うことにします。より詳細な 情報が必要ならば、この文書の最初に示した各種の文献にあたってください。 まず定義から始めましょう。IP 経路制御とは何でしょう? 以下に示すもの が、私の使っている定義です。 IP 経路制御とは複数のネットワークに接続しているホストが受け とった IP データグラムをどのネットワークに送るかを決めること です。 例を使って示した方がいいでしょう。よくあるルータを想像してください。こ のルータには複数のワークステーションが接続された Ethenet が接続され、 PPP を使ってインターネットに接続したり、別のオフィスへ PPP で接続する かも知れません。このルータがデータグラムを受けとった際、そのデータグラ ムを次にどのポートへ送り出すかを決めるのが IP 経路制御です。ルータでは ない普通のホストにも経路制御が必要です。なぜなら、ネットワークに接続し ている全てのホストは上述した自分自身を指すループバックインターフェイス とネットワーク上にある他のマシンと接続するためのインターフェイス(それ は ethernet だったり、シリアルポートを使った PPP や SLIP だったりしま す)の 2 つのインターフェイスを持っているため、どちらのインターフェイス にパケットを送り出すか決める必要があるからです。 さて、実際の経路制御はどのように行なわれるのでしょう?それぞれのホスト は経路情報を登録した経路表(ルーティング・テーブル)と呼ばれるリストを 持っています。この表の各行には通常 3 つの欄があります。最初の欄は目的 地となるアドレス、2 つめはデータグラムが送られるべきインターフェイス 名、3 つめは必須ではありませんが、次のネットワークへデータグラムを送る ホストの IP アドレスです。この欄をゲートウェイフィールドと言いま す。Linux では /proc/net/route に経路表が登録されているため、以下のコ マンドで経路表を見ることができます。 # cat /proc/net/route 経路制御の方法自体はごく簡単です。データグラムを受けとれば、その目的地 アドレス(誰宛に送られたのか)をチェックして、経路表の各行と比較します。 そのアドレスにもっともよく一致する行が選択され、データグラムはその行が 指定するインターフェイスへ送られます。 その行にゲートウェイフィールドが登録されていれば、データグラムは指定さ れたインターフェイスを経由してそのホストに送られます。ゲートウェイフィ ールドが無い場合、目的地アドレスはその行が指定したインターフェイスが接 続しているネットワーク上にあるものと見なされます。 この経路表を操作するには `route' という専用のコマンドを使います。この コマンドは引数をカーネルのシステムコールに変換して、カーネルの経路表に 追加したり、削除したり、変更したりします。 簡単な例を示します。イーサネットのネットワークを使っていると想像してく ださい。ネットワークはクラス C で、ネットワークアドレスは 192.168.1.0 です。あなたのマシンの IP アドレスは 192.168.1.10 、インターネットに接 続しているルータのアドレスは 192.168.1.1 になっています。 インターフェイスを設定するための最初のステップは上述した通り、 `ifconfig' です。 # ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up 次に、目的地アドレスとして 192.168.1.* に一致するデータグラムが届け ば、イーサネットデバイスに送るような経路表をカーネルに登録する必要があ ります。そのためには以下のコマンドを使います。 # route add -net 192.168.0.0 netmask 255.255.255.0 eth0 `-net' という引数に注意してください。この指定で route プログラムはこの アドレスがネットワークであると認識します。ここで host を指定すると、一 つの IP アドレスのみを指定した経路になります。 この経路を登録することで、あなたのいる ethernet セグメント上にいる全て のホストと IP 接続できます。しかし、同じセグメント上にいないホストの場 合どうするのでしょう? 起りうる全てのネットワークへの経路を登録することは不可能ですので、特別 の仕組みが用意されています。この仕組みを「既定の経路(デフォルトルー ト)」と呼びます。「既定の経路」は全ての目的地アドレスにマッチします が、優先順位が低く、他にマッチする行があった場合、そちらの方が優先され ることになります。「既定の経路」の考え方は単純で、「その他全てをここに 送る」ということです。今考えているネットワークでは以下のように「既定の 経路」を設定します。 # route add default gw 192.168.1.1 eth0 `gw' の指定で route コマンドはその次の引数がゲートウェイかルータの IP アドレスかホスト名であると認識します。このエントリに一致する全てのデー タグラムはこのアドレスに送られ、以降の経路制御はこのゲートウェイかルー タが考えることになります。 以上をまとめると次のようになります。 # ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up # route add -net 192.168.0.0 netmask 255.255.255.0 eth0 # route add default gw 192.168.1.1 eth0 ネットワークを設定している `rc' ファイルを詳細に調べると少なくともその 一つにこれとよく似た設定が見つかるはずです。これはごく一般的な設定で す。 次に多少複雑な経路の設定を見てみましょう。先に考えたルータを設定してい ると想像してください。このルータは PPP でインターネットに接続し、複数 の lan セグメントが接続されています。具体的には 3 つの ethenet セグメ ントと 1 つの PPP 接続があると考えましょう。その場合、経路設定は以下の ようになるでしょう。 # route add 192.168.1.0 netmask 255.255.255.0 eth0 # route add 192.168.2.0 netmask 255.255.255.0 eth1 # route add 192.168.3.0 netmask 255.255.255.0 eth2 # route add default ppp0 このルータのつながったネットワークを使っているワークステーションそれぞ れは、先に述べたより簡単な形式の設定になり、ルータのみがネットワークへ の経路を別々に登録することになります。それぞれのワークステーションの場 合、「既定の経路」を使ってルータにデータグラムを送りますが、ルータの場 合はそれらを適切な経路に送りだす必要があります。 上記のルータの設定でデフォルトの経路の設定に`gw' が無いのを不思議に思 うかも知れませんが、その理由は簡単で、PPP や SLIP といったシリアル経由 の接続は一対一の接続になっているからです。接続先が一台のマシンになって いるため、他に選択の余地が無く、そのマシンをゲートウェイとして設定する 意味は無いわけです。ethenet や 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)が設定された一つ の ethernet のセグメントが接続されています。また、PPP を使って他のルー タに接続され、ネットワークは三角形になっています。 ルータ A の経路表は以下のようになります。 # route add -net 192.168.1.0 netmask 255.255.255.0 eth0 # route add -net 192.168.2.0 netmask 255.255.255.0 ppp0 # route add -net 192.168.3.0 netmask 255.255.255.0 ppp1 この設定はルータ A と B の間の接続が切れない限り正しく動きます。A と B の間の接続が切れると、A に接続された ethernet 上のホストから B に接続 された ethernet 上のホストへは接続できなくなります。なぜなら、ルータ A から B への経路は A の ppp0 を使うことになっており、この接続が切れてい るためです。一方、A と C の間の接続は生きているので、A の ethernet 上 のホストから C の ethernet 上のホストへは通信できます。一方、B と C の 間の接続は生きているので C の ethernet 上のホストから B の ethernet 上 のホストへも通信できます。 さて、ここで A は C と通信でき、C は B に通信できるとしたら、A から B へのデータグラムは C を経由して B に送ることが可能なはずです。このよう な問題を解決するために RIP のような動的経路制御プロトコルが開発されま した。A、B、C それぞれのルータで経路制御デーモンが動いていれば、どれか 一つの接続が切れても、そのネットワークの状態を反映するように自動的に経 路表が調整されます。経路制御デーモンの設定は簡単で、それぞれのルータで 2 つのことをするだけです。ルータ A の場合、 # route add -net 192.168.1.0 netmask 255.255.255.0 eth0 # /usr/sbin/routed とします。 経路制御デーモン routed は起動時に自動的に全ての使用可能なネットワーク ポートを探して、そのホストの経路表を更新できるようにそれぞれのネットワ ークデバイスへメッセージを送ると同時に、他のホストから送られてくるメッ セージを受けとります。 以上はごく簡単な動的経路制御の説明ですが、充分使えるはずです。より詳細 な説明が必要ならばこの文書の最初に上げた参考文献を参照してください。 The important points relating to dynamic routing are: 動的経路制御についての重要なポイントは以下の通りです。 1. 目的地まで複数の経路があり、その中から一つの経路を選ばなければなら ない状況にないかぎり、あなたの Linux マシンで動的経路制御デーモンを 動かす必要はありません。 2. 動的経路制御デーモンは、ネットワークの状態の変化に応じて自動的に経 路表を変更します。 3. RIP は小〜中規模のネットワークに適しています。 5.8. ネットワーク経由の各種サービスとサーバの設定 ネットワーク経由の各種サービスとそのためのサーバを起動すれば、遠隔地に いるユーザが、ネットワーク経由であなたの Linux マシンを使うことができ ます。誰かがネットワーク経由で接続してくると、あらかじめ起動されている サーバプロブラムか、各種サーバプログラムを起動するためのデーモンプログ ラム(inetd)が、どのポートへの接続かを確認し、接続を受けつけると共にプ ログラムを実行します。ネットワークデーモンの動作方法には 2 つの種類が あり、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 を使わなければならない技術的な理由はありません。しかしなが ら、常識的な意味から、特定のサービスが tcp でも udp でも使える場 合、それらは同じポートを使うようになっており、 /etc/services に そのような例がいくつか見つかるでしょう。 aliases はこのサービスを参照する別名を設定します。 5.8.1.1. /etc/services ファイルの実例 最近の Linux の各種配布パッケージには、 /etc/services ファイルはあらか じめ用意されていますが、もし 0 からシステムを組みあげなければならない 場合のために、以下に Debian システムからコピ ーした /etc/services の例を紹介します。 # /etc/services: # $Id: NET-3-HOWTO.sgml,v 1.2 1999/12/28 20:13:51 morimoto Exp $ # # 各種ネットワークサービス、インターネットスタイル。 # # 一つの特権(well-known)ポートに TCP と UDP 双方を割りあてるのが最近の IANA # の方針なので注意してください。そのため、UDP をサポートしていないプロト # コルでも、以下に示すポートのほとんどに TCP と UDP 双方のエントリがあり # ます。RFC 1340 ``Assigned Numbers''(July 1982) からバージョンアップし # ていますが、全てのポートが含まれているわけではなく、よく使われるものだ # けを記載しています。 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 # # ``Assingned Numbers'' によると、、 # > 登録されているポートは IANA が管理しているわけではなく、以下のポート # > についてはほとんどのシステムで通常のユーザ権限で起動された通常のプロセ # > スやプログラムから操作可能です。 #> ポートとは TCPに関する RFC で定義されいる長時間の通信を支える論理的な #> 接続端の名称です。名称不明の呼び出し元に答える目的で各種サービスの #> 接続用ポートが定義されています。このリストはサーバプロセスが使う接続 #> 用のポートです。IANA がこれらのポートを管理することは不可能なので、 #> 以下のリストは単に慣例を示しているに過ぎません。 # 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(Athena/MIT プロジェクト)サービスの使うポート。以下は # Kerberos v4 用の非公式のものです。v4 の Kerberos を使っているサイトで # は以下の行を使って、上述の v5 用のエントリはコメントアウトし # てください。 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 # # 非公式だが必要な(NetBSD 用)サービス # 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 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 は 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: NET-3-HOWTO.sgml,v 1.2 1999/12/28 20:13:51 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. ネットワークのセキュリティとアクセス管理 まず最初に注意しておきますが、悪意を持った攻撃からマシンとネットワーク のセキュリティを守るのは複雑な技術が必要になります。私自身この分野につ いてはとてもエキスパートとは言えません。そのため、以下に有益であろう手 段を紹介しますが、もしセキュリティについて真剣に考えるならば自分自身で 調べてみることをお薦めします。インターネット上にはこの問題についての情 報が豊富にあります。 まず第一にやるべきことは、必要の無いサーバは起動しない ことです。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 # # メールは全ての人に許可 in.smtpd: ALL # telnet と ftp は同じドメインのホストか自宅のホストにのみ許可 telnetd, ftpd: LOCAL, myhost.athome.org.au # finger は全ての人に許可するが、誰が試みたかは記録 fingerd: ALL: (finger @%h | mail -s "finger from %h" root) 5.10.3.2. /etc/hosts.deny /etc/hosts.deny も /usr/sbin/tcpd プログラムの設定ファイルで、どのホス トからの接続を拒否するかを設定します。 A simple sample would look something like this: 以下に簡単な例を示します。 # /etc/hosts.deny # # ホスト名を詐称しているホストは不許可 ALL: PARANOID # # 全てのホストを不許可 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. Network ファイアウォール あなたのマシンやサーバにまでデータグラムが届かないようにすることはセ キュリティ的に優れた方法です。この方法の詳細については Firewall-HOWTO に解説があります。 5.10.7. その他のコメント 多少宗教がかってきますが、その他の注意しておくべきポイントを述べておき ます。 sendmail sendmail デーモンは有名なプログラムですが、しばしばセキュリティ 的な問題についても報告されています。どうするかはおまかせします が、私は sendmail は動かさないことにしました。 NFS とその他 Sun の RPC を使うサービス についても慎重になるべきです。これらのサービスはさまざまな方法で 悪用可能です。NFS のようなサービスの代りを見つけるのは困難です が、これらを設定する際には誰にマウント許可を与えるかに充分注意す る必要があります。 6. それぞれのネットワーク技術についての情報 以下の各セクションでは特定のネットワーク技術について扱います。それぞれ のセクションは独立していますので、あるセクションを読むのに別のセクショ ンの情報は特に必要ありません。 6.1. ARCNet ARCNET のデバイス名は `arc0s'、`arc1e'、, arc2e' などになります。最初 に検出されたカードが `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 カードをサポートするようにカーネルを作成すれば、カードの設定は 簡単です。 設定は、通常、以下のように行います。 # ifconfig arc0e 192.168.0.1 netmask 255.255.255.0 up # route add 192.168.0.0 netmask 255.255.255.0 arc0e 詳細については /usr/src/linux/Documentation/networking/arcnet- hardware.txt を御覧ください。 ARCNet の機能は Avery Pennarrun apenwarr@foxnet.net が開発しました。 6.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 で入手でき ます。 このパッケージをコンパイルしてインストールするには以下のようにします。 # cd /usr/src # tar xvfz .../netatalk-1.4b2.tar.Z -この時点で必要ならば `Makefile' を修正します。特に、プログラムのイン ストール先である DESTDIR に注意してください。デフォルトでは /usr/local/atalk にインストールされます。 # make - root になって: # make install 6.2.1. 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 デーモンプログラムが自動的にこのファイルに設定情報を追加しま す。 6.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' といったボリューム名は必須ではな く、指定しなければデーモンが自動的に命名してくれますが、付けておいても 問題はありません。 6.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' プリンタ(lpとい うプリンタは /etc/printcap ファイルで設定されています)に出力されます。 `op=cg' の指定は linux マシンのユーザ `cg' がプリンタの使用者になるこ とを意味します。 6.2.4. appletalk ソフトウェアの起動 さて、これで基本的な設定を試す準備ができました。netatalk パッケージに は rc.atalk ファイルが含まれていますので、 netatalk を起動するには以下 のようします。 # /usr/local/atalk/etc/rc.atalk これで必要なデーモン類が全て起動するはずです。エラーが出なければ、ソフ トウェアはコンソールにそれぞれの段階のメッセージを示していくはずです。 6.2.5. appletalk ソフトウェアのテスト netatalk が正しく機能しているかを確認するには、Apple のマシンを使っ て、アップルメニューから「セレクタ」を選び、AppleShare をクリックして Linux の表示が見えるか確かめます。 6.2.6. netatalk の注意点 o 場合によっては、IP ネットワークを設定する以前に Appletalk 機能を起 動しなければいけないかも知れません。netatalk が起動しなかった り、netatalk が起動すると IP ネットワークにトラブルが生じたりする場 合、netatalk を /etc/rc.d/rc.inet1 以前に起動してください。 o afpd(Apple Filing Protocol Daemon)は HDD にさまざまなファイルを作り ます。AppleTalk 用に指定したディレクトリに.AppleDesktop と Network Trash Folder を作り、それ以下の Mac からアクセスしたディレクトリ全 てにリソースフォークを保存するための .AppleDouble を作っていきま す。ですから、/ を afpd で公開するまえにはくれぐれもよく考えてくだ さい。さもないと後始末に大変な時間がかかってします。 afpdはMacから平文のパスワードを求めます。これはセキュリティ的には問 題になるので、afpd をインターネットなどの外部のネットワークに接続し たマシンで起動する際には充分注意してください。 netstat や ifconfig といった既存のネットワーク診断用ツールは AppleTalk をサポートしていません。必要ならば /proc/net/ 以下のディ レクトリに用意されている情報を調べてください。 6.2.7. 更なる情報源 Linux における AppleTalk の設定方法のより詳細な説明はthehamptons.com で公開されている Anders Brownworth の Linux Netatalk-HOWTO を参照してください。 6.3. ATM Werner Almesberber は Linux で ATM(Asynchronous Transfer Mode)をサポートするための計画を統括していま す。この計画の現状については lrcwww.epfl.ch に紹介されています。 6.4. AX25 (AF_AX25) AX.25 デバイスの名称は 2.0.* カーネルでは `sl0' や `sl1' ですが、2.1.* カーネルでは `ax0' や `ax1' になっています。 Kernel Compile Options: カーネルを再構築する際に指定すべきオプションは: Networking options ---> [*] Amateur Radio AX.25 Level 2 です。 AX25 と Netrom、Rose プロトコルは AX25-HOWTO に解説 されています。世界中のアマチュマ無線の愛好家がこれらのプロトコルをパ ケット無線の実験につかっています。 これらのプロトコルの大部分の実装は Jonathon Naylor jsn@cs.not.ac.uk の 手によるものです。 6.5. DECNet DECNet のサポートも現在開発中です。将来の 2.1.* シリーズで公開されるは ずです。 6.6. EQL - multiple line traffic equaliser 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 を設定するには、 sunsite.unc.edu から入 手できる EQL 用ツールが必要になります。 EQL の設定はごく簡単で、他のネットワークデバイスと同じ形式で eql イン ターフェイスを設定するところから始まります。IP アドレスや mtu は ifconfig を用いて下記のように設定します。 ifconfig eql 192.168.10.1 mtu 1006 route add default eql 次に、使おうとしている回線それぞれを手動で起動します。これらは二点間接 続を複数用意したものになるでしょう。どのように起動するかは使う接続の種 類に依存しますので、詳しい情報はそれぞれの接続形態について説明した章を 御覧ください。 最後にシリアル接続を EQL デバイスに結びつけます。これは「スレーブ化 (enslalving)」と呼ばれ、eql_enslave コマンドで以下のように設定します。 eql_enslave eql sl0 28800 eql_enslave eql ppp0 14400 eql_enslave コマンドに与える「推定回線速度(estimated speed)」パラメー タは、直接の影響は及ぼしません。このパラメータは EQL デバイスがデータ グラムをそれぞれの回線からどのような割合で受けるかを決定するために使わ れるので、この数字を適当に調整して最適値を探してください。 EQL デバイスから回線を開放するには、以下のように eql_emancipate コマン ドを使います。 eql_emancipate eql sl0 他の二点間接続同様、EQL デバイスを使った経路制御も可能ですが、その場 合、実際のシリアルデバイスではなく eql デバイスを経路に使います。例え ば、以下のように経路を設定できます。 route add default eql0 EQL ドライバは Simon Janes simon@ncm.com が開発しました。 6.7. Ethernet Ethernetのデバイス名は `eth0'、`eth1'、 `eth2'のようになります。カーネ ルが検出した最初のカードが `eth0'で、以下、カードが検出する順に番号が 振られていきます。 Linux で ethernet カードを使う方法の詳細については Ethernet-HOWTO を参照してください。 お使いの ethernetカードをサポートするようにカーネルをきちんと再構築し てしまえば設定そのものは簡単です。 通常、以下のように設定します。 # ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up # route add 192.168.0.0 netmask 255.255.255.0 eth0 ほとんどの ethernet デバイスは Donald Becker becker@CESDIS.gsfc.nasa.gov が開発しました。 6.8. FDDI FDDI のデバイス名は `fddi0'、`fddi1'、 `fddi2' などになります。カーネ ルが検出した最初のカードが `fddi0' で、その後は検出した順に番号が振ら れていきます。 Lawrence V. Stefani stefani@lkg.dec.com が DEC 製の EISA バスと PCI バスの FDDI カード用のドライバを開発しました。 カーネルの再構築の際には以下のオプションを指定します: Network device support ---> [*] FDDI driver support [*] Digital DEFEA and DEFPA adapter support FDDI ドライバを組み込んだカーネルを構築すれば、FDDI インターフェイスの 設定は ethernet インターフェイスの設定とほぼ同じです。適切な FDDI イン ターフェイスの名称を指定して ifconfig と route コマンドで設定します。 6.9. フレームリレー フレームリレーのデバイス名のうち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 が無いために多くを手動でやる必要があります。 # cd /usr/src # tar xvfz .../frad-0.15.tgz # cd frad-0.15 # for i in common dlci frad; do cd $i; make clean; make; cd ..; done # mkdir /etc/frad # install -m 644 -o root -g root bin/*.sfm /etc/frad # install -m 700 -o root -g root frad/fradcfg /sbin # install -m 700 -o root -g root dlci/dlcicfg /sbin 必要なファイルをインストール後、/etc/frad/router.conf ファイルを作る必 要があります。以下に、例として付いてきたファイルを多少修正したバージョ ンを雛型として紹介します。 # /etc/frad/router.conf # これはフレームリレー用の設定ファイルの雛型です # 設定可能な項目を全て含んでいます。指定しているデフォルト値は Sangoma # S502A カード用の DOS ドライバに基づくものです。 # '#' 以下はコメントと見なされます。 # 空白は無視されます(タブコードを使ってインデントしても構いません) # 定義されていない [] フィールドやキーは無視されます [Devices] Count=1 # number of devices to configure Dev_1=sdla0 # the name of a device #Dev_2=sdla1 # the name of a device # ここでの設定は全てのデバイスに適用される。また、それぞれのデバイスご # との設定で上書きすることも可能 # 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 # この指定は全てのボードのデフォルト値 # 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 # # # デバイスごとの設定 # # # # 最初のデバイスは Sangoma S502E # [sdla0] Type=Sangoma # Type of the device to configure, currently only # SANGOMA is recognised # # 以下は 'Sangoma' タイプのボード用の設定 # # ボードの種類 - S502A, S502E, S508 のいずれか Board=S502E # # Sangoma ボードのテスト用ファームウェア名 # Testware=/usr/src/frad-0.10/bin/sdla_tst.502 # # FR 用ファームウェア名 # 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 デバイスを設定することをお忘れ なく。 # 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 192.168.10.0 netmask 255.255.255.0 dlci00 # ifconfig dlci01 192.168.11.1 pointopoint 192.168.11.2 up route add 192.168.11.0 netmask 255.255.255.0 dlci00 # route add default dev dlci00 # 6.10. IP アカウンティング カーネルに組みこまれた IP アカウント機能を使えばネットワークの使用記録 を取ることができます。記録できるデータは、最後にカウンタをリセットして からやりとりしたパケット数とデータのバイト数です。カテゴリごとに異なる ルールを指定可能で、目的に応じた設定が可能です。 カーネルのコンパイル時のオプション: Networking options ---> [*] IP: accounting カーネルに必要な機能を組みこんで再起動した後、ipfwadm コマンドを使って IP アカウント機能を設定します。アカウント情報を細分するための方法はい ろいろあります。以下に実際に使えそうな簡単な設定例を示してみます。詳細 については ipfwadm の man ページを読んでください。 条件: PPP 経由でインターネットに接続された ethernet のネットワークがあ るとします。ethernet のネットワーク上にはさまざまなサービスを提供して いるマシンがあり、telnet や rlogin、ftp、WWW といったトラフィックがど れくらい生じているかを知りたいとします。 そのためには以下のようなコマンドを実行します。 # # Flush the accounting rules ipfwadm -A -f # # Add rules for local ethernet segment ipfwadm -A in -a -P tcp -D 44.136.8.96/29 20 ipfwadm -A out -a -P tcp -S 44.136.8.96/29 20 ipfwadm -A in -a -P tcp -D 44.136.8.96/29 23 ipfwadm -A out -a -P tcp -S 44.136.8.96/29 23 ipfwadm -A in -a -P tcp -D 44.136.8.96/29 80 ipfwadm -A out -a -P tcp -S 44.136.8.96/29 80 ipfwadm -A in -a -P tcp -D 44.136.8.96/29 513 ipfwadm -A out -a -P tcp -S 44.136.8.96/29 513 ipfwadm -A in -a -P tcp -D 44.136.8.96/29 ipfwadm -A out -a -P tcp -D 44.136.8.96/29 ipfwadm -A in -a -P udp -D 44.136.8.96/29 ipfwadm -A out -a -P udp -D 44.136.8.96/29 ipfwadm -A in -a -P icmp -D 44.136.8.96/29 ipfwadm -A out -a -P icmp -D 44.136.8.96/29 # # Rules for default ipfwadm -A in -a -P tcp -D 0/0 20 ipfwadm -A out -a -P tcp -S 0/0 20 ipfwadm -A in -a -P tcp -D 0/0 23 ipfwadm -A out -a -P tcp -S 0/0 23 ipfwadm -A in -a -P tcp -D 0/0 80 ipfwadm -A out -a -P tcp -S 0/0 80 ipfwadm -A in -a -P tcp -D 0/0 513 ipfwadm -A out -a -P tcp -S 0/0 513 ipfwadm -A in -a -P tcp -D 0/0 ipfwadm -A out -a -P tcp -D 0/0 ipfwadm -A in -a -P udp -D 0/0 ipfwadm -A out -a -P udp -D 0/0 ipfwadm -A in -a -P icmp -D 0/0 ipfwadm -A out -a -P icmp -D 0/0 # # List the rules ipfwadm -A -l -n # 最後のコマンドがそれぞれのアカウント記録ルールとトータルの結果を表示し ます。 採取した IP のアカウント記録を分析する際の注意点としては、指定したルー ルに適合するデータのみが増加するという点で、必要なデータを得るにはいく つかの換算が必要でしょう。例えば、ftp や telnet, rlogin, www 以外でや りとりしたデータ量を知るためには、全てのポートに適合するルールの転送量 から、ftp や telnet といったプロトコルで転送したデータ量を引く必要があ ります。 # 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 -> * 0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 23 0 0 out tcp 44.136.8.96/29 0.0.0.0/0 23 -> * 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 -> * 242 9777 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 513 220 18198 out tcp 44.136.8.96/29 0.0.0.0/0 513 -> * 252 10943 in tcp 0.0.0.0/0 44.136.8.96/29 * -> * 231 18831 out tcp 0.0.0.0/0 44.136.8.96/29 * -> * 0 0 in udp 0.0.0.0/0 44.136.8.96/29 * -> * 0 0 out udp 0.0.0.0/0 44.136.8.96/29 * -> * 0 0 in icmp 0.0.0.0/0 44.136.8.96/29 * 0 0 out icmp 0.0.0.0/0 44.136.8.96/29 * 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 -> * 0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 23 0 0 out tcp 0.0.0.0/0 0.0.0.0/0 23 -> * 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 -> * 243 9817 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 513 221 18259 out tcp 0.0.0.0/0 0.0.0.0/0 513 -> * 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 * -> * 0 0 in icmp 0.0.0.0/0 0.0.0.0/0 * 0 0 out icmp 0.0.0.0/0 0.0.0.0/0 * # 6.11. IP エイリアス 1つのネットワークデバイスに複数の IP アドレスを設定できれば便利なアプ リケーションがあります。インターネットプロバイダ(ISP)は、よくこの機能 を使って WWW と ftp を顧客用に設定して提供しています。 カーネル設定時のオプションは:: Networking options ---> .... [*] Network aliasing .... <*> IP: aliasing support IP_Alias 機能を組みこんだカーネルを構築してインストールすれば、この機 能を設定するのはごく簡単です。alias 機能は、実際のネットワークデバイス に仮想的なネットワークデバイスを関係づけます。仮想的なデバイスに割りあ てる名前は、: の形で、 eth0:0、ppp0:10 のよ うになります。 たとえば、2 つの異なるサブネットを持った Ethernet ネットワークに接続し たマシンがあるとして、同時に双方のサブネットにアクセスしたい場合、以下 のようにします。 # # ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 up # route add -net 192.168.1.0 netmask 255.255.255.0 eth0:0 # # ifconfig eth0:1 192.168.10.1 netmask 255.255.255.0 up # route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0 # エイリアスを削除する場合、仮想的なデバイス名の後に `-' を付けて ifconfig します。 # ifconfig eth0:0- 0 仮想デバイスを削除すれば、関連した経路も全て自動的に削除されます。 6.12. IP ファイアウォール 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 # IP forwarding に関するルールを初期化して # default policy を 'accept' にする # /sbin/ipfwadm -F -f /sbin/ipfwadm -F -p accept # # # Incoming についても同様の設定をする。 /sbin/ipfwadm -I -f /sbin/ipfwadm -I -p accept # まず、PPP インターフェイスの封印を解く。私は '-a reject -y' よりも '-a # deny' の方が好きだけど、その場合、そのインターフェイスから接続を開始す # ることもできなくなる。-o を指定すると、拒否されたデータグラムは全て記 # 録される。これはにはかなりのディスク領域が必要なので、設定ミスによって # 攻撃されているかどうかを知る必要がある場合にのみ設定すべき。 # /sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30 # ある種の偽装パケットは即座に拒否する。multicast/anycast/broadcast アド # レスからのパケットは受けつけない。 # /sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24 # # # 加えて、ループバックネットワークのアドレスを持つパケットも、回線経由で # 来ることはない。 /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 the Mail/Name Server Mail/Name サーバに限って SMTP と DNS 接続を受けつける。 # /sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53 # # DNS は TCP と同様 UDP も使うので、内部のネームサーバの # 問い合わせ用に設定する /sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53 # # しかしながら、NFS や Larry McVoy 作の拡張 NFS のような危険なポートへの # パケットには応答しない。squid を動かしている場合、そのポートもここに記 # 述すること。 /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \ -D 172.16.37.0/24 2049 2050 # それ以外の非特権ポートへの接続は許可する。 # /sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \ -D 172.16.37.0/24 53 1024:65535 # identd に送られてきたパケットは reject する。ここでは # 'reject' を使い、接続元のホストに接続できないことを明 # 示して、再接続を試みないようにさせる。そうしないと、 # ident がタイムアウトするまで時間がかかることになる。 /sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113 # 192.168.64 と 192.168.65 のネットワークは信頼してい # るので、一般的なサービスは許可する。 /sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \ -D 172.16.37.0/24 20:23 # 内部のネットワークからの接続は全て許可する。 /sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0 # 外部からの TCP 接続のほとんどは拒否して、ログを取る。 # (ftp がうまく動かなければ 1:1023 を追加してみる) # /sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24 # # UDP についても同様の設定をする。 /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24 よいファイアウォールの設定は多少トリッキーになっているものですが、ここ に示した例は合理的にできており、様々な設定を追加する基本に使えるでしょ う。 設定方法の詳細については ipfwadm のマニュアルを参照してください。ファ イアウォールを設定する場合、周囲の人にたずねて、信頼するに足る情報源か らのアドバイスを可能な限り受けてください。そして、設定が正しく機能して いるかどうか、外部から確認してもらいましょう。 6.13. IPX (AF_IPX) IPX プロトコルは Novell の NetWare(tm) LAN 環境で広く使われているプロ トコルです。Linux はこのプロトコルもサポートしており、ネットワークの端 末としても、IPX のルータとしても機能します。 カーネル構築時のオプションは: Networking options ---> [*] The IPX protocol [ ] Full internal IPX network IPX プロトコルと NCPFS については IPX-HOWTO に詳しく 説明されています。 6.14. IPv6 やっと IP ネットワークについて理解し始めたところだというのに、ルールが 変ってしまうなんて…、と思われるかも知れません。IPv6 とは、Internet Protocol Version 6 のことです。IPv6 は、現在インターネットコミュニティ が直面している IP アドレスの枯渇問題に対応することを主目的に開発されて います。IPv6 のアドレスは 32 バイト長(128 bits)になっています。それ以 外にも、IPv6 では主として単純化のためのさまざまな変更が施されて、既存 の IPv4 ネットワークよりも管理しやすいようになっています。 Linux 2.1.*シリーズには、既に IPv6 の実装が動いていますが、まだ完全で はありません。 この次世代のインターネット技術が必要な場合や試してみたい場合は www.terra.net から入手できる IPv6-FAQ を まず読んでみましょう。 6.15. ISDN ISDN(Integrated Services Digital Network)とは、汎用のディジタル・ス イッチ・ネットワークの規格の一種です。ISDN の `call' は、目的地との一 対一の同期的な接続を張ります。ISDN のデータは、通常、複数のチャネルに 分割された高速回線を経由して運ばれます。ISDN のチャネルには 2 つの種類 があり、`B チャネル' が実際のデータを転送し、`D チャネル' と呼ばれる回 線が接続の確立など各種の情報をやりとりするために使われます。 オーストラリアを例にとると、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 and 4B o Octal PCBIT-D o Teles ISDN-cards and compatibles 必要なソフトウェアをダウンロードしなければならないカードもありますが、 そのためには専用のプログラムが必要です。 Linux の ISDN 機能をどのように設定するかの詳細については /usr/src/linux/Documentation/isdn/ にある各文書と www.lrz-muenchen.de にある isdn4linux とい う FAQ を御覧ください(英語版を見るためには English を選ぶことをお忘れ なく)。 PPP についてのメモ。PPP プロトコルは非同期、同期を問わずに使えますが、 現在、広く使われている Linux 用の PPP デーモン pppd は非同期モードしか サポートしていません。PPP を ISDN 経由で使いたい場合、特別に修正したバ ージョンが必要になります。そのバージョンがどこで入手できるかも上記の文 書中に触れてあります。 6.16. IP Masquerade インターネットに接続するためにダイアルアップ接続を使っている人も多数い ることでしょう。通常、1 つのホストがネットワークに接続するためには 1 つの IP アドレスがあれば充分なので、このような接続の場合、ISP からは、 1 つの IP アドレスしか与えられません。IP Masquerade というのは、1 つの IP アドレスを複数のコンピュータが使うための賢い仕組みです。IP Masquerade を使えば、Masquerade(偽装)という名の通り、外部のホストから はダイアルアップ接続しているマシンと通信しているように見せながら、内部 の複数のマシンから通信を行うことが可能になります。 カーネルコンパイル時のオプション: 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) 通常、ネットワークに接続していないマシンでも slip か PPP ダイアルアッ プ接続機能を組みこんでいることでしょう。IP Masquerade を使うには、それ に加えて別のネットワークデバイス、たいていの場合はイーサネットになるで しょう、を設定して、プライベートネットワーク用に用意されている IP アド レスを使って設定します。Masquerade 経由で接続するホストはこの 2 つめの ネットワーク上にあります。イーサネット・ネットワーク上にある各マシンで は、デフォルトの経路に IP Masquerade を組みこんでインターネットとのゲ ートウェイになっている Linux マシンを指定します。 よくある IP Masquerade の設定は下図のようになります。 - - \ | 192.168.1.0 \ | /255.255.255.0 \ --------- | | | Linux | .1.1 | NET =================| masq |------| | PPP/slip | router| | -------- / --------- |--| host | / | | | / | -------- - - この環境でもっともふさわしい設定は、 # Network route for ethernet route add 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 IP Masquerade 機能についての詳細はIP Masquerade Resource Page にあります。 6.17. 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) transparent proxy 機能は ipfwadm コマンドで設定します。 便利な設定は以下のとおり。 ipfwadm -I -a accept -D 0/0 80 -r 8080 この例では外部のあらゆるホストの 80 番のポート(www)への接続を全てこの マシンの 8080 番のポートへリダイレクトします。こうしておけば、ローカル のネットワークからの全ての WWW に関する接続リクエストが、自動的にこの マシンの WWW キャッシュプログラムへ送られます。 6.18. モバイル IP(Mobile IP) 「IP の可搬性(IP mobility)」とは、ある場所でインターネットに接続してい るホストが、別の場所に移っても IP アドレスを変更せずに接続できたり、接 続を切らずに場所を移動できることです。通常、IP アドレスを割りあてられ ているホストは、接続場所を変更すれば IP アドレスも変更しなければなりま せん。IP mobility 機能を使えば、ポータブルマシンにも決まった IP アドレ スを割りあて、自動ルーティング機能とIP カプセル化(トンネリング)機能を 使い、ポータブルマシン宛のデータグラムを、そのマシンが現在実際に使って いる IP アドレスに送ることできます。 Linux 用に IP mobility ツール一式を開発しようというプロジェクトが進行 中です。進行状況については Linux Mobile IP Home Page で公開されています。必要 なツールもこのページからダウンロードできるかも知れません。 6.19. Multicast 通常、TCP/IP は接続先のマシンを指定した一対一の接続形態を取りますが、 IP マルチキャスト機能を使えば、異なる IP ネットワーク上にある任意の数 のホストへ、同時に IP データグラムを送ることが可能になります。この機能 はインターネット全体へ音声やビデオの素材を「放送」したり、その他新しい さまざまなアプリケーションのために開発されました。 カーネルコンパイル時のオプション: Networking options ---> [*] TCP/IP networking .... [*] IP: multicasting IP マルチキャストを使うには、そのためのプログラムとが必要で、ネットワ ークにもいくつか特別の設定をする必要があります。Linux の場合にどのよう に設定するかの説明はwww.teksouth.com にあります。 6.20. 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 が実装 しました。 6.21. PLIP PLIP のデバイス名は `plip0'、`plip1' のようになります。最初のデバイス が `0' 番になり、以後順に番号が付けられていきます。 カーネルコンパイル時のオプション: Networking options ---> <*> PLIP (parallel port) support plip(Parallel Line IP)は、SLIP と同様に、2 台のマシンの間で一対一 接続 の機能を提供しますが、シリアルポートの代りにパラレルプリンタのポートを 使って接続します。パラレルポートの場合、一度に複数のビットを転送できる ので、plip を使えば通常のシリアルポートを使った接続よりは高速な接続が 可能になります。加えて、SLIP の場合、(内蔵のシリアルポートが 16450 UARTならば)比較的高価な 16550AFN UART シリアルポートを別途購入する必要 がありますが、パラレルプリンタポートは通常の PC にはあらかじめ付いてい ます。 ラップトップ機のなかには、プリンタでは使っていないけれど PLIP には必要 な信号を扱えないようなチップを使っているため、PLIP を使用できないもの もあります。 Linux の plip インターフェイスは Crynwyr Packet Driver PLIP と互換性が あるので、Linux マシンと DOS マシンを PLIP 経由で接続して、さまざまな TCP/IP ソフトウェアを使うことができます。 plip を使うためにカーネルのコンパイルする際、設定に関するファイルが1つ だけあります。それは/usr/src/linux/driver/net/CONFIG で、このファイル で plip のタイマを mS 単位で設定します。たいていの場合はデフォルトの設 定のままでいいはずですが、特に遅いコンピュータを使っている場合はこの値 を増した方がいいでしょう。実際にこのタイマの設定を増さなければいけない のは、遅いマシンの方です。 PLIP ドライバは以下のようなIOアドレスと IRQ をデフォルト値にしていま す。 device i/o addr IRQ ------ -------- ----- plip0 0x3BC 5 plip1 0x378 7 plip2 0x278 2 (9) お使いのパラレルポートの設定が上記の組み合わせと異なる場合、 ifconfig コマンドの `irq' オプションを使ってポートの IRQ を変えることができま す。ROM BIOS でプリンタポートが IRQ を使うか否かを設定できる場合、忘れ ずに IRQ を使うように設定しておいてください。 plip インターフェイスを使うには、ネットワーク用の rc ファイルに以下の ような設定を追加するのがいいでしょう。 # # Attach a PLIP interface # # configure first parallel port as a plip device /sbin/ifconfig plip0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up # # End plip ここで: IPA.IPA.IPA.IPA はあなたのマシンの IP アドレスで IPR.IPR.IPR.IPR は接続先のマシンの IP アドレスです pointtopoint パラメータは SLIP の場合と同じ意味で、接続のもう一方の端 にいるマシンのアドレスを設定します。 ほとんどの場合、plip インターフェイスは SLIP インターフェイスと同様に 使えますが、plip の場合、dip や slattach を使う必要もなければ、使うこ ともできません。 6.21.1. PLIP ケーブルの結線図 plip は、MS-DOS 上で PC 間のファイル転送によく使われている (Interlink などの使う)ケーブルと同じケーブルが使えるように設計されています。 ピンの配線は以下の通りです(/usr/src/linux/drivers/net/plip.c より) Pin Name Connect pin - pin --------- ----------------- GROUND 25 - 25 D0->ERROR 2 - 15 ERROR->D0 15 - 2 D1->SLCT 3 - 13 SLCT->D1 13 - 3 D2->PAPOUT 4 - 12 PAPOUT->D2 12 - 4 D3->ACK 5 - 10 ACK->D3 10 - 5 D4->BUSY 6 - 11 BUSY->D4 11 - 6 D5 7* D6 8* D7 9* STROBE 1* FEED 14* INIT 16* SLCTIN 17* 注意:アスタリスク `*' のマークの付いたピンは配線しません。 18,19,20,21,22,23,24 はアースに落します。 金属でシールドされているケーブルの場合、そのシールドは DB-25 コネクタ と一端でのみ接続していなければいけません。 警告 : ケーブルの配線を間違えるとコントローラカードが壊れるかも知れま せん。 不要なトラブルや頭痛の種を残さないように、充分注意して全ての配 線を二重にチェックしましょう。 PLIP で長い距離を結びたくなるかも知れませんが、PLIP は長い距離では使わ ない方が安全です。PLIP のケーブルの仕様は、せいぜい 1 メートルくらいの 長さまでしか考慮していません。PLIP で長い距離を伸ばす場合、ケーブルの 近くに強い電磁場を出すような装置、例えば照明器具や電力線、無線の送信機 などを置かないようにしましょう。これらの器具は通信を妨害するだけでな く、パラレルポートのコントローラにダメージを与える場合もあります。2 台 のコンピュータを長い距離を隔てて接続しなければならない場合、thin net 用のイーサネットカードを使って、同軸ケーブルで接続するようにする方がい いでしょう。 6.22. PPP PPP のデバイス名は `ppp0'、`ppp1' のようになります。最初のデバイスが `0' で、以後は順に番号が付きます。 カーネルコンパイル時のオプション: Networking options ---> <*> PPP (point-to-point) support PPP の設定についての詳細はPPP-HOWTO に詳しい解説があ ります。 6.22.1. pppdを使ってインターネットと恒久的な接続をするには シリアル回線を使って常にインターネットへ接続できる場合、以下に示す方法 で接続が切れた場合に自動的にリダイアルできます。 以下のコマンドでroot から起動できるように PPP を設定します。 # pppd /etc/ppp/options ファイルに `-detach' オプションを指定することを忘れず に。その上で、以下の行を /etc/inittab に加え、getty の設定に用います。 pd:23:respawn:/usr/sbin/pppd こうしておけば、init プログラムが spawn して pppd をモニターし、pppd が死んだ場合は自動的に起動できます。 6.23. 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 が詳しく説明しています。これらのプロトコルはパケット 通信の実験でアマチュア無線のオペレータがよく使っています。 6.24. SAMBA - `NetBEUI', `NetBios' 機能 SAMBA は Session Menagement Block プロトコルを実装したものです。Samba を使えば、Microsoft やその他のシステムから Linux のディスクをマウント したり、プリンタを使うことが可能になります。 SAMBA とその設定の詳細は SMB-HOWTO に詳しく解説されて います。 6.25. 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 です。 6.25.1. dip dip (Dialup IP)とは、シリアルデバイスの回線速度を設定したり、モデムに 電話をかけさせて自動的にリモートサーバにログインしたり、サーバから送ら れるログイン時のメッセージの中から割りあてられた IP アドレスを見つけた り、必要に応じて ioctl を使いシリアルポートを SLIP モードに変えたりす る多機能なプログラムです。dip には強力なスクリプト機能があり、ログイン 手続きを自動実行できます。 dip は sunsite.unc.edu にあります。 インストールするには、以下のようにしてください。 # # cd /usr/src # gzip -dc dip337o-uri.tgz | tar xvf - # cd dip-3.3.7o # make install # このパッケージに入っている Makefile は uucp というグループが存在するこ とを前提にしています。しかし、環境によっては、このグループを dip や SLIP にすることもできます。 6.25.2. slattach slattach は dip に比べるとずいぶん単純なプログラムです。非常に簡単に使 えますが、dip ほどの機能は持っていません。 slattach はスクリプト機能も なく、シリアルデバイスを SLIP デバイスに変換する機能しか持っていませ ん。slattach を使う場合、IP アドレスなどの情報はあらかじめ分っており、 起動前にシリアル接続も成立していなければいけません。slattach は、シリ アル回線を経由してサーバに直結していたり、シリアルの専用回線を使ってい る際に便利なプログラムです。 6.25.3. いつ、どちらを使うべきか? dip は、モデムを経由して SLIP サーバに接続する場合か、一時的な接続を張 る場合に使います。専用回線でサーバと接続しており、接続のために特別の処 理が不要の場合は slattach が便利です。詳細については「恒久的な SLIP 接 続」の節を参照してください。 SLIP インターフェイスの設定は Ethernet インターフェイスの設定によく似 ています(既述の「ethernet デバイスの設定」の節を参照してください)。し かしながら、いくつか重要な違いもあります。 まず第一に、SLIP の場合は ethenet のネットワークとは異なり、接続の両端 に一台ずつのマシンしかありません。ethernet の場合はケーブルをつなげば すぐに使えますが、SLIP の場合、接続形態にもよりますが、ネットワーク接 続を開始するには何らかの初期化処理が必要です。 dip の場合、システムの起動時には設定できず、シリアル接続の準備ができた 段階で起動することになります。この手順は自動化できます。 slattach の場 合、rc.inet1 の中で設定するのがいいでしょう。この方法については後述し ます。 SLIP サーバには動的に IP アドレスを割りあてるタイプのサーバとあらかじ め決まった IP アドレスを使うタイプのサーバの 2 種があります。また、ほ とんどの SLIP サーバが、電話をかけてログインする時にはユーザ名とパスワ ードの入力を求めます。dip を使えば、この処理を自動化することができま す。 6.25.4. あらかじめ決まった IP アドレスを使う SLIP サーバ あらかじめ割りあてておいた IP アドレスを使うタイプのサーバでは、事前に 専用の IP アドレスを各クライアントに割りあてて、各クライアントは接続の 際にその IP アドレスで SLIP ポートを設定します。この種の SLIP サーバで は、モデムからの着信に答えて、ユーザ名とパスワードの入力を促してユーザ を確認した後、あなた用の IP アドレス向けのデータグラムはすべてその SLIP デバイスに送るように経路制御情報を設定します。 この種のサーバを使っている場合、自分のホスト名と IP アドレスはあらかじ め決まっているので /etc/hosts に書いておくことも可能です。ま た、rc.inet2 や host.conf、resolv.conf、 /etc/HOSTNAME rc.local などを 通常の ethernet 接続と同様に設定することができます。rc.inet1 を設定す る場合、SLIP 接続用に特別のコマンドを設定する必要はありません。ネット ワークインターフェイスを設定するなどの作業は dip の仕事です。必要な情 報は dip に与え、dip がモデムを使って電話をかけ、接続が成立してから必 要な設定を実行するようにします。 接続先の SLIP サーバがこの種の設定の場合、次に「DIP の使い方」の節に進 んで、dip の設定方法を調べてください。 6.25.5. 接続時に IP アドレスを割りあてるタイプのサーバ 動的な SLIP サーバとは、あらかじめ用意してある複数の IP アドレスの中か ら、接続のたびに異なる IP アドレスをクライアントに割り当てるタイプのサ ーバです。この場合、接続のたびに割り当てられる IP アドレスは異なり、あ なたが今使っているアドレスも、ログアウト後は誰か別の人に割りあてられる ことになります。SLIP サーバを設定するネットワークの管理者は、あらかじ め SLIP で使うための IP アドレスを複数個用意しておき、新しく接続してき たマシンには使っていない IP アドレスを割りあてるように設定します。 この場合、ログインプロセスの中でウェルカム・メッセージとともに割り当て た IP アドレスが示され、その接続の間はその IP アドレスを使って通信しま す。 この種のサーバを使う場合もあらかじめ IP アドレスを割り当てるタイプのサ ーバとほぼ同じ設定になりますが、接続の度に割り当てられた IP アドレスを 使って SLIP デバイスを設定するというステップが余計に必要になります。 ここでも dip がこの大変な作業を引き受けてくれます。dip はログイン処理 をするだけでなく、ウェルカム・メッセージの中に示される IP アドレスを自 動的に読みこんで、それを使って SLIP デバイスを設定してくれます。 接続先の SLIP サーバがこの種の設定の場合、次に dip の設定の仕方を知る ために「DIP の使い方」の節へ進んでください。 6.25.6. DIP の使いかた 今までに述べてきたように、dip を使えば SLIP サーバへ電話をかけてログイ ンするという処理が自動にできます。ログインすれば、 dip は自動的に ifconfig とroute コマンドを使って SLIP デバイスを設定します。 dip を使うためには、`dip スクリプト' を書く必要があります。 `dip スク リプト' は、基本的に dip が理解できるコマンドを並べたもので、dip で実 行したいコマンドを、どのように実行するかを記述しておきます。どのように 書くかは、dip プログラムに付属の sample.dip を御覧ください。dip は多数 のオプションを有する強力なプログラムなので、ここでその詳細に触れること はできないため、 dip のマニュアルページや README、サンプルファイルを調 べてください。 パッケージに付属のsample.dip ファイルは、あらかじめ割り当てられた IP アドレスを使うような設定になっています。動的に IP アドレスを割り当てる タイプのサーバの場合、新しいバージョンの dip パッケージにある、自動的 に割り当てられた IP アドレスを読みとって、その IP アドレスで SLIP デバ イスを設定するようなコマンド例を参照してください。以下に示すサンプルは dip337j-uri.tgz に付属の sample.dip をもとに修正したバージョンで、この 例を元に設定していくのがいいでしょう。以下の部分を /etc/dipscript ファ イルにセーブして、お使いの環境に合うように修正してください。 # # sample.dip Dialup IP connection support program. # # このファイルは DIP の使い方を示しています(いるべきです)。このファイル # の設定で Annex タイプの動的 SLIP サーバと接続できるはずです。静的なア # ドレスを使うタイプのサーバの場合、dip337-uri.tgz パッケージに付属の # sample.dip ファイルを使ってください。 # # # Version: @(#)sample.dip 1.40 07/20/93 # # Author: Fred N. van Kempen, # main: # 次に接続先に名前とアドレスを設定します。私の使っているダイアルイン # マシンは 'xs4all.hactic.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 のマニュアルページを御覧ください。少し工夫 をすれば、設定した時間内にサーバへ接続できなければ自動的にリダイアルし たり、複数のサーバを順に試してみるような機能を組みこむことも可能です。 6.25.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. Where: ここで、 IPA.IPA.IPA.IPA は、あなたのマシンの IP アドレスで、 IPR.IPR.IPR.IPR 接続先のマシンの IP アドレスです。 slattach は指定したシリアルデバイスに空いている最初の SLIP デバイスを 割りあてます。slattach の割りあてるデバイス名は sl0 から始まり、次に割 りあてるデバイス名は sl1、、のようになります。 slattach に -p 引数を指定すれば、異なるプロトコルを設定可能です。この 機能を使って、圧縮の有無によって SLIP か cSLIP を使い分ける場合がよく あります。注意:圧縮の有無は接続の両端で同じ設定にする必要があります。 6.26. SLIP サーバ インターネットなどのネットワークに接続したマシンがあり、電話を経由して 接続してきた他の人に各種のサービスを提供したい場合、あなたのマシンをサ ーバとして設定する必要があります。接続のためのシリアル回線のプロトコル に SLIP を使だ場合、設定の仕方には 3 種類の方法があります。それぞれの 方法を以下に示しますが、私のお薦めは最初の sliplogin を使う方法です。 この方法が一番設定も簡単で理解もし易くなっています。しかしながら、その 他の方法についても説明しますので、どの方法を使うかは御自分で判断してく ださい。 6.26.1. sliplogin を使った SLIP サーバの設定 sliplogin は通常の login シェルの代りに使う SLIP ユーザ用のプログラム で、端末の回線を SLIP モードに変更します。sliplogin を使えば、あらかじ めユーザごとに割りあてておいた 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 は電話経由で接続してくるユーザのアカウントを設定しま す。 o /etc/slip.hosts には、それぞれのユーザごとの情報を設定します。 o /etc/slip.login には、ユーザに必要な経路制御の設定を行います。 o /etc/slip.tty は、IP アドレスを自動的に割りあてる「動的サーバ」の設 定の場合にのみ必要なファイルで、割りあてるべきアドレスの表になって います。 o /etc/slip.logout にはユーザが接続を切ったりログアウトした際の後始末 をするためのコマンドを設定します。 6.26.1.1. sliplogin の入手先 すでにインストールしたパッケージの一部として sliplogin をインストール 済みかも知れませんが、そうでなければsunsite.unc.edu . から入手できます。この tar ファイルには、ソースとコンパイル済みのバイ ナリ、man ページが入っています。 sliplogin を実行できるのは、その権限を持ったユーザだけなので、以下のよ うなエントリを/etc/group ファイルに登録する必要があります。 .. slip::13:radio,fred .. sliplogin パッケージをインストールすれば、Makefile が自動的に sliplogin のグループを slipにし、このグループに属するユーザだけが sliplogin プログラムを実行できるようになります。上の例では radio と fred のみが sliplogin を実行できます。 必要なバイナリを/sbin ディレクトリにインストールし、 manページをマニュ アルの 8 章に登録するには以下のようにしてください。 # cd /usr/src # gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf - # cd sliplogin-2.1.1 # <..edit the Makefile if you don't use shadow passwords..> # make install インストール前に自分でプログラムを再コンパイルする場合、make install の前に make clean してください。どこか別のディレクトリにインストールす る場合は Makefile の install の指定を変更します。 詳しくは、パッケージに付属の README ファイルを御覧ください。 6.26.1.2. SLIP ホスト用の /etc/passwd 通常、SLIP で接続してくる人向けに特別のエントリを /etc/passwd に用意す る必要があります。よく行なわれているのは、接続してくるホスト名の頭に大 文字の `S' を付けて登録する方法です。今回紹介した例の場合、 radio 用に は以下のような /etc/passwd エントリを追加します。 Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin 実際には、アカウント名は特に意味が無いので、分りやすい名前を付けるよう にてください。 注意:電話をかけて来る人はシェルを使うわけではないので、専用のホーム ディレクトリを用意する必要はありません。/tmp あたりを指定しておけばい いでしょう。また、通常のログインシェルの代りに sliplogin を指定してい ることに注意してください。 6.26.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 の機能を使うこと も可能です。 6. timeout パラメータで指定した時間以上上データグラムのやりとりが無い 場合、自動的に接続を切ります。負の値を指定すれば timeout 機能は無効 になります。 7. その他の引数。 注意: 2 つめと 3 つめの欄にはホスト名でもドット区切の 10 進表記の IP アドレスでも指定可能です。ホスト名を指定した場合、そのホスト名が IP ア ドレスに変換できなければなりません。変換できない場合、スクリプトは 異 常終了します。あるホスト名が IP アドレスに変換できるかどうかを調べるに は、そのホスト名に対して telnet してみるのがいいでしょう。もし Trying nnn.nnn.nnn... というメッセージが出れば、そのマシンでは指定したホスト 名を IP アドレスに変換できています。`Unknown host' というメッセージが 出る場合、変換できていません。変換できない場合はドット区切の 10 進表記 を使うか、リゾルバの設定を修正しましょう (詳しくは 名前の解決(Name resolution) の節を参照してください)。 slip でよく使うモードには normal 通常の非圧縮の SLIP compressed van Jacobsen のヘッダ圧縮を可能にするモード(cSLIP) の 2 つ があります。 通常これらは排他的なので、どちらか一方のみを指定します。その他指定可能 なオプションについては man ページを参照してください。 6.26.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)を 設定していることにも注意してください。 欄は、このマシンのイー サネットカードのハードウェアアドレスを指定します。イーサネットのネット ワークに接続していないサーバの場合はこの行を指定する必要はありません。 6.26.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 も削除します。この作業もサーバマシンがイーサネットに接続してい ない場合は必要ありません。 6.26.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 アドレスは少なくて 済みます。 6.26.2. dip を使った SLIP サーバ 以下に説明する情報のいくつかは dip のマニュアルページから引用したこと を最初に白状しておきます。このマニュアルには 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(1) がユーザ名を確認し、 diplogin コマン ドを実行します。dip は diplogin というコマンド名で起動されると、自動的 にログイン・シェルとして機能します。diplogin は、まず getuid() ファン クション・コールを使って自分を起動したユーザのユーザ ID を調べます。そ の後、/etc/diphosts ファイルの最初のエントリを見て、そのユーザ ID か接 続があったデバイスの tty 名を調べ、その設定にしたがって適切な設定を行 います。diphosts にユーザ名のエントリを作るか、サーバのデフォルトの設 定を使って、ユーザごとに静的な IP アドレスの割り当てと動的な割り当てを 混在させるような方法を取るかは判断におまかせします。 dip コマンドは input モードで起動されれば、自動的に `Proxy-ARP' エント リを追加するので、arp コマンドを手動で実行する必要はありません。 6.26.2.1. /etc/diphostsの設定 dip が接続してきたホストを設定するために、 /etc/diphosts ファイルをあ らかじめ用意しておきます。このファイルに設定するホストは電話をかけて接 続してくるマシンの場合もあれば、あなたのマシンが接続する先のホストの場 合もあります。 /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. login name: は getpwuid(getuid()) で得た名前か tty 名が使われます 2. unused: passwd との互換性のためのフィールドで、特に使ってはいませ ん。 3. Remote Address: 接続先のホストの IP アドレスを数字か名前で指定しま す。 4. Local Address: このマシンの IP アドレスです。これも名前か数字で指定 します。 5. Netmask: はドット区切り 10 進表記で登録します。 6. Comment field: には何を書いても構いません。 7. protocol: 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 への SLIP 接続の MTU を 296 にしています。ま た、 Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006 この例では圧縮をかけた cSLIP を使って 145.71.34.1 のアドレスに MTU 1006 で接続します。 お分りのように、あらかじめ割り当てた IP アドレスを使って接続してくるユ ーザ用には /etc/diphosts にエントリを設けておく必要があります。また、 特定のポートにアクセスしたユーザ全てに同じ IP アドレスを割りあてるよう な設定の場合は tty デバイスのエントリを用意して、ユーザ名のエントリは 作りません。少なくとも、どのモデムに当っても適切な設定が行われるよう に、それぞれの tty デバイスごとの設定はしておくことをお忘れなく。 ユーザがログインしてくれば、通常のログイン名とパスワードの入力プロンプ トが表示されます。そのプロンプトに対して SLIP ログイン用のユーザ名とパ スワードを入力します。それらが正しければ特にメッセージは表示されず、自 動的に接続端を SLIP モードに変更し、diphosts ファイルの指定に従って設 定します。 6.26.3. dSLIPパッケージを使ったSLIPサーバ Matt Dillton が着信のみならず、 SLIP の発 信にも使えるパッケージを作りました。彼のパッケージでは、小さなプログラ ムとスクリプトが集まって必要な設定を行います。スクリプトの一つは tcsh を使うので、このパッケージを使うには tcsh をインストールする必要があり ます。また、Matt は少くとも一つのスクリプトが使う expect のバイナリ パッケージも配布しています。このパッケージを自由に使うには expect を 使った経験が必要ですが、だからといって後込みすることはありません。 このパッケージには、Matt が書いた詳しい README ファイルが付属している ので、ここではそれを繰り返すことはしません。 dSLIP パッケージは以下のサイトから入手できます。 apollo.west.oic.com /pub/linux/dillon_src/dSLIP203.tgz あるいは、以下のサイトからも入手できます。 sunsite.unc.edu /pub/Linux/system/Network/serial/dSLIP203.tgz make install する前に README ファイルを読んで、適切な /etc/passwd と /etc/group エントリを作ることをお忘れなく。 6.27. 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 の web サーバから必要な改造版 のツールをダウンロードする必要があります。どのソフトウェアが必要かにつ いてはMosquitoNet STRIP Page を見てください。 設定方法を簡単に述べると、改造された slattach プログラムを使ってシリア ルの tty デバイスを STRIP 用に設定して、`st[0-9]' デバイスを、一つの重 要な例外を除いて、イーサネットのように設定します。重要な例外とは、技術 的な理由から STRIP では ARP プロトコルをサポートしていないことで、サブ ネットのホストごとに ARP エントリを手動で設定してやる必要があります。 これはそれほど大変な仕事でないと分るでしょう。 6.28. Token Ring トークン・リングのデバイス名は `tr0' や `tr1' のようになります。トーク ン・リングは IBM の提案した LAN プロトコルで、一時に 1つの LAN 上のノ ードしかデータの転送をしないようにして、通信のコリジョン(衝突)を防ぐよ うになっています。このために使われるのが「トークン」で、この「トーク ン」がそれぞれのノードを順に回り、「トークン」を持ったノードのみがデー タを送ることができます。データを送り終ればトークンを次のノードに送りま す。このように、トークンが全てのノードを順に巡るので「トークン・リン グ」という名前になっています。 カーネルコンパイル時のオプション: Network device support ---> [*] Network device support .... [*] Token Ring driver support < > IBM Tropic chipset based adaptor support トークン・リングの設定はネットワークデバイスの名称が異なるだけでイーサ ネットの場合と同じです。 6.29. X.25 X.25 はパケットスイッチングプロトコルで、C.C.I.T.T. (世界中のほとんど の地域のテレコミュニケーション会社の標準規格を作る団体)が定義していま す。X.25 と LAPB プロトコルの実装は現在進行中で、最新の 2.1.* カーネル に進行中の作業が組みこまれています。 Linux における X.25 の実装については Jonathon Naylor jsn@cs.nott.ac.uk が開発のリーダになっており、専用のメーリングリストもあります。メーリン グリストに参加するには、 majordomo@vger.rutgers.edu 宛に 、本文に "subscribe linux-x25"とだけ書いたメールを送ってください。 設定用ツールも初期バージョンが Jonathon の ftp サイト ftp.cs.nott.ac.uk から入手できます。 6.30. WaveLan Card Wavelan のデバイス名は `eth0'、`eth1' のようになります。 Kernel Compile Options: Network device support ---> [*] Network device support .... [*] Radio network interfaces .... <*> WaveLAN support WaveLAN カードはスペクトラム拡散法(spread spectrum)を使った無線 LAN カ ードで、カードそのものはイーサネットと同じように扱え、イーサネットカー ドと同じ方法で設定できます。 Wavelan カードについての情報はWavelan.com か ら入手できます。 7. ケーブルと接続方法 ハンダごてを使ったことのある人ならば、2 台の Linux マシンを接続するた めのケーブルも簡単に自作できます。以下に示す結線図が参考になるでしょ う。 7.1. シリアル・ヌル・モデムケーブル 全てのヌルモデムケーブルが同じわけではありません。多くのヌルモデムケー ブルでは、適切な信号が来ているとコンピュータに思わせて、送信と受信のデ ータを入れ替えるような細工をしています。この種のケーブルでも動作します が、この場合はハードウェアフロー制御よりも効率のよくない (XON/XOFF を 使った)ソフトウェアフロー制御を使わなけれないけません。以下に示す配線 では2 台のマシンの間で正しく信号をやりとりでき、ハードウェア(RTS/CTS を使った)フロー制御も可能です。 Pin Name Pin Pin 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 7.2. パラレルポート用ケーブル(PLIP ケーブル) PLIP プロトコルを使って 2 台のマシンを接続する場合、以下に示すケーブル を使えば、どんな種類のパラレルポートでも接続できます。 Pin Name pin pin 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 ケーブルを使うとコントロールカードが破壊 されるかも知れません。 全ての配線をダブルチェックして、将来の不要な 手間や頭痛のタネが無くなるように、充分注意して配線してください。 7.3. 10base2 (thin coax) イーサネットケーブル 10base2 は直径約 5 mm の 52Ωの同軸ケーブルを使うイーサネットケーブル の規格です。10base2 でマシンを接続する場合、いくつか覚えておかなければ ならない重要なルールがあります。まず第一に、ケーブルの 両端にターミネ ータを付けること。52Ωの抵抗値をもつターミネータを付ければ、ケーブルの 端に達した信号は反射されずに吸収されます。ターミネータを付けないとイー サネットは不安定になり、全く使えなくなることもあります。通常、コンピュ ータを接続する部分には「T 型」のコネクタを使うので、配線は以下のような 形になります。 |==========T=============T=============T==========T==========| | | | | | | | | ----- ----- ----- ----- | | | | | | | | ----- ----- ----- ----- この図のうち、両端にある `|' はターミネータで、 `======'は両端に BNC プラグを付けた同軸ケーブル、`T' は「T 型コネクタ」を表します。「T 型コ ネクタ」間の同軸ケーブルと PC のイーサネットカードとの接続の長さは可能 な限り短くしましよう。理想的には「T 型コネクタ」から直接イーサネットに 接続する形が最善です。 7.4. ツイストペア(Twisted Pair)イーサネットケーブル 2 枚のツイストペアタイプのイーサネットカードを接続したいだけなら、ハブ 無しに直結しても構いません。そのためのケーブルの配線はEthernet-HOWTO に書いてあります。 8. この文書で使っている用語集 以下に、この文書に現われる重要な(単)語について簡単に説明します。 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 Acess 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 Maximum Segment Size(MSS)とは、一時に送信できるデータの最大量で す。データが細分化されないためには MSS は (MTU - IP ヘッダ) バイ ト以上が必要です。 MTU MTU(Maximum Transmission Unit)とは、より小さな断片に分割せずに IP インターフェイスから送信できる最大のデータグラムの大きさを示 すパラメータです。MTU は、分割されたくないデータグラムの大きさよ りも大きくしなければいけません。ただし、この設定はローカルな断片 化を避けるためのもので、経路上のどこかでより小さな MTU が設定さ れていれば、そこで分割されるかも知れません。よく使われる値として は、イーサネットインターフェイスでは 1500 バイト、SLIP インター フェイスでは 576 バイトです。 経路(route) route とは、目的地に達するまでのデータグラムが通過していく道順に なります。 サーバ(server) 通常、ユーザから遠い側にあるソフトウェアかシステムを指しま す。1つのサーバが複数のサービスを1つ、あるいは複数のクライアント に提供できます。サーバの例としては、ftp や NFS(Networked File System)、 DNS(Domain Name Service|Server) などがあります。slip や ppp など、一対一(peer to peer)接続の場合、サーバは電話を受け たり、クライアントから呼び出される側を指します。 window ウィンドウ(window)とは、受信端が一時に受けとれるデータ量の最大値 です。 9. ISP 用の Linux ? Linux を ISP に使いたい場合、 Linux ISP homepage が参考になります。このページには必要 な情報へのポインタが豊富に登録されています。 10. 謝辞(Acknowledgements) この文書を書くにあたって、さまざまな貢献をいただいた以下の人々に感謝し ます(順不同) Axel Boldt, Arnt Gulbrandsen, Gary Allpike, Cees de Groot, Alan Cox, Jonathon Naylor 11. Copyright. The NET-3-HOWTO, information on how to install and configure networking support for Linux. Copyright (c) 1997 Terry Dawson. The NET-3-HOWTO、Linux でサポートされているネットワーク機能のインスト ールと設定についての情報、は Terry Dawson が著作権を有しています。 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. この文書は copyleft で保護されています。すなわち、Free Software Foundation の GNU General Public License に基づく限り、この文書を自由 に再配布したり修正しても構いません。 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. この文書は役に立つように書かれていますが、一切の保証はありません。入手 できかどうかも特定の目的に適応するかどうかも保証できません。詳細につい ては GNU General Public License を御覧ください。 You should have received a copy of the GNU General Public License along with this program; if not, write to the: GNU General Public Licence はこの文書と共に入手できるはずですが、入手 できない場合は以下に連絡してください。 Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.