Linux PPP HOWTO Robert Hart, hartr@hedland.edu.au v2.2, 25 August 1996 こじまみつひろ isle@st.rim.or.jp (1997/01/30) この文書では Linux PC を PPP サーバに接続する方法、2 つのネットワーク を PPP でつなぐ方法、あなたの Linux マシンを PPP サーバにする方法につ いて説明します。 ______________________________________________________________________ 目次 1. イントロダクション 1.1 クライアントと使えるサービス 1.2 ディストリビューションごとの違い 2. IP 番号 3. この文書の目的 3.1 PPP クライアントを設定する 3.1.1 DIP は使わずに CHAT を使う 3.2 PPP サーバの設定 3.3 2 つの LAN、あるいは LAN とインターネットを PPP で接続する方法 3.4 この文書が扱わない問題、、 4. この文書で扱うソフトウェアのバージョン 5. その他の有用/重要な文書 5.1 有用な Linux 関連のメーリングリスト 6. Linux カーネルの設定 7. Linux カーネルソースのインストール 8. ハードウェアについて 9. カーネルのコンパイル - Linux 1.2.13 の場合 9.1 カーネルのコンパイル - Linux 1.3.x と 2.0.x の場合 9.2 PPP-2.2 と /proc/net/dev について 9.3 カーネル設定のその他の設定について 10. PPP 接続をするために必要な情報 10.1 モデムを経由した外部への接続テスト 11. シリアルポートとそのスピードについてのメモ 12. モデムの設定 12.1 シリアルポートのフロー制御について 13. PPP とルート権限 14. PPP 接続用設定ファイル 14.1 options.tbl ファイル 14.2 どのオプションを指定すべき? 14.2.1 /etc/ppp/options(PAP/CHAP を使わない場合) 14.2.2 /etc/ppp/options (PAP/CHAPを使う場合) 15. /etc/resolv.conf ファイルの設定 16. PAP/CHAP の認証ファイル 16.1 PAP の認証ファイル 16.2 CHAP の認証ファイル 17. PPP 接続を手動で起動 18. 接続を自動化するには - 接続用スクリプトの作り方 18.1 ユーザ名とパスワードをつかった認証の場合 18.2 ppp-on スクリプト 18.3 PPP 起動スクリプトの修正 18.3.1 ppp-on スクリプト 18.3.2 サーバ側での PPP の開始 18.3.3 ppp-on-dialer スクリプト 18.4 chat スクリプトの意味するもの 18.5 PAP/CHAP 認証を使う場合のスクリプト 18.6 pppd のデバッグと -f で指定するオプションファイル 19. 接続スクリプトのテスト 20. PPP 接続の終了 21. デバッグ 21.1 PPP をコンパイルしたのですが、Linux が認識してくれません。 21.2 デフォルトルート(default route)を設定できません。 22. 2 つのネットワークを PPP でつなぐには 22.1 IP 番号の設定 22.2 経路の設定 22.3 ネットワークセキュリティ 23. 接続が確立した後、、 23.1 特別の経路設定 23.2 e-mail の処理 24. リンクの終了 25. LAN のルーティングに関わる問題 25.1 セキュリティについてのメモ 26. どうしようもないときに。 27. 接続がうまくいってから起きやすい問題 27.1 PPP サーバから先へ接続できません。 27.2 e-mail を出せるんですが受けとれません。 27.3 なぜ他の人が finger や WWW, gopher、talk で私のマシンに接続できないのでしょう。 28. 動的な IP 番号でインターネットの各種サービスを使うには 28.1 e-mail の設定 28.2 ローカルなネームサーバの設定 29. PPP サーバの設定 29.1 カーネルのコンパイル 29.2 サーバシステムの概要 29.3 ソフトウェアを集める 29.4 標準的な(シェル経由の)接続。 29.5 PPP のオプションファイルの設定 29.6 pppd をユーザが(うまく)動かせるように設定する 29.7 pppd 用のエイリアスの設定 30. PPP をヌルモデム(シリアル直結)で使うには ______________________________________________________________________ Copyright The copyright of this document is retained by the author. Permission is granted to distribute the document by electronic means and on CDs provided that it is kept entirely in its original format. Permission is also granted to print a copy of this document for personal use. The republishing of this document in part or in whole without the permission of the copyright holder by any means other than as noted above is prohibited. この文書の著作権は著者が保持しています。この著作権表示がそのまま残され る限り、どのような電気的な方法でも、あるいは CD を用いた再配布も許可し ます。また、個人な使用ならばこの文書をプリントアウトすることも認めま す。 上記以外の方法によるこの文書の一部、あるいは全体の再配布は、著者が許可 しない限り禁止します。 配布 この文書はバージョンが新しくなるごとにcomp.os.linux.answersに投稿され ます。また、以下のURLからHTML版も入手可能です。 o Linux Howto Index その他のフォーマット(SGML、ASCII、postscript、DVI)も Howtos - other formats から 入手できます。 sunsite.unc.edu はつねに高負荷状態になっていますのでお近くのミラーサイ ト(例えばftp.hitachi.co.jp)をご利用ください。 謝辞 この文書を準備するために多くの人々が助けてくれました。特に PPP そのも のについて教えてくれた Al Longyear(もちろん、この文書に間違いがあれ ば、それは私の責任です)、Linux Howto のメンテナンス担当の Greg Hankins、 linuxdoc-sgml パッケージの設定を助けてくれた Daniel Berinson(締切に 3 日しかなかった時に)、文書のスタイルや内容、順序、論 理、説明の明確さについて多くの助言を与えてくれた Debi Tackett(MaximumAccess.com)に感謝します。 私に e-mail でさまざまなコメントをくださった多くの方々にも感謝します。 他の HOWTO の著者同様、この文書が手助けとなった人々から感謝されること が我々の唯一の報酬であり、それで十分なのです。この文書を書くことで、私 を含めた全ての Linux ユーザーが負っている、私たちの大好きな OS を作 り、メンテナンスしてくれている人々に対する借りを少しでも返すことができ れば、と思っています。 1. イントロダクション PPP(Point to Point Protocol)はシリアル接続上に IP(Internet Protocol)や その他のネットワークプロトコルを構築し、稼働させるための仕組みです。 PPP はヌルモデム経由の直結したシリアル接続や telnet 上、あるいはモデム と電話回線を経由した接続の上でも張ることが可能です。PPP を使えばあなた の Linux PC を PPP サーバに接続し、そのサーバが接続しているネットワー ク資源にあたかも(ほとんど)直接そのネットワークに接続しているかのように 使うことが可能になります。 また、あなたの Linux PC を PPP サーバとして設定すれば、他のコンピュー タから電話回線経由で接続し、あなたの Linux PC と/あるいは、ネットワー クにアクセスすることが可能です。 PPP は一対一の通信方式ですが、PPP を使って 2 台の Linux PC をつない で、 2 つのネットワークを接続すること(あるいはローカルネットワークをイ ンターネットに接続すること)も可能です。 PPP とイーサネット接続の大きな違いの一つはスピードです。標準的なイーサ ネット接続の理論的な最大転送速度は 10Mbps(一秒あたり百万ビット)です が、 PPP の場合、最速のモデムでも 33.6kbps(1 秒あたり 1000 ビット)で す。また、PPP 接続の形態によっては使えるアプリケーションやサービスに制 限が生じることもあります。 1.1. クライアントと使えるサービス PPP は厳密な一対一のプロトコルです;すなわち、(技術的には)電話をかける 側のマシンと受ける側のマシンに違いはありません。しかしながら、話を分り やすくするためにサーバとクライアントという区別を付けて使うことにしま す。 電話をかけて PPP 接続を確立する側のサイトをクライアントと呼び、接続先 のマシンをサーバと呼ぶことにします。 電話を受けて PPP 接続を用意する側の Linux マシンを設定する場合、PPP サーバを設定しているわけです。 全ての Linux PC は PPP のサーバにもクライアントにもなれます。複数のシ リアルポート(と必要ならばモデム)があれば、一台のマシンがサーバとクライ アントに同時になることも可能です。上述のように、PPP 接続が成立してしま えばクライアントとサーバの間には何の違いもありません。 この文書では電話をかける側のマシンをクライアントとし、電話を受けて、( ユーザー ID やパスワード、あるいはその他の仕組みで)ユーザー認証をする 側のマシンをクライアントと呼ぶことにします。 ほとんどの人は、PPP をクライアント側で使い、インターネットに接続してい るマシンに接続することに興味をお持ちでしょう。その場合、彼らは PC をク ライアントとして使っているわけです。 この文書に説明している手順に従えば、インターネットに自動的に接続するこ とも可能になります。 加えて、Linux PC を PPPサーバとして設定する方法について解説し、 PPP を 使って 2 つの LAN を(完全なルーティングで)接続する方法についても説明し ます(これは WAN - Wide Area Network - 接続でよく見られる方法です)。 1.2. ディストリビューションごとの違い 世の中にはさまざまな Linux のディストリビューションがあり、それぞれに 独自の方法を持っています。 Linux(Unix) マシンを起動する際の設定方法と各種のインターフェイスの設定 方法には、大きく 2 つの方法があります。 一つはBSD スタイルの起動方法であり、もう一つはSystem V スタイルの起動 方法です。いくつかの Unix に関したニュースグループをご覧になった方なら ば、両者の間に時として起こる聖戦を見聞きしたこともあるでしょう。その種 の議論に興味があれば参加してみることも面白いかも知れません。 多分 Linux でもっとも広く使われているディストリビューションのうち、 o Slackware は BSD スタイルの起動方法を採用しており、 o Red Hat (とそれに由来する Caldera) は SysV スタイルの起動方法を採用しています。 BSD スタイルの起動方法では、起動用のファイルは /etc/... にあり、以下の ようなファイルになっています。 ______________________________________________________________________ /etc/rc /etc/rc.local /etc/rc.serial ______________________________________________________________________ System V スタイルの起動方法では、起動用のファイルは /etc/rc.d/... にあ り、多くのサブディレクトリが用意されています。 ______________________________________________________________________ drwxr-xr-x 2 root root 1024 Jul 6 15:12 init.d -rwxr-xr-x 1 root root 1776 Feb 9 05:01 rc -rwxr-xr-x 1 root root 820 Jan 2 1996 rc.local -rwxr-xr-x 1 root root 2567 Jul 5 20:30 rc.sysinit drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc0.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc1.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc2.d drwxr-xr-x 2 root root 1024 Jul 18 18:07 rc3.d drwxr-xr-x 2 root root 1024 May 27 1995 rc4.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc5.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc6.d ______________________________________________________________________ イーサネットインターフェイスやそれに関連するネットワークの経路制御がど のように設定されているかを調べるには、これらのファイルをチェックして、 実際にそれらを行なっているコマンドを見付ける必要があります。 いくつかの例では(例えば Red Hat と Caldera) X ウィンドウベースの PPP 設定ツールが付属している場合があります。しかしながら、この HOWTO で は、そのような特定のディストリビューションに依存したツールの説明はしま せん。それらのツールで問題が生じた場合は、ディストリビューションの作成 元に直接尋ねてください。 2. IP 番号 インターネットに接続する全てのデバイスは独自の IP 番号を持っていなけれ ばなりません。IP 番号を管理するための組織は各国ごとに設置されていま す。 LAN を経由してインターネットに接続する場合、あらかじめその LAN 用に割 り当てられた IP 番号の中から、LAN に接続している全てのコンピュータとデ バイスの IP アドレスを設定しなければいけません。勝手に捏造した IP 番号 を使って LAN (インターネットは言うまでもなく)に接続してはいけません。 最悪の場合、単に動かないだけでなく、あなたの「盗んだ」 IP 番号が、既に その番号を使っているコンピュータの通信と干渉して大混乱をもたらす可能性 すらあります。 この文書の中で使う IP 番号は(いくつかの例外を除いて)、インターネットに 接続しないネットワーク用にあらかじめ用意されている番号の中から選んでい ることに注意してください。 インターネットに接続していない LAN 用に用意された IP 番号は以下の通り です。 o Class A のアドレス 1 つ 10.0.0.0 - 10.255.255.255 o Class B のアドレス 16 172.16.0.0 - 172.31.255.255 o Class C のアドレス 256 192.168.0.0 - 192.168.255.255 あなたの国の IP 番号の管理組織から IP 番号を割当ててもらっていない (閉 じた)LAN には、上の IP 番号の中から一連の番号を割りあてて使ってくださ い。 これらの IP 番号はインターネットに接続しているデバイスには決して使って はいけません。しかしながら、インターネットに接続しているマシンのローカ ルなイーサネットインターフェイスに割当てることは可能です。なぜなら、IP 番号というのは実際にはネットワークインターフェイスに付けるものであり、 コンピュータに付けるものではないからです。ですから、イーサネットイン ターフェイスが (例えば)10.0.0.1 であっても、PPP を使ってインターネット に接続する場合、PPP インターフェイスに別の(有効な) IP 番号をサーバから 割り当ててもらえば、PPP 経由でインターネットに接続することは可能です。 この場合、あなたのマシンからはインターネットに接続できますが、LAN に接 続した他のコンピュータからは接続できません。 しかしながら、Linux と ipfwadm ソフトの IP masquerade 機能を使えば、 LAN に接続した他のマシンからもインターネットに接続することが可能になり ます(使えるサービスに多少の制限はありますが)。 masquerade 機能の詳細については IP Masquerade mini-HOWTO(Linux IP Masquerade mini HOWTO をご覧ください。 「一台のマシンを PPP を使ってプロバイダ経由でインターネットに接続した い」というほとんどの一般ユーザーにとっては、IP 番号(より正確にはネット ワーク番号)を公式に割りあててもらう必要はありません。 小規模の LAN をインターネットに接続したい場合、多くのインターネット接 続サービスプロバイダ(ISP)が、あらかじめ用意してある IP 番号の中から専 用のサブネット(IP 番号の特定の組)を割り当てるサービスを用意していま す。 一台の PC を ISP 経由でインターネットに接続したいユーザに対して、ほと んどの ISP は動的な IP 番号の割り当てを行なっています。すなわち、接続 した際に ISP から、その接続の際にのみ有効な IP 番号をあなたの PPP イン ターフェイスに割り当てる、という仕組みです。 動的な IP 番号の割り当て機能の場合、割り当てられる IP 番号は接続するた びに異なります。この場合、サーバタイプのアプリケーション、すなわち sendmail や ftpd、httpd などはうまく使えません。動的な IP 番号の割り当 てによる制限について(と可能な範囲でその制限をくぐりぬける方法について) は後述します。 3. この文書の目的 3.1. PPP クライアントを設定する この文書では Linux と PPP を使って PPP サーバに接続し、PPP を使った IP 接続を張りたい人向けに解説をします。以下ではカーネルの再構築時に PPP ドライバがコンパイルされ、あなたの Linux マシンに PPP ドライバがインス トールされているものとします(ただし、PPP ドライバを使うためのカーネル の設定/コンパイルの方法についても簡単に説明します) 3.1.1. DIP は使わずに CHAT を使う DIP(SLIP 接続を張るための基本的な方法です)を使って PPP 接続をすること も可能ですが、DIP スクリプトは概してきわめて複雑なので、この文書の中で は DIP を使って PPP 接続を張る方法については説明しません。 その代り、この文書では Linux PPP が採用している一般的な chat/pppd を使 う方法を説明します。 3.2. PPP サーバの設定 この文書はあなたの Linux マシンを PPP サーバ(他の人があなたの Linux マ シンに電話をかけてきて PPP 接続を張ることを許可する場合)として設定する 方法についても説明します。 Linux マシンを PPP サーバとして設定する方法は何通りもあります。この文 書では(今のところ)そのうちの一つの方法のみを説明します。この方法は著者 が複数の小規模な PPP サーバを設定するために使ったものです(それぞれ 16 のモデムをつなぎました) この方法はうまく行くはずですが、必ずしも最善の方法ではありません。もし 誰かもっと簡単明瞭な PPP サーバの設定方法を御存知でしたら、ぜひこの文 書の著者に e-mail で教えてください。 3.3. 2 つの LAN、あるいは LAN とインターネットを PPP で接続する方法 この文書では PPP を使って 2 つの LAN を接続したり、LAN をインターネッ トに接続する方法について、基本的な情報を提供します。 3.4. この文書が扱わない問題、、 o モデムを Linux マシンに接続し設定する方法(の詳細) Serial-HOWTOを御覧ください。 o DIP を使って PPP 接続を張る方法 代りに chat を使います。 o socks や IP masquerade の使い方 これらについてはとてもよい文書が既に用意されています。 4. この文書で扱うソフトウェアのバージョン この HOWTO では Linux 1.2.x と PPP 2.1.2 の組み合わせ、あるいは Linux 1.3.x/2.0 と PPP 2.2 の組み合わせを前提にしています。 PPP 2.2.0 を 1.2.13 カーネルと組み合わせることも可能ですが、そのために はカーネルにパッチをあてる必要があります。この文書はこのような組み合わ せについては説明しません。 また、Linux 2.0.X シリーズのカーネルで PPP 2.1.2 を使うことはできない ことに注意してください。 この文書は 2.0.x の新機能である実行時ロード可能モジュールに関わる問題 については説明しません。詳細については kerneld mini-HOWTO と 2.0.x に 付属のカーネルモジュールに関する文書を読んでください(Linux 2.0.x の ソースツリーでは /usr/src/linux/Documentation/..以下のディレクトリに関 連文書がまとめられています)。 この文書は新しいユーザを助けることも意図して書いていますので、安定して いることがよく知られている適切なバージョンの Linux と PPP を使うことを 強くお薦めします。 5. その他の有用/重要な文書 以下の文書にも目を通されることをお勧めします。 o PPP 付属のドキュメント (/usr/doc.. 以下のディレクトリをご欄ください) o pppd と chat のマニュアルページ (man chat、man pppd すれば表示されます) o Linux Network Administration Guide (NAG) on line 版はThe Network Administrators' Guide から入手でき ます。 o NET-2/3 HOWTO Linux NET-2/3-HOWTO o /usr/src/linux/Documentation 以下にあるカーネルに関する文書類 o O'Reilly から出版されている Unix/Linux に関する優れた書籍。 (オンラ インのカタログ )もあります。Unix/Linux につい て初心者ならば、近くの書店まで走っていって(歩いてはダメ)何冊かを入 手してください。 Linux の文書類については、The Linux Documentation Project Home Page から初めるのがいいでしょう。[日本語に翻訳 された文書はJFの部屋 から辿れます。] この文書だけでも PPP 接続を使うことは可能なはずですが、上記の文書に目 を通せば実際に中で何が行なわれているかをより詳しく理解することができま す。また、何が問題になっているかを知るのにも役立つでしょう(少なくとも comp.os.linux... 以下のニュースグループでずっと賢く質問できるはずで す)。 上記の文書では(関連 RFC なども含め)この HOWTO では不可能な、より詳しい 情報が紹介され、詳細な解説がなされています。 PPP を使って LAN をインターネットに接続する場合、TCP/IP ネットワークに ついての知識も必要になります。上記の文書の他に、O'Reilly の "TCP/IP Network Administration"や "Building Internet Firewalls"が役に立つで しょう。 5.1. 有用な Linux 関連のメーリングリスト Linux に関する情報交換のためのメーリングリストはさまざまのレベルのもの があります。これらには興味深い問題も議論され、講読すれば経験が深まるこ とでしょう。 賢者への一言:いくつかのメーリングリストは上級者向けや特定の話題向けに なっています。それらのメーリングリストに入っても、ROM しているうちは誰 も文句を言いませんが、不適切なメーリングリストに「初心者の」質問をする と、かなり手厳しいコメント(フレームには至らなくても)を受けることでしょ う。といっても guru level のユーザが「初心者の」質問を嫌っているわけで はなく、それらのメーリングリストの目的が特定の話題を一定のレベル以上の 人の間で議論するためのものだからです。 とにかく公開されているメーリングリストに入ってみましょう。でも、その メーリングリストのテーマをお忘れなく。 Linux のメーリングリストについては、 Linux Mailing List Directory に詳しく 紹介されています。 6. Linux カーネルの設定 PPP を使うためには Linux カーネルに PPP 機能を組みこまなければなりませ ん。まだカーネルのソースコードを入手していなければ、ソースコードを手に 入れて Linux の標準的なソースコードのディレクトリである /usr/src/linux に置きましょう。 多くのディストリビューションが、自動的に/usr/src/linuxディレクトリに ソースツリー(ファイルやサブディレクトリ)をインストールするので、まずこ のディレクトリをチェックしてソースコードがインストールされていないか チェックしましょう。 Linux のカーネルソースは sunsite.unc.edu やそのミラーサイトから入手す ることが可能です。 7. Linux カーネルソースのインストール 以下にLinux カーネルのソースコードを入手してインストールするための手順 を簡単に示します。詳細な手順はThe Linux Kernel HOWTO をごらんください。 Linuxカーネルをインストールしてコンパイルするにはルート権限が必要で す。 1. /usr/src ディレクトリへ移動 cd /usr/src 2. /usr/src/linux 以下にソースがインストールされていないか確認 3. ソースコードが無ければLinux kernel source directory から入手します [国内では豊橋技術科学大学 から最新のカーネルが入手 できます。] (1.2.X などの)古いカーネルを探している場合、古いカーネルアーカイブ を探してください。 4. 適当なカーネルを選ぶ - 通常、2.0.xシリーズの最新のカーネルを選びま しょう。それをダウンロードしてtar ファイルを /usr/src に置きます。 注意:Linux のカーネルソースには多数のファイルがさまざまなディレク トリに格納されているので、'tar' ファイルはそれら複数のファイルをま とめたファイルになっており、通常圧縮されて(拡張子 .gz)います。tar ファイルはちょうど DOS の zip ファイルのようなものです。 5. すでにソースコードがインストールされていて新しいものに更新したい場 合、まず古いソースコードを削除してください。以下のコマンドを実行し ます。 rm -rf /usr/src/linux 6. 次に以下のコマンドでソースコードを展開します tar xzf linux-2.0.6.tar.gz 7. 次に cd /usr/src/linuxして README ファイルを読んでください。この ファイルにはどのようにカーネルの機能を設定してコンパイルするかが詳 しく解説されていますので、まずこのファイルを読むことをお勧めします( プリントアウトして手元に置いておくのもいいでしょう。カーネルをコン パイルする際にはかなり時間がかかるので、その間に README をじっくり 読んでみましょう) 8. ハードウェアについて カーネルを再コンパイルするためには、あなたの PC に組みこまれているカー ドやデバイスについて知っている必要があります。いくつかのデバイス(例え ばサウンドカード)ではより詳しい設定(IRQ や I/O アドレスなど)を知ってお く必要もあります。 9. カーネルのコンパイル - Linux 1.2.13 の場合 設定プロセスを始める際には、インストールを正しく行うために README ファ イルの指示に従ってください。カーネルの設定は make config で始めます。 PPP を使うためには PPP 機能をカーネルに組みこむように設定します(PPP は pppd とカーネルに組みこまれた PPP ドライバの双方が必要です)。 ______________________________________________________________________ PPP (point-to-point) support (CONFIG_PPP) [n] y ______________________________________________________________________ その他の設定は、あなたの PC に組みこまれたハードウェアや使いたい Linux の機能に合せて選択してください。次に、README に従ってコンパイルし、新 しいカーネルをインストールします。 1.2.13 カーネルでは 4 つの PPP デバイスしか作りません。マルチポートシ リアルカードを使う場合、カーネルの PPP ドライバのソースを修正して、よ り多くのポートが使えるようにしてください(必要な修正の詳細については PPP-2.1.2 付属の README.linux に説明してあります)。 注意:1.2.13 の make config の設定は後には戻りません。ですから、間違え た場合は CTRL C を押して終了し、再度始めから設定してください。 9.1. カーネルのコンパイル - Linux 1.3.x と 2.0.x の場合 2.0.x でも 1.2.13 と同様の手順になります。この場合も、ソースを正しくイ ンストールするには README ファイルの指示に従ってください。カーネルの設 定は make config で始めます。 2.0.x では make menuconfig も使えます。 make menuconfig はメニューベースの設定システムで、オンラインヘルプも用 意され、好きなところから設定することが可能です。 X ウィンドウベースの設定システムである make xconfig を使うことも可能です。 PPP 機能は直接カーネルに組みこむこともできますし、実行時ロードモジュー ルとしてコンパイルすることも可能です。PPP を使うのはごく限られた時間だ け、という場合は PPP 機能はモジュールとしてコンパイルした方がいいで しょう。'kerneld' を使えば PPP 接続を開始しようとした際に自動的に PPP 接続に必要なモジュールを組みこむことができます。こうしておけばメモリ空 間を節約できます:カーネル本体がメモリからスワップアウトすることはあり ませんが、'kerneld' が組みこんだ実行時ロードモジュールは、必要が無くな れば自動的に取りはずされます。 kerneld を使うためには、動的ロードモジュールを使用可能にします。 ______________________________________________________________________ Enable loadable module support (CONFIG_MODULES) [Y/n/?] y ______________________________________________________________________ PPP 機能をカーネルに組みこむ場合、以下の設定をします。 ______________________________________________________________________ PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?] ______________________________________________________________________ PPP をモジュールにする場合はMと答えます。カーネルに組みこみたい場合はY と答えてください。 1.2.13 とは異なり、2.0.x のカーネルでは PPP デバイスは必要に応じて動的 に作成されるので、PPP デバイスの制限数に関する修正を行う必要はありませ ん。 9.2. PPP-2.2 と /proc/net/dev について PPP-2.2 を使っている場合、デバイスが動的に作成される機能の副作用とし て、 pppd を起動するまでは /proc/net を見ても PPP デバイスは見つかりま せん ______________________________________________________________________ [hartr@archenland hartr]$ cat /proc/net/dev Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 92792 0 0 0 0 92792 0 0 0 0 0 eth0: 621737 13 13 0 23 501621 0 0 0 1309 0 ______________________________________________________________________ しかしながら、いったん PPP サービスを開始すれば、必要なデバイスは以下 のように見えるようになります(私の運用している ppp サーバの例です) ______________________________________________________________________ [root@kepler contrib]# cat /proc/net/dev Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 428021 0 0 0 0 428021 0 0 0 0 0 eth0:4788257 648 648 319 650 1423836 0 0 0 4623 5 ppp0: 2103 3 3 0 0 2017 0 0 0 0 0 ppp1: 10008 0 0 0 0 8782 0 0 0 0 0 ppp2: 305 0 0 0 0 297 0 0 0 0 0 ppp3: 6720 7 7 0 0 7498 0 0 0 0 0 ppp4: 118231 725 725 0 0 117791 0 0 0 0 0 ppp5: 38915 5 5 0 0 28309 0 0 0 0 0 ______________________________________________________________________ 9.3. カーネル設定のその他の設定について あなたの Linux マシンを PPP サーバとして設定する場合、IP フォーワード 機能も組みこんでおく必要があります。IP フォーワード機能は、複数の LAN を接続する場合や LAN をインターネットに接続する場合も必要です。 LAN をインターネットに接続する場合(あるいは 2 つの LAN を接続する場 合)、セキュリティについて注意しなければなりません。カーネルに IP ファ イアーウォールの機能を組みこむことも必須です。 以前に述べたように、閉じたネットワーク用の IP 番号を使っているネット ワークをインターネットに接続する場合、IP masquerade の機能が必要になり ます。 コンパイルしたカーネルをインストールして再起動すれば、PPP 接続の設定と テストが可能になります。 10. PPP 接続をするために必要な情報 サーバと PPP 接続する際には以下の情報が必要になります(PPP サーバのシス テム管理者か ISP のユーザサポート窓口に問い合わせてください) o PPP サービスをやっている電話番号 会社などの構内回線から接続する場合、外部へ接続するための内線番号も 必要です。これはたいてい 0 か 9 になっているでしょう。 o サーバが動的な IP 番号の割り当てを行なっているかあらかじめ決められ た IP 番号を使っているか PPP 接続にあらかじめ決まった IP アドレスを使うようになっている場 合、 PPP の接続の際に使う IP 番号も必要になります。 ほとんどの ISP では動的な割り当てを行なっているはずです。上述のよう に、動的な割り当ての場合、利用可能なサービスにいくつかの制限が生じ ます。 o あらかじめ決まった IP 番号を使う場合、ネットワークマスクも必要にな るので ISP に問い合わせておいてください。 o ISP のネームサーバ(Domain Name Servers)のIP 番号は? ネームサーバのアドレスが最低 1 つは必要です。 o サーバは PAP/CHAP 認証を使っていますか? そのような場合、接続には認証に必要な ID や鍵(secret)が必要となりま す (通常はあなたのユーザー名とパスワードが使われます) o 接続すればサーバが自動的に PPP 接続を開始するのか、一旦 login して から PPP を起動するためのコマンドが必要になるのか? PPP を起動するためのコマンドが必要ならば、そのコマンド名は? これらの情報をきちんとメモしてから先に進みましょう。 10.1. モデムを経由した外部への接続テスト モデムが正しく設定されており、どのシリアルポートにつながっているかを確 認してください。 たいてい以下のようになります o DOS com1: = Linux /dev/cua0 (と /dev/ttyS0) o DOS com2: = Linux /dev/cua1 (と /dev/ttyS1) 等々 一度、通信ソフト(minicom のような)を使って、PPP サーバの電話番号に正し くアクセスできるか確認してみましょう。 (注意:この段階ではまだ PPP 接続を試してはいけません - 電話番号が正し いか、PPP 接続を始めるためにサーバが接続時にどのようなメッセージを送っ ているかを正確に知ることが重要です) この段階では、通信ソフトのログ機能を使って接続過程をファイルに落すか、 注意深く(きわめて注意深く)、サーバからどのようなプロンプトが送られてき て、どの段階でユーザ名とパスワードを入力しなければいけないかを(PPP 接 続を行なうために必要なコマンドも)正確に書き写してください 少なくとも 2 回は電話をかけておいた方がいいでしょう。サーバによっては 接続の際にプロンプトが変わる場合も(例えば時間を表示するなど)あります。 あなたの Linux マシンが絶対知っておかなければならない 2 つの重要なプロ ンプトは o ユーザ名を入れるためのプロンプト; o パスワードを入れるためのプロンプト; の 2 つです。 サーバで PPP を起動するために何らかのコマンドが必要な場合、接続してか らそのコマンドを実行する際のプロンプトも知っておかねばなりません。 接続先のサーバが自動的に PPP 接続を開始する場合、その電話番号にログイ ンすると画面に意味不明な文字列が表示されるはずです。これらは PPP サー バがあなたのマシンに PPP 接続を開始して各種の接続を行うために送ってい る情報です。 この文字列は以下のような形式になっています。 ~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y} (そしてずっと来続けます!) この段階でモデムの接続を切りましょう(通常、+++ を素早く入力し、ATHO コ マンドを送れば、モデムは回線を切断して OK を返すはずです) いくつかのシステムではサーバにログインしてから PPP を明示的に起動する 必要があります。通常、 PPP でも通常のシェル環境でも同じユーザ名とパス ワードで接続できるようになっている場合にこのような設定がされているはず です。このような場合、一旦ログインしてから必要なコマンドを実行してみま す。すると、サーバが送ってくる意味不明の PPP 接続起動のための文字列が 画面に表示されるはずです。確認したら回線を切断しましょう。 サーバが PPP 接続を開始しても、画面にその種の文字列が表示されない場 合、多分(絶対ではありませんが)あなたが何か間違っているはずです。 もしかすると、接続先の PPP サーバがパッシブモード(受信)で設定されてい るのかも知れません。パッシブモードで設定されているサーバはクライアント (あなたのコンピュータ)の側から PPP 接続を開始しないと何も反応を返しま せん。 しかしながら、ほとんどのサーバはアクティブモード(送信)で設定されてお り、接続すれば意味不明の文字列が表示されるはずです。 モデムが正しく動かない場合、まずモデムに付属のマニュアルを読みましょ う。次に、使っている通信ソフトのマニュアルや Serial HOWTO に目を通しま す。その後、上記の過程を再度試してみてください。 11. シリアルポートとそのスピードについてのメモ 高速な(外付け)モデム(14,400 Baud 以上)を使っている場合、シリアルポート もモデム以上の転送速度でデータをやりとりする必要があります。特にモデム がデータ圧縮機能を使っている場合、シリアルポートに速度が要求されます。 そのためのシリアルポートには、16550(A) といった新しい UART(Universal Asynchronous Reveiver Transmitter)を使う必要があります。古いマシン(あ るいは古いシリアルカード)を使っている場合、UART は 8250 になっているこ とが多いはずです。8250 UART では高速なモデムを使おうとすると問題を引き おこすことになります。 確認するには setserial -a /dev/ttySx してみてください。 こうすると、使っている UART の種類が表示されます。16550A タイプの UART を使っていない場合、新しいシリアルカードを購入した方がいいでしょう ($50 以下で入手できるはずです) 注意:初期バージョンの 16550 UART チップにはバグがあります。これは早期 に発見され、改良版の 16550A UART チップがリリースされました。しかし、 問題のあるチップがごく少数ですが市場に出まわっているようです。多分この チップに遭遇することは無いと思いますが、特に年代モノのシリアルカードの 場合、setserial が 16550A を使っていることを示すか確認してください。 12. モデムの設定 PPP からモデムを使えるように設定する必要があります。このためには モデ ムに付属のマニュアルを読んでください。ほとんどのモデムは工場出荷時の設 定 のままでも PPP から使えるはずです。最小限必要な設定は、 o ハードウェアフローコントロール(RTS/CTS) (Hayes 系のコマンドを採用し ている多くのモデムでは &K3です) です。 その他、チェックした方がいい設定は(標準的な Hayes コマンドで示します) o E1 コマンドで Echo を ON に(chat に必要) o Q0 コマンドでリザルトコードを返すように(chat に必要) o S0=0 で自動応答を OFF に(モデムが電話に答える場合は不要) o &C1 で接続後にキヤリアデテクトが ON になるように o &S0 で DSR が常に ON になるように o (機種によって違いますが) DTR も ON になるように コンピュータとモデムを接続する部分のモデムのシリアルインターフェイスが どうなっているかをチェックしておくのも有益です。たいていの新しいモデム ではシリアルインターフェイスの速度は固定になっており、電話回線の転送速 度は回線の状態によって自動的に接続可能な最高速にを選ぶようになっている はずです。 この方法は split speed operation と呼ばれ、お使いのモデムがこの機能を 持っている場合、モデムのシリアルインターフェイスは最高速度に固定して使 うのがいいでしょう(通常 115,200 baud ですが、14,400 baud モデムでは 38,400 までの場合があります) 通信ソフト(例えば minicom)を使って、モデムの設定を確認し、PPP に必要な 設定を行なってください。多くのモデムが AT&V で現在の設定状態を返すよう になっていますが、正確なところはモデムのマニュアルを参照してください。 設定がゴチャゴチャになってしまった場合、たいてい AT&F で工場出荷時の設 定に戻ります(私が試した新しいモデムでは工場出荷時の設定のままで PPP が 使えましたが、チェックしてみることをお勧めします)。 不揮発性の RAM に設定を保存します(通常、AT &W で設定を保存しますが、詳 細はモデムのマニュアルを御覧ください) 正しい設定を保存しておけば、モデムをリセットすればその設定が利用される ようになります。こうしておけば PPP 接続を張る際の chat スクリプトが ずっと簡単になるでしょう。 12.1. シリアルポートのフロー制御について データがシリアル回線を通過する際、コンピュータの処理速度よりも速くデー タが届く場合があります(コンピュータが別の重い仕事をしている場合など。 Linux はマルチユーザー、マルチタスク OS です)。そのような場合でもデー タを失わない(入力バッファからデータが溢れなければ無くなりません)ように するにはデータのフロー制御が必要になります。 シリアル回線のフロー制御には 2 つの方法があります。 o ハードウェアフロー制御(データ転送の際に Send/Request をクリアする - CTS/RTS) o ソフトウェアフロー制御(control S と control Q を使う) 通常のテキスト表示用のターミナルならば後者の方法でも構いませんが、PPP 接続の上を流れるデータは 8 ビット全てを使っているので cntl-S や cntl-Q がデータのどこかに現われる可能性はかなり高くなります。ですから、モデム がソフトウェアフロー制御を使っている場合、すぐに制御不可能になります。 8 ビット全てを使う PPP 接続ではハードウェアフロー制御が必須です。 13. PPP とルート権限 PPP ではカーネルのルーティングテーブルの変更といったネットワークデバイ スを設定する必要があるため、ルート権限が必要になります。 ルート以外のユーザが PPP 接続を設定する場合、pppd プログラムはルートに setuid しておく必要があります。 -r-sr-xr-x 1 root root 95225 Jul 11 00:27 /usr/sbin/pppd /usr/sbin/pppd がこのような設定になっていない場合、ルートになって chmod u+s /usr/sbin/pppd とします。 こうしておけば、ルート以外の一般ユーザが pppd のバイナリを実行しても、 pppd はルート権限で動くようになり、一般ユーザでもネットワークインター フェイスやカーネルのルーティングテーブルを設定するために必要な権限で pppd を実行することが可能になります。 ルートに setuid されたプログラムは潜在的なセキュリティホールになりがち なので、ルートに setuid する場合は特に注意してください。pppd を含めた ルートに setuid することが必須のプログラムはセキュリティには十分注意を 払って書かれているので、pppd を使う場合、setuid の問題はまず大丈夫で しょう(しかし保証はありません) 誰でも PPP 接続を開始できるようにするか否かといったシステムの使い方に 合わせて、ppp-on/off スクリプトの読み出しや実行の許可属性を設定してく ださい。あなた一人しかその PC を使わない場合、a+rx でいいでしょう。 しかし、PPP 接続を開始できる人を制限したい場合(例えば、あなたの子供も あなたの Linux マシンにアカウントを持っているけれど、彼らにはインター ネットへ接続させたくない場合)、PPP 接続用のグループを作って(/etc/group を修正して) o ppp-on/off スクリプトをルートと PPP グループの所有にし、 o ppp-on/off スクリプトの読み出し許可と実行許可を PPP グループにのみ 与えます。 -rwxr-x--- 1 root PPP 587 Mar 14 1995 /usr/sbin/ppp-on -rwxr-x--- 1 root PPP 631 Mar 14 1995 /usr/sbin/ppp-off o それ以外の許可属性は落しておきます。 o PPP を実行できるユーザのみを /etc/group を修正して PPP グループに登 録します。 このように設定しても、一般ユーザはソフトウェア的には PPP 接続を切れま せん。ppp-off スクリプトにはルート権限が必要です。しかしながら、モデム の電源は誰でも切れます! 私が家で使っているマシンでは pppd を root に setuid していません。 PPP を開始するために、私だけが知っているパスワードを使ってルートになって実 行しています。こうしておけば息子たちがインターネットに勝手に接続するこ とはできません。 14. PPP 接続用設定ファイル PPP を誰でも使えるように設定している場合でも、ここから先はルートで login してください。PPP 接続に必要なディレクトリを作り、設定ファイルを 修正します。 PPP は ppp 接続を設定するためにいくつかの設定ファイルを利用します。こ れらのファイルの場所や名前は PPP 2.1.2 と 2.2 ので多少異なっています。 PPP 2.1.2 の場合、必要なファイルは ______________________________________________________________________ /usr/sbin/pppd # pppd のバイナリ /usr/sbin/ppp-on # ダイアル/接続用スクリプト /usr/sbin/ppp-off # 接続終了用スクリプト /etc/ppp/options # pppd が全ての接続の際に使うオプション /etc/ppp/options.ttyXX # ポートごとに使うオプション ______________________________________________________________________ でした。 PPP 2.2 の場合、 ______________________________________________________________________ /usr/sbin/pppd # pppd のバイナリ /etc/ppp/scripts/ppp-on # ダイアル/接続用スクリプト /etc/ppp/scripts/ppp-on-dialer # 実際の chat スクリプト /etc/ppp/scripts/ppp-off # 接続終了用スクリプト /etc/ppp/options # pppd が全ての接続の際に使うオプション /etc/ppp/options.ttyXX # ポートごとに使うオプション ______________________________________________________________________ になっています。 御覧のように、/etc ディレクトリに ppp 用のディレクトリがあります。 drwxrwxr-x 2 root root 1024 Oct 9 11:01 ppp もしこのディレクトリが無ければ作ってください。 このディレクトリが存在していれば、options.tpl と呼ばれるオプション設定 ファイルのヒナ型ファイルがあるはずです。ただし、このファイルを含んでい ないディストリビューションも多いようなので、このファイルはこの文書中に 含めておきます。 このファイルには PPP の全てオプションの説明が書かれているので、打ち出 しておきましょう(pppd のマニュアルを合せて読めばより有益です)。この ファイルを /etc/ppp/options ファイルの元として使うこともできますが、多 分コメントアウトされている部分を削除した新しいファイルを作成する方がい いでしょう。そうした方がずっと短くなって、読みやすく、メンテナンスもし やすくなります。 複数のシリアル回線やモデムを使う場合(PPP サーバによくある場合)、全体の 設定ファイルである /etc/ppp/oprions には全ての電話を受けるシリアルポー トに必要なオプションを指定します。PPP 接続のために個別の設定の必要なシ リアル回線には別途個別設定用のファイルがあります。 個別設定用のファイルは options.ttyx1 や options.ttyx2 といった名称に なっています(x はお使いのシリアルポートの名称です) PPP 接続を一つしか使わない場合、全てを /etc/ppp/options ファイルで設定 しても構いません。また、全てのオプションを pppd を起動する際のオプショ ンとして指定することも可能です。 この方が /etc/ppp/options.ttySx に指定するよりも簡単です。PPP で複数の 異なるサイトに接続する場合、サイトごとの設定ファイル /etc/ppp/options.site を用意し、接続の際に必要なパラメータを設定ファイ ルに指定することも可能です。 14.1. options.tbl ファイル PPP のディストリビューションによっては options.tpl ファイルが無い場合 もありますので、以下に完全なファイルを付けておきます。このファイルを直 接修正して /etc/ppp/options ファイルなどを作らず、新しいファイルにコ ピーしてから修正することをお勧めします。そうしておけば設定がこんがら がってもオリジナルのファイルに戻って再出発できます。 ______________________________________________________________________ # /etc/ppp/options -*- sh -*- general options for pppd # created 13-Jul-1995 jmk # autodate: 01-Aug-1995 # autotime: 19:45 # 実行可能なプログラムかシェルスクリプトを使ってシリアル回線を設定します。 # このスクリプトでは "chat" を使ってモデムからダイヤルし、接続先の PPP # セッションを起動しています。 # #connect "echo You need to install a connect command." # pppd が接続を切った後に実行するプログラムかシェルスクリプトを指定しま # す。例えば、モデムがハードウェア制御信号で回線断しない場合などに、回線 # を接続するためのコマンドを実行することができます。 # #disconnect "chat -- \d+++\d\c OK ath0 OK" # 32-bit hex での async キャラクタマップの指定。32 ビットの各ビットが # pppd が受信の際にそのキャラクタをエスケープするかどうかを指定します。 # 0x00000001 は \x01, 0x800000000 は \x1f を示します。 #asyncmap 0 # ネットワーク用のパケットをやりとりする前に接続先に認証を求めます。 # #auth # シリアルポートのフロー制御にハードウェアフロー制御を使います。 # #crtscts # XON/XOFF といったソフトウェアフロー制御を使います。 # #xonxoff # IPCP のネゴーシエションがうまくいった場合、接続先をゲートウェイにする # ような経路制御(default route)をシステムの経路制御表に加えます。この経 # 路は PPP 接続が終了した段階で削除されます。 # #defaultroute # 伝送時に特定のキャラクタをエスケープします(接続先がそのキャラクタを # async control character map で指定しているか否かにかかわらず)。エスケー # プするキャラクタはコンマで区切った 16 進表記で指定します。asyncmap オ # プションではコントロールコードしかエスケープできないのに対し escape オ # プションではあらゆるキャラクタがエスケープできることに注意してください。 # エスケープできないかも知れないキャラクタは 0x20 -0x3f と 0x5e です。 # #escape 11,13,ff # モデムの制御線を使いません。 # #local # pppd が UUCP スタイルのロックファイルを作って、他のプログラムがシリア # ルデバイスをアクセスしないようにします。 # #lock # モデムの制御線を操作します。Ultrix ではこのオプションは crtscts オプショ # ンと同じハードウェアフロー制御も含みます(このオプションは完全に実装さ # れているわけではありません) # #modem # 接続相手にMRU[Maximum Receive Unit]の値を にするように相談します。 # この指定により接続先に バイト以下のパケットは送らないように指定し # ます。MRU の最小値は 128 で、デフォルト値は 1500 です。遅い回線では # 296 を推奨します(TCP/IP のヘッダに 40 バイト + データに 256 バイト) # #mru 542 # インターフェイスのネットマスクを に指定します。指定は 32 ビットを # ドットで区切った 10 進表記です(例:255.255.255.0) # #netmask 255.255.255.0 # 自分の側の IP アドレスを指定しなかった場合、デフォルトではホスト名から # IP アドレスを決定しますが、このオプションを指定すれば自分の側で IP ア # ドレスを決定せず、接続先から IPCP のネゴシエーションの際に送られてくる # IP アドレスをローカルの IP アドレスにします(コマンドラインやオプション # ファイルで明示的にローカルの IP アドレスを指定することも可能です) # #noipdefault # LCP 時の "passive" オプションを可能にします。このオプションを指定すれ # ば、pppd は自動的に接続を開始しようとします。このオプションを指定しな # いと接続先からの返答がなかった場合 pppd は終了しますが、このオプション # を指定すれば受動的に有効な LCP パケットが届くまで待つことになります。 # #passive # このオプションを指定すれば、接続先から正しい LCP パケットが届くまで # pppd は接続を開始するための LCP パケットを発信しません(古いバージョン # の pppd は "passive" オプションがこの動作を指定しました) # #silent # LCP と IPCP に特別のオプションを使いません(デフォルトのもののみを使い # ます) # #-all # Address/Control 圧縮に関するネゴシエーションをしません(デフォルト、す # なわち、address/contro フィールドは使わない設定になります) # #-ac # asyncmap のネゴシエーションをしません(デフォルトの asyncmap, すなわち # 全てのコントロールキャラクタをエスケープする設定になります) # #-am # fork してバックグラウンドプロセスになりません(このオプションを指定しな # いと、シリアルデバイスを指定してから pppd はバックグラウンドに入ります) # #-detach # IP アドレスのネゴシエーションをしません(このオプションを指定する場合、 # 接続先の IP アドレスはコマンドラインかオプションファイルで指定しなけれ # ばいけません) # #-ip # マジックナンバーのネゴシエーションをしません。このオプションを指定する # と、pppd は回線がループバック状態になっていても検出できません。 # #-mn # MRU[Maximum Receive Unit]のネゴシエーションをしません(デフォルト値であ # る 1500 を使います) # #-mru # プロトコルフィールドを圧縮するかどうかのネゴシエーションをしません(デ # フォルトではプロトコルフィールドは圧縮しません) # #-pc # 接続相手に PAP 認証を使うように指定します。 # #+pap # PAP 認証を使うことに同意しません。 # #-pap # 接続相手に CHAP[Cryptographic Handshake Authentication Protocol]を使う # ように要求します。 # #+chap # CHAP を使うことに同意しません。 # #-chap # Van Jacobson 式の IP ヘッダの圧縮についてのネゴシエーションをしません # (デフォルトでは圧縮しない設定になっています) # #-vj # デバッグレベルを上げます(-d と同じ)このオプションが指定されると、pppd # は送受信した全ての制御用パケットの内容を人間に読める形で記録します。こ # の情報はファイルにリダイレクトしたり、/etc/syslog.conf で明示的にどの # ファイルに送るかを指定します(詳細は syslog.conf(5))(pppd がより詳細な # デバッグができるようにコンパイル時に設定されている場合、情報は daemon # ではなく local2 の機能を使って記録されます。 # #debug # 認証のためのローカルのホスト名を というドメイン名にします。 # gethostname() が porsche というホスト名を返すが、実際のドメイン名は # porsche.Quotron.COM の場合、Quotron.COM を指定するためにこのオプション # を指定します。 # #domain # カーネルに組みこまれた PPP ドライバのデバッグレベルを にします。n # は以下の値を足しあわせた結果になります:1 一般的なデバッグメッセージ、 # 2: 受けとったパケットの中身のうちプリント可能なものを記録、4: 送信した # パケットのうち、中身のプリントアウトが可能なものを記録。 # #kdebug n # MTUの値を にします。接続先から MRU の値としてより小さな値が指定さ # れない限り、この値以下のパケットは PPP ネットワークのインターフェイス # へ送らないよう、カーネル内部のネットワークコードに指定します。 # #mtu # 認証用に自分のシステムの名前を にします。 # #name # PAP で認証する接続先用に、手元のマシンを使っているユーザーの名前を # にします。 # #user # 認証用にローカルシステムの名称をホスト名にします(name オプションを無効 # にします) # #usehostname # 認証用にリモートのシステム名を にします。 # #remotename # ローカルシステムの ARP[Address Resolution Protocol]テーブルに接続先の # IP アドレスとこのシステムのイーサネットアドレスを追加します。 # #proxyarp # PAP の認証用にシステムのパスワードデータベースを使います。 # #login # 毎 n 秒ごとに、接続先に LCP echo-request のフレームを送ります。Linux # の場合、接続先から n 秒間パケットが届かない場合に echo-request を送り # ます。通常、接続先は echo-request が届けば echo-reply を返します。この # オプションと lcp-echo-failure オプションを組みあわせて、接続が切れてい # ることを確認できます。 # #lcp-echo-interval # LCP echo-request を n 個送っても返答が無かった場合、接続が切れているも # のと見なして pppd が接続を終了します。このオプションを使う場合、 # lcp-echo-interval に 0 以外の値を指定しておく必要があります。このオプ # ションを使えば、モデムの制御線を調べられない場合でも物理的な接続が切れ # ると(モデムがハングアップすると) PPP 接続を終了させることができます。 # #lcp-echo-failure # LCP の再送間隔を n 秒にします(デフォルトは 3 秒です) # #lcp-restart # LCP terminate-request を最大 n 個送るようにします(デフォルトでは 3) # #lcp-max-terminate # LCP configure-request を最大 n 個送るようにします(デフォルトでは 10) # #lcp-max-configure # LCP configure-NAK を n 個受けとると configure-Reject を送るようにしま # す(デフォルトでは 10) # #lcp-max-failure # IPCP の再送間隔を n 秒にします(デフォルトでは 3) # #ipcp-restart # IPCP teriminate-request を最大 n 個送るようにします(デフォルトでは 3) # #ipcp-max-terminate # IPCP configure-request を最大 n 個送るようにします(デフォルトでは 10) # #ipcp-max-configure # IPCP configure-NAK を n 個まで受けとると configure-Rejects を送るよう # にします(デフォルトでは 10)。 # #ipcp-max-failure # PAP 認証を再開するまでの時間を n 秒にします(デフォルトでは 3)。 # #pap-restart # PAP autenticate-request 送出数を最大 n 個にします(デフォルトでは 10) # #pap-max-authreq # CHAP 認証を再開するまでの時間を n 秒にします(デフォルトでは 3) # #chap-restart # CHAP 認証を最大 n 回試みます(デフォルトでは 10)。 # #chap-max-challenge # このオプションを指定した場合、接続先と n 秒ごとに CHAP 認証を繰り返 # します。 # #chap-interval # このオプションを指定すると、ローカルの IP アドレスをオプション指定して # いても接続先が提案した IP アドレスをローカルの IP アドレスにします。 # #ipcp-accept-local # このオプションを指定すると、リモートの IP アドレスをオプション指定して # いても接続先が指定した IP アドレスをリモートの IP アドレスにします。 3 #ipcp-accept-remote ______________________________________________________________________ 14.2. どのオプションを指定すべき? うーん、それは状況によります。 以下に示すものは、一般的な例のほとんどをカバーできる 2 つの基本的な バージョンのオプションファイルです。 しかしながら、動かなかった場合、ヒナ型ファイル (/etc/ppp/options.tpl) と pppd のマニュアルを読みましょう。合わせて、接続先のサーバを管理して いるシステム管理者やユーザサポート係に問い合わせてみるのもいいでしょ う。 14.2.1. /etc/ppp/options(PAP/CHAP を使わない場合) 以下の設定は PAP/CHAP 認証を必要としない場合用です。 ______________________________________________________________________ # /etc/ppp/options (NO PAP/CHAP) # # pppd がバックグランドに入らないようにします -detach # もし IP アドレスが固定ならば 0.0.0.0 を正しい IP アドレスに書きかえて # ください。 0.0.0.0: # モデムの制御線を使います。 modem # シリアルデバイスを複数のプロセスが使わないようにロックする際に uucp # スタイルのロックを使います。 lock # ハードウェアフローコントロールを使います。 crtscts # PPP 接続をデフォルトの経路にします。 defaultroute # コントロールキャラクタを一切エスケープしません。 asyncmap 0 # 送出するパケットの大きさを最大 552 バイトにします。 mtu 552 # 受けとるパケットの大きさを最大 552 バイトにします。 mru 552 # #-------END OF SAMPLE /etc/ppp/options (no PAP/CHAP) ______________________________________________________________________ 14.2.2. /etc/ppp/options (PAP/CHAPを使う場合) サーバが PAP や CHAP 認証を求める場合、上記のオプションファイルに以下 の行を付け加えてください。 ______________________________________________________________________ # # 認証の際に ISP でのユーザー名をホスト名として使います。 name # この行は忘れず変更すること # PAP や CHAP 認証を強制的に行う必要がある場合、以下の適切な行のコメント # を外すこと #+chap #+pap # # /etc/ppp/pap-secrets ファイルが暗号化されている場合、以下の行のコメン # トを外す #+papcrypt ______________________________________________________________________ 15. /etc/resolv.conf ファイルの設定 人間は名前を付けるのが好きですが、コンピュータは数字の方が得意です。 TCP/IP ネットワーク(すなわちインターネットの世界)では、私たちはマシン をその名称で指定し、全てのマシンは特定の"ドメイン"に属しています。例え ば、私が使っている Linux ワークステーションは archenland という名前 で、hedland.edu.au ドメインに属しています。このマシンの人間向きのアド レスは archenland.hedland.edu.au です。一方、他のインターネットに接続 されたマシンからこのマシンを見つけるためには IP 番号を使います。 このように、マシン(とドメイン)の名称を IP 番号に変換(解決)するためにイ ンターネット上に用意されているのが Domain Name Service(DNS)です。 PPP 接続の場合、手元の Linux マシンに、どこでホスト名と IP 番号の変換 (アドレスの解決)が可能になるかを指定して、あなたがマシン名を使っても、 コンピュータは必要な IP 番号に変換できるようにしておく必要があります。 一つの方法は接続する全てのホスト名を /etc/hosts ファイルに書きこむこと です(インターネットに接続する場合、現実的には不可能です);名前ではな く、それぞれのマシンの IP アドレスを直接使うのも一つの方法です (ごく小 さな LAN 以外ではとても記憶できないでしょう) 最善の方法は、どこでホスト名と IP 番号の変換が自動的に行えるかを教える ことです。Domain Name Server がこのサービスを行なっているので、必要な ことは DNS の IP 番号を /etc/resolv.conf ファイルに指定することです。 PPP サーバのシステム管理者/ユーザサポートは通常 2 つの DNS の IP 番号 を教えてくれるはずです(最低 1 つあれば十分ですが、何かのトラブルに備え てたいてい 2 の DNS を設定しています) その場合、/etc/resolv.conf は以下のようになるでしょう。 ______________________________________________________________________ domain your.isp.domain.name nameserver 10.25.0.1 nameserver 10.25.1.2 ______________________________________________________________________ /etc/resolv.conf を修正して(必要ならば作成して)、接続先の ISP の情報を 反映させます。このファイルのパーミッションはこのようにすべきです。 -rw-r--r-- 1 root root 73 Feb 19 01:46 /etc/resolv.conf LAN に接続していて、既に /etc/resolv.conf がある場合は PPP 接続の DNS サーバのアドレスを付けくわえるだけでかまいません。 16. PAP/CHAP の認証ファイル pap や chap を用いた認証方法を使う場合、そのための認証ファイル(secrets file)が必要です。それらは、 ______________________________________________________________________ /etc/ppp/pap-secrets /etc/ppp/chap-secrets ______________________________________________________________________ です。 最初に注意しておきますが、PAP や CHAP は本来ユーザではなくコンピュータ システムを認証するようにデザインされていることを記憶しておいてくださ い。 というと、「どこが違うの?」という疑問が聞こえそうですね。 簡単に言ってしまうと、いったんあなたのコンピュータがサーバと PPP 接続 を張ると、あなただけでなく、あなたのコンピュータシステムのどんなユーザ でもその接続を使うことができるわけです。だからこそ、PPP を使って 2 つ の LAN(Local Area Network)を結びつけ WAN(Wide Area Network)を仕立てる ことができるわけです。 接続先の ISP からは、ISP に接続してインターネットを使うためのユーザ名 とパスワードを貰っているはずです。ISP にとって、あなたのコンピュータの 名前はどうでもいいので、コンピュータの名前として ISP に登録しているあ なたのユーザ名を使うことになります。 この名前は pppd の name username オプションで指定します。ですから、ISP から貰ったユーザ名を使う場合、/etc/ppp/options ファイルに以下の一行を 加えます。 ______________________________________________________________________ name your_username_at_your_ISP ______________________________________________________________________ 技術的に厳密に言うと、PAP の場合は user our_username_at_your_ISP オプ ションを使うべきですが、pppd はPAP を使う場合、自動的に name を user と解釈します。 name オプションを使う利点は、このオプションは CHAP にも 有効なことです。 PAP/CHAP はコンピュータを認証するための方式ですから、技術的にはリモー ト端のコンピュータ名も指定してやる必要があります。しかし、たいていの人 は一つの ISP しか使わないため、設定ファイルのリモートホスト欄にはワイ ルドカード(*)の指定をしておけば十分です。 多くの ISP では、一つの電話番号に複数のモデムを接続し、それぞれ異なる 名前のターミナルサーバに接続しています。このような場合もリモートのコン ピュータの名前を接続前に決定することは不可能なので、設定ファイルのリ モートホスト欄にはワイルドカードの指定をしておくべきです。 16.1. PAP の認証ファイル /etc/ppp/pap-secrets ファイルはこのような形式をしています。 ______________________________________________________________________ # Secrets for authentication using PAP # client server secret acceptable local IP addresses ______________________________________________________________________ 4 つの欄がスペースキャラクタで区切られています。 ISP から貰ったユーザ名を fred、パスワードを flintstone とします。その 場合、 /etc/ppp/options.ttySx ファイルにname fred オプションを設定 し、/etc/ppp/pap-secrets ファイルには ______________________________________________________________________ # Secrets for authentication using PAP # client server secret acceptable local IP addresses fred * flintstone ______________________________________________________________________ のように設定します。 この設定は、ローカルマシンの名前を fredに(実際のローカルなマシンの名前 とは違っても pppd がその名前を使います)して、全てのサーバに接続する場 合にflintstoneというパスワードを使うことになります。 あらかじめ静的な IP アドレスをもらっている場合以外、ローカルの IP アド レスを指定する必要はないことに御注意ください。 PAP を使って複数のマシンと接続するような場合、それぞれの接続先ごとに異 なるユーザ名を使うか、接続先のマシン名を調べる必要があります。そして pap-secrets ファイルに必要な行を付け加えて、接続先のマシンごとにname オプションを正しく設定します。 16.2. CHAP の認証ファイル 現在のバージョンの pppd では相互認証方式が必要です。すなわち、あなたの マシンを接続先に認証すると同時に接続先のマシンをあなたのマシンに認証さ せる必要があります。 あなたのマシンが fred でリモートのマシンが barney の場合、あなたのマシ ンの /etc/ppp/options.ttySxにはname fred remotename barney オプション を、リモートマシンの /etc/ppp/options.ttySx ファイルには name barney remotename fred オプションをそれぞれ指定してやる必要があります。 fred の/etc/chap-secretsファイルはこのようになります。 ______________________________________________________________________ # Secrets for authentication using CHAP # client server secret acceptable local IP addresses fred barney flintstone ______________________________________________________________________ 一方、barney のはこうです。 ______________________________________________________________________ # Secrets for authentication using CHAP # client server secret acceptable local IP addresses barney fred flintstone ______________________________________________________________________ 17. PPP 接続を手動で起動 さて、/etc/ppp/options と/etc/resolv.conf ファイルを作成しました(必要 ならば /etc/ppp/pap|chap-secretsファイルも)。これで PPP 接続がうまくい くかどうか手動で試してみましょう(手動でうまくいくことが確認できてから 自動的に接続する方法を説明します) 手動接続のためには、モデムをリセットせずに終了できる通信ソフトが必要で す。Minicom ならば ALT Q で可能です(古いバージョンの minicom ならば CTRL A Q です) ルートとしてログインしていることを確認してください。 minicom のような通信ソフトを起動し、普通に PPP サーバに接続します。PPP 接続のために何かコマンドが必要ならば、そのコマンドを実行してください。 以前にチェックしたような ~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y} といったデータが送られてくるはずです。 pap/chap を使っている場合、サーバマシンに接続するだけで自動的に ppp が 起動され、ログインしなくても上記のようなデータが送られてきます(サーバ の設定によってはそうならない場合もあります) ここでモデムをリセットせずに通信ソフトを終了させ(minicom では ALT Q か CTRL A Q を入力します)、Linux の(ルートの)プロンプトを出し、 pppd -d -detach /dev/cuaX & と入力します。 -d オプションはデバッグ出力の指定で、このオプションを使えば ppp 接続が 始まるとともに「会話」内容がシステムのログファイルに記録されます。トラ ブルの際にはこのファイルを調べましょう。 実際に入力すべきは cuaX ではなく、通常、 cua0 か cua1 といった実際にモ デムが接続されているポート番号を指定することをお忘れなく。 PPP 接続が確立すればモデムのライトが点滅するはずです。PPP 接続を確立す るには多少の時間がかかります。 ここで ifconfig コマンドを使って PPP インターフェイスの状態を調べます。 イーサネットやループバックデバイス以外に、このような ppp デバイスの表 示が見られるはずです。 ______________________________________________________________________ ppp0 Link encap:Point-Point Protocol inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:552 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 ______________________________________________________________________ ここで、 o inet addr:10.144.153.104 はあなたの側の IP 番号で、 o P-t-P:10.144.153.51 はサーバ側の IP 番号です (ifconfig はあなたの PPP サーバで使っている IP 番号以外は報告しないか も知れません) 注意:ifconfig は接続が UP で RUNNING 状態になっていることも示していま す。 もし、このように表示された場合、 ______________________________________________________________________ ppp0 Link encap:Point-Point Protocol inet addr:0.0.0.0 P-t-P:0.0.0.0 Mask:0.0.0.0 POINTOPOINT MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 ______________________________________________________________________ PPP 接続がうまく確立されていません。後述するデバッグについての章を御覧 ください。 同時に、リモートホスト(とその先)への経路が確立しているかチェックしま しょう。そのためには、 route -n コマンドを使います。すると、以下のような出力が見られるはずです。 ______________________________________________________________________ Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 10.144.153.3 * 255.255.255.255 UH 1500 0 1 ppp0 127.0.0.0 * 255.0.0.0 U 3584 0 11 lo 10.0.0.0 * 255.0.0.0 U 1500 0 35 eth0 default 10.144.153.3 * UG 1500 0 5 ppp0 ______________________________________________________________________ ここで ppp インターフェイスに2 つのエントリができていることに特に注意 してください。 最初のものはホストへの経路(H フラグが示しています)で、接続先の IP アド レスを示しています。しかし、そこから先への経路はありません。 2 つめのものがデフォルトの経路(default route)で、Linux PC はこの経路に ローカルのイーサネット宛てではない全てのパケットを送りつけます。このデ フォルトの経路がネットワークへの経路として PPP サーバ自身を指していま す。PPP サーバは我々のパケットをインターネットへ送りだし、返答パケット を我々のもとへ送ってこなければなりません。 ルーティングテーブルに 2 つのエントリが見つからない場合、何か間違って います(デバッグについての章を見てください) 次に 'ping' を使って接続をテストします。このためには、ifconfig が表示 した接続先の IP 番号を指定して、 ping 10.144.153.51 とします。すると、このような出力が見られるはずです。 PING 10.144.153.51 (10.144.153.51): 56 data bytes 64 bytes from 10.144.153.51: icmp_seq=0 ttl=255 time=328.3 ms 64 bytes from 10.144.153.51: icmp_seq=1 ttl=255 time=190.5 ms 64 bytes from 10.144.153.51: icmp_seq=2 ttl=255 time=187.5 ms 64 bytes from 10.144.153.51: icmp_seq=3 ttl=255 time=170.7 ms この表示はいつまでも続くので、適当なところで CTRL C を押して終了させま しょう。すると、 --- 10.144.153.51 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 170.7/219.2/328.3 ms といった表示がされるはずです。 次に、ホスト名で ping のテストをしてみましょう。指定するホスト名は PPP サーバではなく、別のサイトにあるホストで、動いていることが確実なホスト を選びます。例えば、 ping sunsite.unc.edu とします。 今回は、指定したホスト名を /etc/resolv.conf で指定した DNS へ尋ねて IP 番号へ変換しているために多少時間がかかりますがご心配なく(でもその間も モデムのライトは点滅しているはずです)。少ししてから、以下のような出力 が表示されるはずです。 PING sunsite.unc.edu (152.2.254.81): 56 data bytes 64 bytes from 152.2.254.81: icmp_seq=0 ttl=254 time=190.1 ms 64 bytes from 152.2.254.81: icmp_seq=1 ttl=254 time=180.6 ms 64 bytes from 152.2.254.81: icmp_seq=2 ttl=254 time=169.8 ms 64 bytes from 152.2.254.81: icmp_seq=3 ttl=254 time=170.6 ms 64 bytes from 152.2.254.81: icmp_seq=4 ttl=254 time=170.6 ms これも適当なところで CTRL C を押して停止させ、統計情報を見ましょう。 --- sunsite.unc.edu ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 169.8/176.3/190.1 ms 反応が帰ってこなければこの文書のデバッグに関する章を読んでください。 すべてがうまく行けば、 ppp-off コマンドで接続を終了させます。 しばらくの後にモデムもハングアップするはずです。 うまくハングアップしない場合、モデムの電源を切るか通信ソフトを立ちあげ て +++ を入力してモデムのコマンドモードに入り、ATH0 コマンドで接続を切 り、モデムから OK プロンプトが帰ることを確認してください。 pppd が作ったロックファイルも消しておきましょう。 ______________________________________________________________________ rm -f /var/lock/LCK..cuaX ______________________________________________________________________ 18. 接続を自動化するには - 接続用スクリプトの作り方 chat を使った接続用のスクリプトを作れば、chat がログインして PPP を起 動するまで自動的に行うので、必要な作業は(ルート、あるいは ppp グループ のメンバーになって)接続のためのコマンドを一つ入力するだけになります。 18.1. ユーザ名とパスワードをつかった認証の場合 接続先の ISP が PAP/CHAP 認証を必要としない時、以下のスクリプトが使え るでしょう。 ppp パッケージが正しくインストールされていれば 2 つのファイルがあらか じめサンプルとして用意されているはずです。PPP 2.1.2 の場合、そのファイ ルは /usr/sbinに、PPP 2.2 の場合は /etc/ppp/sciripts ディレクトリに 入っています。それらのファイルは PPP-2.1.2 の場合、 ppp-on ppp-off PPP-2.2 の場合 ppp-off ppp-on ppp-on-dialer となっています。 さて、PPP 2.1.2 を使っている場合、上記のサンプルファイルは削除してしま うことを強くお勧めします。これらのサンプルファイルには潜在的な問題があ りました - 「でもちゃんと動くよ」、と言わないで - 私も、それらのファイ ルを長い間使っていましたから(この HOWTO の最初のバージョンでは推薦すら していたのです) PPP 2.1.2 のユーザのために、以下に PPP 2.2 のパッケージから持ってきた よりよいサンプルファイルを紹介します。以下のサンプルファイルをコピーし て、PPP-2.1.2 に付属のスクリプトの代りに使うようにお勧めします。 18.2. ppp-on スクリプト これは PPP 接続を開始するための 2 本のスクリプトのうち前半のものです。 ______________________________________________________________________ #!/bin/sh # # PPP 接続を開始するためのスクリプト。2 つのスクリプトのうちの 1 つめ。 # このコードは 'ps' コマンドで表示されてしまうのであまり安全ではないが、 # 簡単。 # # これらのパラメータは実際の値に変更すること TELEPHONE=555-1212 # 接続のための電話番号 ACCOUNT=george # ログイン・アカウント('George Burns'の例) PASSWORD=gracie # 上記アカウントのパスワード('Gracie Allen') LOCAL_IP=0.0.0.0 # ローカルの IP 番号。動的割りあての場合は 0.0.0.0 REMOTE_IP=0.0.0.0 # 接続先の IP 番号。普通 0.0.0.0。 NETMASK=255.255.255.0 # 必要ならばネットマスクの指定 # # ppp-on-dialer から使えるように変数を export export TELEPHONE ACCOUNT PASSWORD # # 電話をかけてログイン処理をするスクリプトの位置。$PATH 変数は connect # オプションでは使われないので絶対パスを指定すること(ルート権限でそうす # るとセキュリティホールになるので、この件については要望しないこと) # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # # 接続の開始 # exec /usr/sbin/pppd debug /dev/ttySx 38400 \ $LOCAL_IP:$REMOTE_IP \ connect $DIALER_SCRIPT ______________________________________________________________________ ppp-on-dialer スクリプトはこのようになります。 ______________________________________________________________________ #!/bin/sh # # ppp-on スクリプトの後半部。実際の接続プロトコルを送る部分 # chat -v \ TIMEOUT 3 \ ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' \ ABORT '\nRINGING\r\n\r\nRINGING\r' \ '' \rAT \ 'OK-+++\c-OK' ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT '' \ ogin:--ogin: $ACCOUNT \ assword: $PASSWORD ______________________________________________________________________ 18.3. PPP 起動スクリプトの修正 新しいスクリプトは 2 つに分かれているので、順に修正してみましょう。 18.3.1. ppp-on スクリプト スクリプトを修正して、ISP から貰ったユーザ名とパスワードを登録します。 ISP の電話番号も忘れずに変更してください。 TELEPHONE= 以下の各行は実際にはシェル変数を '=' の右側の値に設定してい るので(もちろんコメントは含みませんが)、各行を修正して、実際の ISP の ものを設定してください。 また、IP 番号の設定が必要な場合、/etc/ppp/options ファイルに設定して ______________________________________________________________________ $LOCAL_IP:$REMOTE_IP \ ______________________________________________________________________ 同時に DIALER_SCRIPT シェル変数が実際にダイアルするためのスクリプトの 絶対パスを指定していることを確認してください。もしダイアルのためのスク リプトを移動させたり名前を変えた場合はppp-on スクリプトを修正すること もお忘れなく。 ppp-on スクリプトを正しく設定し、接続先の PPP サーバがユーザ名/パス ワード形式の認証をしている場合、ppp-on-dialer スクリプトを変更する必要 はありません。 起動時に /etc/rc.serial でシリアルプートの設定は終えているかも知れませ んが、ppp-on スクリプトの中で明示的にシリアルポートを設定するのもいい アイデアです。そうしておけば、モデムを(シリアルポートの設定をリセット するかも知れない)他のプログラムで安心して使うこともできます。 そのためには実際に pppd を開始する行の直前に以下の一行を加えます。 ______________________________________________________________________ /bin/setserial /dev/cuaX spd_vhi ______________________________________________________________________ spd_vhi オプションを設定しておけば、38,400 ボーで使おうとした時に、実 際には 115,200 ボーで接続することになります。28.8k(以上の)高速モデムの 場合、このように設定しておくのがいいでしょう。しかしながら、多くの 14,400 ボーのモデムはコンピュータとデータをやりとりするシリアル回線を このようなスピードでは処理できないようです。 モデムのマニュアルをチェックして、モデムのシリアル回線の最高速が 38,400 の場合、以下のように設定します。 ______________________________________________________________________ /bin/setserial /dev/cuaX spd_normal ______________________________________________________________________ 18.3.2. サーバ側での PPP の開始 ppp-on-dialer スクリプトは、ログインすれば pppd を自動的に起動するサー バで有効ですが、ログインしてから明示的に PPP を起動しなければならない サーバもあります。 サーバの PPP を起動するのに何らかのコマンドが必要な場合、ppp-on-dialer スクリプトを修正する必要があります。 スクリプトの最後(パスワードの行より後)に、サーバの PPP を起動するため に 必要な文字列 PPP起動コマンド の対を追加してください。PPP 起動コマ ンドを実行する際の文字列はログインプロンプトにします(Bourne シェルで特 別な意味を持つ文字 - 例えば $や [ ] に注意してください) こうしておけば、chat がシェルのプロンプトを受けとれば、ISP の PPP を起 動するためのコマンドを実行します。 私の場合、PPP サーバは標準的な Bash のプロンプト ______________________________________________________________________ [hartr@kepler hartr]$ ______________________________________________________________________ を送ってくるので、この文字列を受ければ ______________________________________________________________________ ppp ______________________________________________________________________ と入力して、サーバの PPP を起動します。 少々文字がバケても正しく認識できるようにしておいた方がいいので、私の場 合、以下のような<文字列 送信コマンド>の組み合わせを選びました。 ______________________________________________________________________ hartr--hartr ppp ______________________________________________________________________ この例では一定の時間内にプロンプトを受けとれなかった場合、キャリッジリ ターンを送って、再度プロンプトを待ちます。 プロンプトを受けとれば、'ppp' という文字列を送ります。 注意:付け加えた行の前の行の行末に \ を付けて chat スクリプト全体が一 行とみなされるようにしておくことを忘れないように。 不幸なことに、接続のたびごとに異なるプロンプトを返してくるサーバもいく つかあります。そのような場合、minicom などを使って何度かサーバにログイ ンして、どのような文字列がプロンプトに使われ、そのうちのどの部分が一定 で PPP を起動するための文字列に利用できるかを調べておく必要がありま す。 18.3.3. ppp-on-dialer スクリプト これは ppp 接続を開始するためのスクリプトの後半部です。 注意:chat スクリプトは通常一行です。行末についているバックスラッシュ (\)は(人間に見やすいように)複数行に分かれている行を一行に見せるために 使われており、スクリプトの一部ではありません。 このコマンドを詳細に検討すれば実際に何が行われているか(行われるはずか) を理解できるはずです。 18.4. chat スクリプトの意味するもの chat のスクリプトは "受けとった文字列 送信する文字列"の組み合わせを連 ねたものです。すなわち、何か文字列を送信する前には何かの文字列を受けと らなければなりません。 文字列を受けとらなくても、こちらから何かを送信するためには、空の文字列 ("")を受けとる文字列に指定する必要があります。同様に、何か文字列を受け とってもこちらから送信しない場合は送信する文字列に空の文字列を指定しま す。また、文字列が複数の語の場合(例えば NO CARRIER)、文字列をクオート して一つの文字列と見なされるようにしなければなりません。 今回の例での chat スクリプトは :- o exec chat -v chat を起動します。-v オプションを指定すると、chat の行う全ての入出 力をシステムのログファイル(通常 /var/log/messages)に書きこみます。 chat スクリプトがきちんと動くようにならば -v オプションを外して不要 なログを取らないようにしましょう。 o TIMEOUT 3 文字列を受けとるまでのタイムアウトの時間を 3 秒にします。遅いモデム を使っている場合、この時間を 5 秒や 10 秒にのばしてやる必要があるか も知れません。 o ABORT '\nBUSY\r' BUSY という文字列が来れば処理を中止します。 o ABORT '\nNO ANSWER\r' NO ANSWER という文字列が来れば処理を中止します。 o ABORT '\nRINGING\r\n\r\nRINGING\r' RINGING という文字列を(繰り返し)受けとれば処理を中止します。 これは誰かがモデムに電話をかけてきています! o "" \rAT モデムから文字列が来なくても AT 文字列を送ります。 o "OK-+++\c-OK"; ATH0 これは chat のエラー復旧機能を使っているので少し複雑です。このコマ ンドの意味は、、 OK を待っていて、もし OK が来なければ(その場合はきっとモデムがコマ ンドモードになっていないのでしょう) +++ を送り(標準的な Hayes 互換 のモデムでコマンドモードにするための命令)、再度 OK を待ち、OK が来 れば ATH0(モデムハングアップコマンド)を送ります。 こうしておけば、モデムがオンラインになっている状況でもうまくいくは ずです。 o TIMEOUT 30 これ以後のスクリプトでタイムアウトの時間を 30 秒にします。chat スク リプトがタイムアウトで終了してしまう場合、この時間を 45 秒とかさら に長くしてみてください。 o OK ATDT$TELEPHONE OK を待ち(ATH0 コマンドを受けたモデムは OK を返します)、電話をかけ たい番号をダイアルします。 o CONNECT '' CONNECT を待ち(手元のモデムが接続先のモデムにつながれば CONNECT を 返します)ますが、返事は何も送りません。 o ogin:--ogin: $ACCOUNT ここでも多少のエラー復旧の仕組を入れています。ログイン・プロンプト を待ちますが(..ogin:)、もしタイムアウト時間内に受けとれなかった場 合、リターンを送って再度ログイン・プロンプトを待ちます。プロンプト を受けとれば、ユーザ名を送ります(ユーザ名は$ACCOUNTというシェル変数 に入っています) o assword: $PASSWORD パスワードプロンプトを待ち、パスワードを送ります(パスワードもシェル 変数に入っています) この chat スクリプトにはそれなりのエラー復旧機能が組みこまれています が、 chat にはここで説明した以上にもいろいろな機能がありますので、詳細 についてはマニュアルを御覧ください(man 8 chat)。 18.5. PAP/CHAP 認証を使う場合のスクリプト 接続先の ISP が PAP/CHAP 認証を使う場合、chat スクリプトはずっと簡単に なります。その場合、chat は電話をかけてつながるまで待つだけで、その後 の login 処理は pppd にまかせます。 ______________________________________________________________________ #!/bin/sh # # ppp-on スクリプトの後半部。 exec chat -v \ TIMEOUT 3 \ ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' \ ABORT '\nRINGING\r\n\r\nRINGING\r' \ '' \rAT \ 'OK-+++\c-OK' ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT '' ______________________________________________________________________ 18.6. pppd のデバッグと -f で指定するオプションファイル すでに見たように、pppd に -d オプションを付ければデバッグ情報が出力さ れるようになります。'debug' というオプションは -d と同じです。 新しいスクリプトで接続のテストをするのですから、今のところ debug オプ ションは付けたままにしておきましょう。(注意:pppd がやりとりする login 情報はあっというまに syslog ファイルを巨大にするので、ディスクの空き領 域が厳しい場合はトラブルを起こすかも知れません。もっとも、そうなるため には接続に失敗してしばらくの間あれこれ pppd をこねくり回す必要があるで しょうが。) すべてがきちんと動いていることが確認できたらデバッグオプションを取りの ぞきましょう。 ppp のオプションファイルを /etc/ppp/options や /etc/ppp/options.ttySx 以外に置いている場合、pppd の -f オプションでファイル名を指定します。 ______________________________________________________________________ exec /usr/sbin/pppd debug -f options.myserver /dev/ttySx 38400 \ ______________________________________________________________________ 19. 接続スクリプトのテスト X ウィンドウを使っている場合は新しい Xterm を開く、あるいは新しい仮想 コンソールを開いてルートとしてログインします。 このセッションでは /var/log/messages (か、システムのログファイル)を tail -f /var/log/messages としてメッセージを表示させておきます。 最初のウィンドウ(あるいは仮想コンソール)で次のコマンドを実行します。 ppp-on & (/usr/sbin/ppp-on の名前を変えていればその名前で実行してください) コマ ンドの最後に & を付けてバックグラウンドにしなかった場合、(接続が切れ て)ppp が終了するまでターミナルにプロンプトが表示されなくなるので御注 意。 これでもう一つのウィンドウに移ってシステムログの状態を調べます。 (chat に -v オプションを付けて pppd に -d オプションを付けておけば)以 下のようなメッセージが表示されるはずです。前半部は chat スクリプトの メッセージで、後半部が pppd の起動メッセージになっています。 ______________________________________________________________________ Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER) Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY) Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M) Oct 21 16:09:59 hwin chat[19868]: expect (OK) Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M Oct 21 16:10:00 hwin chat[19868]: OK -- got it Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M) Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT) Oct 21 16:10:00 hwin chat[19868]: ^M Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it Oct 21 16:10:22 hwin chat[19868]: send (^M) Oct 21 16:10:22 hwin chat[19868]: expect (ogin:) Oct 21 16:10:22 hwin chat[19868]: 57600^M Oct 21 16:10:23 hwin chat[19868]: ^[[;H^[[2J^M^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I This is node kepler.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I at Hedland Campus^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I Hedland College^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I Authorised user ONLY are to use this system^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I For more information, contact ComputerSystems^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I on +61 (0)91 72 0400^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I^I or^M Oct 21 16:10:23 hwin chat[19868]: ^I^I email: help@hedunx.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin last message repeated 3 times Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it Oct 21 16:10:23 hwin chat[19868]: send (hartr^M) Oct 21 16:10:23 hwin chat[19868]: expect (ssword:) Oct 21 16:10:23 hwin chat[19868]: hartr^M Oct 21 16:10:23 hwin chat[19868]: Password: -- got it Oct 21 16:10:23 hwin chat[19868]: send (??????^M) Oct 21 16:10:23 hwin chat[19868]: expect (hartr) Oct 21 16:10:23 hwin chat[19868]: ^M^M Oct 21 16:10:24 hwin chat[19868]: Last login: Sat Oct 21 14:55:53 on ttyC0^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin last message repeated 9 times Oct 21 16:10:24 hwin chat[19868]: ^I^IYou have logged into node kepler.hedland.edu.au^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: This is a Compaq Prolinea 486DX2/50 running Linux 1.1.54^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: This computer operates as the main Hedland Campus communications^M Oct 21 16:10:24 hwin chat[19868]: ^I node, providing dial-in terminal and SLIP access,^M Oct 21 16:10:24 hwin chat[19868]: ^I^I Kepler also runs the Hedland end of^M Oct 21 16:10:24 hwin chat[19868]: ^I^I the Hedland/Newman inter-Campus WAN link^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it Oct 21 16:10:24 hwin chat[19868]: send (ppp^M) Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0 Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0 Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1 Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU Oct 21 16:10:27 hwin pppd[19873]: (1500) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP Oct 21 16:10:27 hwin pppd[19873]: (0) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER Oct 21 16:10:27 hwin pppd[19873]: (a098b898) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:27 hwin pppd[19873]: (45) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1. Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255. Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:31 hwin pppd[19873]: (45) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255. Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1. Oct 21 16:10:31 hwin pppd[19873]: ipcp: up Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104 Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51 ______________________________________________________________________ (注意 - この例では静的な IP 番号を使っており、私のマシンからその番号を PPP サーバに送っています。動的な IP 番号の割り当てを使っていれば、その ようなやりとりは起きません) うまく行ったように見えますので、以前のように IP 番号とホスト名を使って ping してみて、接続がきちんと働いているか確認します。 これでつながりました。web のブラウザでも何でも使ってネットサーフしてみ ましょう。 20. PPP 接続の終了 PPP 接続を終了させる場合、ppp-off コマンドを使います(このコマンドを実 行するためにはルート権限か PPP グループに属していなければならないこと をお忘れなく) PPP の終了時にはこのようなログが出力されることでしょう。 ______________________________________________________________________ Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link Oct 21 16:10:45 hwin pppd[19873]: ipcp: down Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2. Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP). Oct 21 16:10:46 hwin pppd[19873]: Connection terminated. Oct 21 16:10:46 hwin pppd[19873]: Exit. ______________________________________________________________________ SIOCDELRT というメッセージが出ていますが、これは単に pppd が終了してい るということを示しているだけなので 気にする必要はありません。 21. デバッグ 接続がうまくいかないことには無数の理由があります - 例えば chat が正し く終了しなかったり、電話回線にノイズが多かったり。問題が起きたら、まず syslog ファイルを調べてみましょう。 もっともよくある間違いはスクリプトの中に何か打ち間違いがあることです。 スクリプトをあらためてじっくりと見直してみましょう - 我々人間は実際に 打ちこまれた文字ではなく、打ったつもりの文字を読んでしまいがちなことを 忘れずに。 もう一つ、よくある間違いはカーネル 1.2.X と PPP-2.2 を使っていたり、 カーネル 1.3.X/2.0.X と PPP-2.1.2 を使っている例です。カーネルのバー ジョンにあった pppd を使ってください。 それでもダメな場合、PPP FAQ に目を通しましょう(PPP FAQ は PPP に関する 質問と答を集めたものです)、この FAQ はさまざまな領域をカバーしており、 たいていの問題に対する解答が用意されています。私自身の(悲しい)経験から 言うと、もしこの FAQ に答が無ければ、問題は ppp に関するものではありま せん。私の場合は ELF 版のカーネルを使いながらカーネルモジュールを適切 なものにバージョンアップしていない、というものでした。私は、完璧な PPP サーバとは何かとボヤきながら 2 日(とほぼ一晩)を過してしまいました。 21.1. PPP をコンパイルしたのですが、Linux が認識してくれません。 カーネル 1.3.X/2.0.X を使って、カーネルにモジュールサポート機能を組み こんで、PPP 機能をモジュールとしてコンパイルし(してモジュールを組みこ み)ましたよね? kerneld を使って必要なモジュールを自動ロードさせていない場合、PPP を使 う前に明示的に ppp モジュールをロードする必要があります(多分シリアルド ライバモジュールもロードする必要があるでしょう)。 これを手動でやるためには、ルートになって ______________________________________________________________________ insmod ppp ______________________________________________________________________ します。 シリアルドライバモジュールをロードする場合は、 ______________________________________________________________________ insmod slhc ______________________________________________________________________ します。 しかしながら、カーネルモジュールは自動ロードするようにした方が便利で す。 kerneld mini-howto を読んで、自動ロードするように設定しましょう。 もう一つの可能性は、Linux 2.0.x で ppp-2.1.2 を使っている場合です(ある いは 1.2.x のカーネルに必要なパッチをあてずに ppp-2.2 を使っている場 合)。 カーネルと ppp のバージョンをもう一度チェックしてください。繰り返しま すが、 カーネルの 2.0.x は ppp-2.2 を必要とします。 カーネル 1.2.x は ppp-2.1.2 を使いますが、ppp-2.2 を使うためのパッチが あります。 21.2. デフォルトルート(default route)を設定できません。 LAN 用のイーサネット(かその他ネットワーク接続)を使っていて、すでにデ フォルトルートを設定していませんか。 方法を(簡単に)解説しています。 問題はデフォルトルートは一つしか設定できないことです。デフォルトルート とは、特定の経路宛てではないパケットが全て送られる経路です。通常、デ フォルトルートはインターネット宛てになっているはずです。 不幸なことに、いくつかの Linux のディストリビューションではローカルな イーサネットをデフォルトルートにするように設定しています。イーサネット を初期化しているシステムの設定ファイルを修正して、ルーティング情報を修 正し、ローカルなイーサネットにはデフォルトルートではなく、特定のルー ティング情報を設定するようにする必要があります。 このためには NET2-Howto と Linux Network Administrator Guide を調べて ください。 22. 2 つのネットワークを PPP でつなぐには 基本的に一台の Linux PC を PPP サーバに接続する場合も 2 つの LAN を PPP を使って接続する場合も違いはありません。PPP は 一対一のプロトコル であることをお忘れなく。 しかしながら、2 つの LAN を接続する場合、経路制御をどうすべきかをきち んと理解しておく必要があります。NET-2 howto と Linux Network Adminitrator Guide(NAG)を読みましょう。また、O'Reilly and Assoc から出 ている"TCP/IP Network Administration(ISBN 0-937175-82-X) も役立つこと でしょう。 2 つの LAN を接続するためには、異なる IP ネットワーク番号を設定し(ある いは同じネットワーク番号でもサブネット化する)静的な IP 番号を使うか、 IP masquerade を使わなければいけません。IP masquerade を使う場合の設定 については IP masquerade mini-howto を御覧ください。 22.1. IP 番号の設定 接続先の LAN の管理者と相談し、PPP インターフェイスの両端で使う IP 番 号を決めます。静的な IP 番号を使う場合、特定の電話番号を使う必要もある でしょう。 次に /etc/ppp/options[.ttyXX] ファイルを修正する必要があります。LAN 間 接続用に決まったモデムとポートを使うようにしておくのがいいでしょう。そ のためには /etc/ppp/options ファイルも修正しなければならないかも知れま せん。合わせて、LAN 間接続以外の接続のためにも適切な options.ttyXX ファイルを作る必要があります。 静的な IP 番号を使う例で示したように、あなたの側の PPP 端に適切な IP 番号を指定してください。 22.2. 経路の設定 ローカルの LAN から PPP 接続を経由してパケットを流す経路を設定する必要 があります。このためには 2 つの段階が必要です。 まず最初に、PPP 接続をしているマシンから接続先のネットワークへの経路を 設定します。接続先がインターネットの場合、pppd に `defaultroute' オプ ションを付ければこの経路が設定できます。 2 つの LAN をつなぐために PPP 接続を使う場合は特定のネットワークルート を指定しなければなりません。そのためには/etc/ppp/ip-up スクリプトに route コマンドを加えます。この方法については「接続が完了してから、、」 の章を御覧ください。 次に、ローカルの LAN に接続されている他のコンピュータへ、あなたの Linux マシンが ppp で接続しているネットワークへの 'gatway' になってい ることを知らせます。 もちろん、接続先のネットワークの管理者も同じことをしなければいけませ ん。しかしながら、彼(女)があなたのネットワークへパケットを送ってくるに はデフォルトルートではなく、特定のネットワークルートが必要です(接続先 の LAN があなたのマシンを経由してインターネットへ接続している場合を除 いて)。 22.3. ネットワークセキュリティ LAN を PPP 経由でインターネットにつないだり "外部の" LAN と接続する と、セキュリティにも注意を払う必要があります。ファイアウォールを設置す ることを早急に考えるように強くお勧めします。 23. 接続が確立した後、、 PPP 接続が確立したら、pppd は /etc/ppp/ip-up をチェックします。このス クリプトが存在して実行可能になっていたら PPP デーモンはそのスクリプト を実行します。ですから、このスクリプトに PPP 接続を使う場合に実行した い特別の経路情報の設定やその他の必要な設定をするためのコマンドを書いて おけば、PPP 接続のたびに自動的に実行できます。 /etc/ppp/ip-upは普通のシェルスクリプトで構わないので、シェルスクリプト で可能なことは何でもできます(やりたいことは何でもできます)。 例えば、このシェルスクリプトの中で sendmail を使って mail queue に溜っ ているメールを送りだすようなことも可能です。 同様に、ip-up に(pop を使って)メールを取りこむようなコマンドを設定し、 ISP に届いているメールを自動的に取りこむことも可能です。 23.1. 特別の経路設定 2 つの LAN を接続する場合、'外部の' LAN へ向いた特別の経路情報を設定し てやる必要があります。これも /etc/ppp/ip-up スクリプトの中で設定するの が簡単でしょう。問題になるのは、複数の PPP 接続を使う場合です。 /etc/ppp/ip-up は全ての ppp 接続の際に実行されるスクリプトなので、接続 に応じた必要な経路制御に関するコマンドが正しく実行されるように注意深く 設定してやる必要があります。 このためには pppd がこのスクリプトに渡すパラメータを使って bash の 'case' 文で条件分岐してやるのがいいでしょう。例えば、以下に示すもの は、WAN 接続と私の自宅へのイーサネット接続を使いわけるためのスクリプト です(両者とも同じ ppp サーバを使っています) ______________________________________________________________________ #!/bin/bash # pppd で必要に応じてルーティングを設定するためのスクリプト # Newman campus へのリンクにのみルーティングが必要 # # ppp 接続の際、このスクリプトは以下のような引数で呼び出される。 # $1 pppd が使うインターフェイス名(例:ppp3) # $2 tty デバイス名 # $3 tty デバイス速度 # $4 インターフェイスのローカル IP アドレス # $5 リモートの IP アドレス # $6 pppd の ipparam オプションで指定するパラメータ # case "$5" in # Newman Campus のサーバへのルーティングを設定 202.12.126.1) /sbin/route add -net 202.12.126.0 gw 202.12.126.1 # メールキューに溜っているメールを送りだす。 /usr/sbin/sendmail -q & ;; 139.130.177.2) # インターネット接続 # タイムサーバが動いてなければ接続時に起動して、世界の時刻と同期する。 if [ ! -f /var/lock/subsys/xntpd ]; then /etc/rc.d/init.d/xntpd.init start & fi # ニュースサーバの起動(動いてなければ) if [ ! -f /var/lock/subsys/news ]; then /etc/rc.d/init.d/news start & fi ;; 203.18.8.104) # # 自宅のマシンにメールを送りこむ。自宅のイーサネットはIP masqeurade と # proxy arp のルーティングになっているのでルーティングは不要 /usr/sbin/sendmail -q & ;; *) esac exit 0 ______________________________________________________________________ Newman campus へこのスクリプトで接続した場合、以下に示すようなルーティ ングテーブルが設定されます(このマシンは私たちのダイアルアップ PPP サー バ兼インターネット接続マシンです)。それぞれのエントリが何を示すかのコ メントを付けておきました。 ______________________________________________________________________ [root@kepler /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface # インターネットゲートウェイへのホストルート 139.130.177.2 * 255.255.255.255 UH 1500 0 134 ppp4 # Newman campus サーバへのホストルート 202.12.126.1 * 255.255.255.255 UH 1500 0 82 ppp5 # 私の自宅のイーサネット LAN へのホストルート 203.18.8.104 * 255.255.255.255 UH 1500 0 74 ppp3 # 公開している 2 つのダイアルアップ PPP 用回線 203.18.8.64 * 255.255.255.255 UH 552 0 0 ppp2 203.18.8.62 * 255.255.255.255 UH 552 0 1 ppp1 # Newman campus LAN へのネットワークルート 202.12.126.0 202.12.126.1 255.255.255.0 UG 1500 0 0 ppp5 # ローカルのイーサネットへのルート(2 つの連続するクラス C のネットワーク # を接続しています) 203.18.8.0 * 255.255.254.0 U 1500 0 1683 eth0 # loop back デバイスへのルート 127.0.0.0 * 255.0.0.0 U 3584 0 483 lo # インターネットへのデフォルトルート default 139.130.177.2 * UG 1500 0 3633 ppp4 ______________________________________________________________________ 23.2. e-mail の処理 前節では接続が確立した時に単純にメールキューをフラッシュするという方法 で外へ送り出すメールをどう処理するかを示しました。 WAN 接続の場合、接続先の LAN のネットワーク管理者と相談して同じことを することが可能です。例えば、我々の WAN 接続では Newman Campus 側の /etc/ppp/ip-up スクリプトはこのようになっています。 ______________________________________________________________________ #!/bin/bash # # pppd に必要なルーティング情報の設定 # Hedlan 宛ての接続の場合のみに必要 # # ppp 接続の際、このスクリプトは以下のような引数で呼び出される。 # # $1 pppd が使うインターフェイス名(例:ppp3) # $2 tty デバイス名 # $3 tty デバイス速度 # $4 インターフェイスのローカル IP アドレス # $5 リモートの IP アドレス # $6 pppd の ipparam オプションで指定するパラメータ case "$5" in 203.18.8.4) /usr/sbin/sendmail -q ;; *) esac exit 0 ______________________________________________________________________ ISP 接続で IP アドレスを動的に割りあてる PPP 接続しか使えない場合でも ISP のマシンにあるあなた宛のメールを取りこみたい場合があるでしょう。こ の場合、一般的には POP(Post Office Protocol)を使います。POP は 'popclient' プログラムで扱え、ip-up スクリプトで設定することで自動化す ることが可能です。 適切な設定で popclient を起動するスクリプトのみを含む /etc/ppp/ip-up を用意します。Red Hat Linux の入っているラップトップ機(旅行の必需品で す)では、このようにしています。 ______________________________________________________________________ popclient -3 -c -u hartr -p kepler.hedland.edu.au |formail -s procmail ______________________________________________________________________ ニュースについても同様のことが slurp などのプログラムを使うことで可能 です。ip-up スクリプトは単なる bash スクリプトなので PPP 接続が立ちあ がったときに毎回行うべきどんな仕事でもさせることが可能です。 24. リンクの終了 ルート権限で使えば、既存の /usr/bin/ppp-off スクリプトで問題なく接続を 終了できるはずです。変更したいところは、sendmail がメールを転送してい る場合はしばらく終了を待つようにするぐらいでしょう。 これは宿題として残しておきましょう。 もう一つ、接続を終了する場合にのみ実行されるスクリプトを作ることもでき ます。このスクリプトは /etc/ppp/ip-down です。このスクリプトで /etc/ppp/ip-up スクリプトが行なった変更を復旧させることが可能です。 25. LAN のルーティングに関わる問題 LAN に接続しながら PPP を使いたい場合、(イーサネットインターフェイスを 経由して接続する) LAN へ送るパケットと接続先の PPP サーバからその先へ 送るパケットの経路制御について考慮する必要があります。 このセクションでは経路制御を詳しく紹介するつもりはありません - 単純な (静的)経路制御の例を一つ紹介するに留めます。 経路制御についてよく知らなければ Linux Network Administrator Guide(NAG)に目を通されるように強くお勧めします。また、O'Reilly から出 ている "TCP/IP ネットワーク管理"もこの問題を分りやすく扱っています。 静的な経路制御の基本的なルールは、デフォルトルートがほとんどのネット ワークアドレスを指している、というものです。それ以外のネットワークアド レスにはそれぞれにルーティング情報を登録します。 ここで扱う唯一の状況はインターネットに接続していない LAN につながって いる Linux マシンがあって、LAN を使いつつ電話回線経由でインターネット を個人的に利用したい、という例です。 まず、イーサネットへの経路がデフォルトルートではなく、特定のネットワー クアドレスを指定するルーティングになっていることを確認してください。 これは route コマンドでチェックします。route -n とすれば以下のようなコ マンドが表示されます。 [root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface loopback * 255.255.255.0 U 1936 0 50 lo 10.0.0.0 * 255.255.255.0 U 1436 0 565 eth0 もしイーサネットインターフェイス(eth0)がデフォルトの経路になっている場 合(eth0 の行の最初の行が "default" になります)、イーサネットの初期化ス クリプトを修正して、デフォルトの経路ではなく特定のネットワークアドレス を指すように修正します(詳細は Net2 HOWTO と NAG を見てください)。 こうしておけば、pppd の接続をデフォルトの経路にすることが可能です: [root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 10.144.153.51 * 255.255.255.255 UH 488 0 0 ppp0 127.0.0.0 * 255.255.255.0 U 1936 0 50 lo 10.1.0.0 * 255.255.255.0 U 1436 0 569 eth0 default 10.144.153.51 * UG 488 0 3 ppp0 ご覧のように PPP サーバ(10.144.153.51)へは ppp0 を経由するホストルート が登録され、その PPP サーバをゲートウェイにするようにデフォルトの経路 が定義されています。 もっと複雑な経路制御が必要な場合、先に述べたドキュメントを読み、あなた のサイトのエキスパートに尋ねてください。 接続している LAN がルータにつながっている場合、そのサイトのより大きな ネットワークへ接続するためのゲートウェイが設定されているはずです。その 場合でも、デフォルトルートを PPP インターフェイスにして、その他の経路 はそれぞれのネットワークへ向けることが可能です。 25.1. セキュリティについてのメモ 既存の LAN に接続している Linux マシンを PPP 経由でインターネットに接 続する場合、その LAN 全体を潜在的にインターネットへ解放していることに なります - そこにはクラッカーの危険があります。PPP 経由でインターネッ トに接続するまえにはあなたの組織のネットワーク管理者に相談し、セキュリ ティに関する方針を確認するように強くお勧めします。もしあなたの PPP 接 続を経由してあなたのサイトが攻撃されれば、同僚やネットワーク/システム 管理者の非難の的になることでしょう。さらに深刻な問題を引きおこす危険も あります。 LAN をインターネットに接続する前には、動的な IP アドレス用いて接続した り、先に触れた O'Reilly の "Building Internet Firewalls" を読んで、よ り安全な接続方法を考えてください。 26. どうしようもないときに。 PPP 接続がうまくいかない場合、この文書を再度読んで、全てをチェックし直 してください。同時に "chat -v..." コマンドの出力や "pppd -d" の出力を システムのログファイルから調べてみましょう。 PPP に関するドキュメントや FAQ など、この文書で紹介している文書にも目 を通してみてください。 それでもうまく行かない場合、comp.os.linux.misc か comp.os.linux.networking のニュースグループに投稿してみましょう。これ らのニュースグループは comp.protocols.ppp 同様、PPP に詳しい人がよく読 んでいます。 私宛てに e-mail をしてもらっても結構ですが、私にも仕事(と生活)がありま すので、すばやく返事できるかは保証の限りではありません(あるいは全くで きないかもしれません)。それらは仕事の負荷や個人的な生活の状況に依存し ます。 一言注意しておきますが、膨大なデバッグ出力をニュースグループに投稿した り私あてに送ってこないでください。 前者はネットワークの帯域の浪費です し、後者は /dev/null 送りになります(私が特にその出力を見せてほしいと頼 んだ時以外) 27. 接続がうまくいってから起きやすい問題 問題の一つは、多くのサービスプロバイダが接続用の新しいソフトウェアパッ ケージしかサポートしていないことです。これは(典型的に) Microsoft Windows で見られます :-( 加えて、多くのプロバイダの質問窓口は Unix(Linux)のことを全く知りません。ですから、彼らからの助けはほとんど 無いと覚悟しておいてください。 もちろん、個人的な形で彼らに Linux を教えてやることも可能です(ISP の質 問窓口の担当者はインターネットのことには詳しく、自宅に Linux マシンを 持っている可能性もあります) 27.1. PPP サーバから先へ接続できません。 PPP 接続がつながって、PPP サーバへ IP 番号を指定して ping できるけど (PPP サーバの IP 番号は ifconfig コマンドで ppp0 に "remote" と表示さ れるている IP 番号です)、そこから先へは行けない、という問題ですね。 まず /etc/resolv.conf でネームサーバに指定した IP 番号へ ping してみま す。これがうまく行くようならば、PPP サーバから先へパケットが届いていま す(PPP サーバとネームサーバが同じマシンの場合は除く)。次にサービスプロ バイダのマシンをホスト名(FQDN)で指定して ping してみましょう。例えば、 ping my.provider.net.au これではダメな場合、ホスト名の IP アドレスへの変換がうまくいっていませ ん。多分 /etc/resolv.conf に typo があるのでしょう。/etc/resolv.conf を注意深くチェックして、プロバイダから教えてもらった通りになっているか チェックしてください。間違いが見付からなければ、プロバイダに電話をかけ て、書きうつした IP 番号が正しいか確認してください。 それでもダメなら(プロバイダのネームサーバが正しく働いていることを確認 して)、どこか別のところに問題があるのでしょう。システムの設定が正しい か詳しくチェックしてみることをお勧めします(特にファイルパーミッション に注意)。 それでもプロバイダのネームサーバに IP 番号でも ping できない場合、ネー ムサーバが止まっているか(電話を掛けて確認してみます)、プロバイダ側の経 路制御に問題があるのかも知れません。それらについてプロバイダに再度確認 してみましょう。 一つの可能性としては、接続先も Linux を使った PPP サーバで IP forwarding オプションがカーネルに組みこまれていないのかも知れません! 一般的なテスト方としては、もっともよく使われている Microsoft Windows 用のソフトウェアを使って試してみることです。同じアカウントで、別の OS ならばうまく接続できるような場合、問題はあなたの Linux にあって、サー ビスプロバイダの側ではありません。 27.2. e-mail を出せるんですが受けとれません。 動的な IP アドレスの割り当てを受けている場合、それが普通です。後に触れ る「各種サービスの設定」を御覧ください。 27.3. なぜ他の人が finger や WWW, gopher、talk で私のマシンに接続でき ないのでしょう。 動的な IP アドレスの割り当てを受けている場合、それが普通です。後に触れ る「各種サービスの設定」を御覧ください。 28. 動的な IP 番号でインターネットの各種サービスを使うには IP 番号を接続の度に動的に割りあててもらっている場合(特別の料金を払わな い限り、多くのサービスプロバイダが動的な IP アドレスの割り当てしかして くれません)、多少の制限があることを覚悟しなければいけません。 その場合でも外へ向けてのリクエストは問題なく動きます。すなわち、 sendmail 経由でメールも送れますし、ftp でファイルを取ってきたり、他の マシンのユーザに finger したり、web を見たりすることなどは可能です。 接続していない状態で、自分のマシンに取りこんでおいた e-mail に返事を書 くことも可能です。その場合、出したメールは次に ISP に接続するまでメー ルキューに溜っています。 しかし、あなたのマシンは 24 時間インターネットに接続しているわけではな く、接続の度に同じ IP 番号をもらうわけでもありません。ですから、直接あ なたのマシンが e-mail を受けとることは不可能で、web や ftp のサーバを 用意して友達にアクセスしてもらうようなことも困難です。あなたのマシンに はユニークな IP 番号が付いていないため、インターネットの側から見る限 り、あなたのマシンはいつも存在しているものとは見なされません(別のマシ ンが同じ IP アドレスを割りあてられていることをお忘れなく) WWW サーバ(やその他のサーバ類)を設定したとしても、あなたのマシンがイン ターネットに接続しており、その時点で割りあてられている IP 番号が分から ない限り、誰もあなたのマシンを知ることができません。友人にあなたのマシ ンがどういう IP 番号で接続しているかを知らせるためには、電話をかけるこ とから e-mail、(プロバイダがシェルアカウントを用意してくれる場合)プロ バイダに置いている ".plan" ファイルで知らせることまで、さまざまな方法 があります。 ほとんどのユーザにはこれは特に問題にはならないでしょう。普通の人が必要 とするのは e-mail の送受信と(プロバイダのアカウントで可能です)、WWW や ftp といったインターネット上の各種サービスを利用することですから。も し、あなたのサーバへ接続させる必要がある場合、固定した IP 番号を割りあ ててもらう必要があります。あるいは、上で示した方法をヒントにして、自分 でやり方を開発してください。 28.1. e-mail の設定 動的な IP アドレスの割り当てを使う場合でも正しく設定しておけばローカル に作成した e-mail を自由に出すことは可能です。sendmail の設定はやっか りで面倒な作業です。ですから、この文書では sendmail の設定法については 触れずに、接続先の ISP のメールサーバをあなたのメールのリレーホスト (sendmail.cf の DS オプション)として使う方法のみ説明します。(sendmail の設定の詳細については sendmail の文書類と sendmail と共に配布されてい る m4 の設定集を読んでください。必要な情報は確実にその中にあるはずで す。) Sendmail については優れた本が何冊も出版されています(O'Reilly and Associates からのバイブルが有名です)が、ほとんどのユーザにとっては詳し すぎるでしょう。 sendmail を設定すれば、外へ送り出すキューに溜ったメールを PPP 接続が成 立するとすぐに送りだすように設定したくなるでしょう。このためには /etc/ppp/ip-up スクリプトに sendmail -q & というコマンドを追加します。 動的 IP 割り当てでは送られてきたメールを受けとる際に問題となります。こ の問題を解決するには、 o メーラプログラム(MUA)を設定して、返信メールは全て "reply to" ヘッダ で指定した ISP のアドレスに送られるようにする方法。 可能ならば、FROM 行のアドレスも ISP のアドレスにしておく方がいいで しょう。 o こうしておいて、popclient プログラムを使ってサービスプロバイダから メールを取りこみます。 popclient を使ってメールを取りこむコマンドも必要ならば /etc/ppp/ip-up スクリプトに組みこんで接続が成立した時に自動的に行なうことも可能です。 28.2. ローカルなネームサーバの設定 ネームサーバは接続先の ISP が設定したものを使えば問題はありませんが、 ローカルにキャッシュ機能のみを持った(セカンダリ)ネームサーバを ip-up スクリプトの中で立ちあげることも可能です。ローカルな(キャッシュ機能の みを持った)ネームサーバを立ちあげる利点は、長い接続時間の間に何度も繰 り返し同じサイトにアクセスするような場合に時間(と帯域)の節約になること です。 キャッシュ機能のみを使うネームサーバの DNS の設定はごく単純です (named.boot ファイルの "forwarders"行に ISP の DNS を指定するだけで す)。O'Reilly の "DNS and Bind"が必要なこと全てを解説しています。 また、DNS-HOWTO も役に立つでしょう。 ネチケットについて一言:キャッシュ機能のみを使うセカンダリのネームセー バを立ちあげる場合には ISP に連絡して許可をもらうようにしてください。 正しく設定されば、ローカルな DNS を上げたところで ISP には何の影響も及 ぼしませんが、間違った場合、トラブルが生じることもあります。 29. PPP サーバの設定 既に述べてきたように、PPP サーバを設定する方法はいくつもあります。ここ で紹介するのは(Cyclades のマルチポートシリアルカードを使って)私が使っ ている方法で、電話回線は一つの番号に複数の回線が接続するロータリーダイ アル式になっています。 ここで紹介した方法がお気に召さなければ、ぜひ自分流の方法でやってみてく ださい。この HOWTO の将来のバージョンではいろいろな設定方法を紹介しよ うと思っているので、コメントや試した方法について教えてください。 ここで説明するのは Linux を PPP サーバとして設定する話のみで、特別な ターミナルサーバについての説明などは(一切)するつもりはありません。 また、私は shadow password を試したことがありません(いつかやってみたい のですが)。ですから、以下に説明する話は shadow password 環境については 一切あてはまりません。 29.1. カーネルのコンパイル 今までに述べてきたカーネルのコンパイルやカーネルのバージョンと pppd の バージョンの問題全てがあてはまります。この章では今までに述べてきたこと 全てに目を通されたものとして話を進めます。 PPP サーバ用にはカーネルに IP forward機能を組みこむことが必須です。必 要ならばその他の機能(例えば IP ファイアウォールや IP アカウンティング など)も組みこんでください。 マルチポートシリアルカードを使う場合、必要なドライバを組みこむのを忘れ ないように。 29.2. サーバシステムの概要 電話回線を経由して PPP(と SLIP)で接続してくるユーザ用にユーザアカウン トとシェルアカウントをユーザ名/パスワードのペアを使って提供します。こ うしておけば(我々にとって有利なことに)ユーザが必要になるのは一つのアカ ウントのみで、そのアカウントで全ての接続を行うことになります。 私たちは教育機関の人間で、スタッフや学生のアクセスに課金しません。です から、接続時間の管理や接続料の請求には煩わされないことにします。 インターネットと私たちのサイトの間にはファイアウォールを設け、ファイア ウォール内部へ電話回線経由でアクセスしてくるユーザが外部へアクセスする のを制限します(実際には内部にもいくつかファイアウォールがあるのです が、それらについては必要ないので触れません) ユーザが PPP で接続してくる手順としては(もちろん有効なアカウントを持っ たユーザです): o ロータリー式になっている番号に電話をかける(これは一つの電話番号に複 数のモデムがつながっており、かかってきた電話は最初の空いているモデ ムに接続します) o 正しいユーザ名とパスワードを使ってログイン。 o シェルプロンプトで ppp コマンドを使ってサーバの PPP を起動 o PC 側の PPP を起動(ユーザ側は Windows でも DOS でも、Linux でも MAC OS でも、何でも構いません) サーバはそれぞれの/etc/ppp/options.ttyXX ファイルを使って、それぞれの ポートごとに異なる IP 番号を接続先にセットします(接続する側からすると 動的な IP 割りあてになります)。サーバは接続してくるクライアントに proxyarp ルーティングを使って経路を作ります(pppd のオプションで指定し ます)。こうしておけば routed や gated は不要になります。 ユーザが接続を切った場合、pppd が接続断を認識してモデムに回線を切るよ うに命じ、同時に PPP 接続も終了するようにします。 29.3. ソフトウェアを集める 以下のようなソフトウェアが必要です。 o Linux。必要な機能を正しく組みこんでおくこと。 o カーネルのバージョンに合った pppd。 o モデムとの接続をきちんと処理する 'getty' プログラム。 私たちは getty_ps2.0.7h を使っていますが、mgetty の方がいいように思 います。聞いたところによると mgetty は pap/chap を使った接続も正し く認識して(pap は Windows95 で標準になっています) pppd を自動的に起 動するそうなのですが、まだ試したことはありません。 o 電話回線経由で接続してくるユーザが使える DNS サーバ。 可能ならば自らの DNS サーバを立ちあげましょう。 29.4. 標準的な(シェル経由の)接続。 PPP サーバを設定する前に Linux が正しく電話を受けられることを確認して おいてください。 この HOWTO ではその部分は扱いません。選んだ getty のドキュメントや serial HOWTO を御覧ください。 29.5. PPP のオプションファイルの設定 /etc/ppp/options には全てのポートに共通するオプションを設定します。私 たちが使っているオプションは: ______________________________________________________________________ asyncmap 0 netmask 255.255.254.0 proxyarp lock crtscts modem ______________________________________________________________________ 注意 - 私たちは(明示的に)経路を指定していません - 加えてデフォルトルー トオプションも指定していません。なぜなら、(PPP サーバにとって)必要な機 能は ppp クライアントからのパケットを LAN/Internet へ送りだし、 LAN/Internet からのパケットをクライアントへ送りだすことだけだからで す。 このために必要なのはクラアントマシンへのホストとしての経路とpppd に与 える 'proxyarp' オプションだけです。 proxyarp オプションを指定すると(驚くべきことに) PPP サーバの arp テー ブルに「PPP クライアント宛てのパケットは全て私に送って」という意味にな るエントリが作成されます。これが一台の PPP クライアントへの経路を作る もっとも簡単な方法です。しかしながら、この方法では 2 つの LAN を結びつ けることはできません。そのためには proxy arp ではなく正しくネットワー クルートを定義してやる必要があります。 電話回線経由で接続してくるユーザに動的に IP アドレスを割りあてるために は、ポートごとに IP 番号を割りあてておきます。そのためには /etc/ppp/options.ttyXX をポートごとに作っておきます。 このファイルにはローカル(サーバ側)の IP 番号とそのポートに割りあてる IP 番号を記述しておきます。例えば: ______________________________________________________________________ kepler:slip01 ______________________________________________________________________ このファイルには有効なホスト名を指定できることに注意してください(私の 憶えている IP 番号は本当に核となるマシンとネットワークデバイスのみでし た。ホスト名は数字よりも意味があるので記憶しやすいでしょう)。 29.6. pppd をユーザが(うまく)動かせるように設定する ppp 接続を開始する際にはカーネルのデバイス(ネットワークインターフェイ ス)を設定し、カーネルのルーティングテーブルを操作しなければいけません ので、ルート権限が必要になります。 幸いなことに、pppd は uid を root にしても「安全」なようにデザインされ ているので、 ______________________________________________________________________ chmod u+s /usr/sbin/pppd ______________________________________________________________________ しておきます。 このファイルを ls -l すると次のように表示されます。 ______________________________________________________________________ -rwsr-xr-x 1 root root 74224 Apr 28 07:17 /usr/sbin/pppd ______________________________________________________________________ こうなっていないとユーザが ppp 接続を開始することができません。 29.7. pppd 用のエイリアスの設定 接続してくるユーザに分りやすいように、/etc/bashrc にエイリアスを設定し て、ログインすれば一つのコマンドだけで ppp を起動できるようにしておき ましょう。 私たちはこういうエイリアスを作っています。 ______________________________________________________________________ alias ppp="exec /usr/sbin/pppd -detach" ______________________________________________________________________ このエイリアスの意味は o exec : 現在動いているプログラム(この例ではシェル)に替えて、指定した プログラムを起動。 o pppd -detach : pppd を fork してバックグラウンドに入らないようにし て起動。こうしておけば pppd が終了した時に(PPP 接続中に起動した)プ ロセスも全て終了します。 ユーザがログインしてくれば、'w' コマンドで以下のように表示されま す。 ______________________________________________________________________ 6:24pm up 3 days, 7:00, 4 users, load average: 0.05, 0.03, 0.00 User tty login@ idle JCPU PCPU what hartr ttyC0 3:05am 9:14 - ______________________________________________________________________ これでお終い。初めに言った通り、単純で基本的な PPP サーバシステムが出 来上がりました。 30. PPP をヌルモデム(シリアル直結)で使うには これは間にモデムが無い分、ずっと簡単です。 まず、'サーバ'となるマシンを選び、シリアルポートに getty の設定をし て、 minicom などの通信ソフトを使ってシリアルポートに'クライアント'が 接続できるかテストします。 機能することが確認できれば getty は削除してしまって構いません。もっと も、電話回線の場合のように、ユーザ名とパスワードを使って接続を認証する 場合は getty を残しておきます。ただし、シリアルで直結するような場合、 双方のマシンとも目の届く範囲にあるはずなので、普通は特に認証する必要は ないでしょう。 次に、サーバ側の getty を外すと同時に、双方のマシンのシリアルポートが setserial で正しく設定されているか確認してください。 これで双方のマシンで pppd を起動するだけです。例えば /dev/cua4 に接続 している場合、双方のマシンで以下のコマンドを実行します。 ______________________________________________________________________ pppd -detach crtscts lock : /dev/cua4 38400 & ______________________________________________________________________ これで接続が成立します - しかし、これだけでは経路情報が設定されていま せん。双方のマシンで ping で接続していることを確認し、大丈夫なようなら 一旦 pppd プロセスを kill して接続を終了させます。 もちろん、必要となる経路情報は何をしたいかによって異なりますが、このよ うな形態の接続をする場合、一般的に片方ののマシンがイーサネット(とその 先)に接続しているはずなので、PPP サーバとクライアントの形の経路情報が 必要になるでしょう。 ですから、イーサネットに接続されたマシンでは pppd をこのように起動しま す。 ______________________________________________________________________ pppd -detach crtscts lock proxyarp : /dev/cua4 38400 & ______________________________________________________________________ もう一方のマシンでは ______________________________________________________________________ pppd -detach crtscts lock defaultroute : /dev/cua4 38400 & ______________________________________________________________________ とします。複数のネットワークを(シリアル接続を使って!)つなぐ場合や、よ り複雑な経路制御が必要な場合、既述したように /etc/ppp/ip-up を使って設 定してください。 Robert Hart Port Hedland, Western Australia August 1996