Solaris のシステム管理 (ネットワークサービス)

ダイアルアップリンクでの会話の定義

ダイアルアウトマシンとそのリモートピアは、さまざまな命令をネゴシエーションしたり交換したりして PPP リンク上で通信します。ダイアルアウトマシンを構成するときは、ローカルおよびリモートモデムから要求される命令の内容を判定する必要があります。次に、その命令を含む chat スクリプトと呼ばれるファイルを作成します。この節では、モデムの設定および chat スクリプトの作成について説明します。

chat スクリプトの内容

ダイアルアウトマシンが接続する必要があるリモートピアは、通常、それぞれピア自身の chat スクリプトを必要とします。


注 –

chat スクリプトは、通常、ダイアルアップリンクだけで使用されます。専用回線リンクは、起動時の設定が必要な非同期インタフェースを使用しないかぎり、chat スクリプトを使用しません。


chat スクリプトの内容は、モデムまたは ISDN TA の要件、およびリモートピアの要件によって決まります。スクリプトの内容は、一連の送信予期文字列として表示されます。ダイアルアウトマシンとリモートピアは、この文字列を通信の開始処理時に交換します。

予期文字列には、会話を開始するためにダイアルアウトホストマシンがリモートピアから受け取ると予想される文字が含まれます。送信文字列には、ダイアルアウトマシンが、予期文字列を受け取ったあとでリモートピアに送信する文字が含まれます。

chat スクリプト内の情報には、通常、次が含まれます。

chat スクリプトの例

この節では、独自の chat スクリプトを作成する際の参考になる chat スクリプトの例を紹介します。モデムメーカーのガイドや ISP およびほかのターゲットホストからの情報には、モデムおよびターゲットピアの chat の要件が含まれています。また、数多くの PPP Web サイトで chat スクリプトのサンプルが提供されています。

基本のモデム chat スクリプト

次は、独自の chat スクリプトを作成するためのテンプレートとして使用できる基本の chat スクリプトです。


ABORT   BUSY
ABORT   'NO CARRIER'
REPORT  CONNECT
TIMEOUT 10
"" AT&F1M0&M5S2=255
SAY     "Calling myserver\n"
TIMEOUT 60
OK      "ATDT1-123-555-1212"
ogin: pppuser
ssword: \q\U
% pppd

次の表では、chat スクリプトの内容を説明します。

スクリプトの内容 

意味 

ABORT BUSY

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT 'NO CARRIER'

ダイアル時にモデムが ABORT 'NO CARRIER' を報告した場合、伝送を中止します。このメッセージは、通常、ダイアルまたはモデムのネゴシエーションが失敗したときに発生します。

REPORT CONNECT

CONNECT 文字列をモデムから収集し、その文字列を出力します。

TIMEOUT 10

初期タイムアウトを 10 秒に設定します。モデムは即時に応答する必要があります。 

"" AT&F1M0&M5S2=255

M0 – 接続中、スピーカーをオフに設定します。

&M5 – モデムにエラー制御を要求させます。

S2=255 – TIES “+++” ブレークシーケンスを無効にします。

SAY "Calling myserver\n"

ローカルマシン上に「Calling myserver (myserver を呼び出し中)」のメッセージを表示します。

TIMEOUT 60

タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てます。 

OK "ATDT1-123-555-1212"

電話番号 1-123-555-1212 を使ってリモートピアに発信します。 

ogin: pppuser

UNIX 方式のログインを使ってピアにログインします。ユーザー名 pppuser を指定します。

ssword: \q\U

\q-v オプションを使ってデバッグする場合、ログをとりません。

\U-U のあとに続く文字列の内容をこの位置に挿入します。文字列はコマンド行に指定されるもので、通常はパスワードが含まれます。

% pppd

% シェルプロンプトを待ち、pppd コマンドを実行します。

/etc/ppp/myisp-chat.tmpl chat スクリプトテンプレート

Solaris PPP 4.0 には、ユーザーが自分のサイトで使用するために変更できる /etc/ppp/myisp-chat.tmpl という chat スクリプトテンプレートが用意されています。/etc/ppp/myisp-chat.tmpl は、基本のモデム chat スクリプトと似ていますが、ログインシーケンスが含まれていません。


ABORT   BUSY
ABORT   'NO CARRIER'
REPORT  CONNECT
TIMEOUT 10
""      "AT&F1"
OK      "AT&C1&D2"
SAY     "Calling myisp\n"
TIMEOUT 60
OK      "ATDT1-123-555-1212"
CONNECT \c

スクリプトの内容 

意味 

ABORT BUSY

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT 'NO CARRIER

ダイアル時にモデムが ABORT 'NO CARRIER' を報告した場合、伝送を中止します。このメッセージは、通常、ダイアルまたはモデムのネゴシエーションが失敗したときに発生します。

REPORT CONNECT

CONNECT 文字列をモデムから収集し、その文字列を出力します。

TIMEOUT 10

初期タイムアウトを 10 秒に設定します。モデムは即時に応答する必要があります。 

"" "AT&F1"

モデムを出荷時のデフォルトにリセットします。 

OK "AT&C1&D2"

モデムをリセットします。その結果、&C1 では、モデムからの DCD がキャリアを追跡します。リモート側がなんらかの理由で電話を切った場合、DCD はドロップします。  

&D2 では、DTR の High-Low 遷移により、モデムが「オンフック」状態になるか、またはハングアップします。 

SAY "Calling myisp\n"

ローカルマシン上に「Calling myisp (myisp を呼び出し中)」のメッセージを表示します。 

TIMEOUT 60

タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てます。 

OK "ATDT1-123-555-1212"

電話番号 1-123-555-1212 を使ってリモートピアに発信します。 

CONNECT \c

反対側のピアのモデムからの CONNECT メッセージを待ちます。

ISP を呼び出すためのモデムの chat スクリプト

ダイアルアウトマシンから U.S. Robotics Courier モデムを使用して ISP を呼び出すには、テンプレートとして次の chat スクリプトを使用します。


ABORT   BUSY
ABORT   'NO CARRIER'
REPORT  CONNECT
TIMEOUT 10
"" AT&F1M0&M5S2=255
SAY     "Calling myisp\n"
TIMEOUT 60
OK      "ATDT1-123-555-1212"
CONNECT \c
\r \d\c
SAY "Connected; running PPP\n"

次の表では、chat スクリプトの内容を説明します。

スクリプトの内容 

意味 

ABORT BUSY

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT 'NO CARRIER'

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

REPORT CONNECT

CONNECT 文字列をモデムから収集し、その文字列を出力します。

TIMEOUT 10

初期タイムアウトを 10 秒に設定します。モデムは即時に応答する必要があります。 

"" AT&F1M0M0M0M0&M5S2=255

M0 – 接続中、スピーカーをオフに設定します。

&M5 – モデムにエラー制御を要求させます。

S2=255 – TIES “+++” ブレークシーケンスを無効にします。

SAY "Calling myisp\n"

ローカルマシン上に「Calling myisp (myisp を呼び出し中)」のメッセージを表示します。

TIMEOUT 60

タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てます。 

OK "ATDT1-123-555-1212"

電話番号 1-123-555-1212 を使ってリモートピアに発信します。 

CONNECT \c

反対側のピアのモデムからの CONNECT メッセージを待ちます。

\r \d\c

CONNECT メッセージの最後まで待ちます。

SAY “Connected; running PPP\n” 

ローカルマシン上に「Connected; running PPP (接続完了。PPP を実行中)」という通知メッセージを表示します。

UNIX 方式ログイン用に拡張された基本の chat スクリプト

次の chat スクリプトは、Solaris のリモートピアまたはほかの UNIX タイプのピアを呼び出すために基本のスクリプトを拡張したものです。この chat スクリプトは、「ピアを呼び出すための命令群を作成する方法」で使用されています。


        SAY "Calling the peer\n"
        TIMEOUT 10
        ABORT BUSY
        ABORT 'NO CARRIER'
        ABORT ERROR
        REPORT CONNECT
        "" AT&F1&M5S2=255
        TIMEOUT 60
        OK ATDT1-123-555-1234
        CONNECT \c
        SAY "Connected; logging in.\n"
        TIMEOUT 5
        ogin:--ogin: pppuser
        TIMEOUT 20
        ABORT 'ogin incorrect'
        ssword: \qmypassword
        "% " \c
        SAY "Logged in.  Starting PPP on peer system.\n" 
        ABORT 'not found'
        "" "exec pppd"
        ~ \c

次の表では、chat スクリプトのパラメータを説明します。

スクリプトの内容 

意味 

TIMEOUT 10

初期タイムアウトを 10 秒に設定します。モデムは即時に応答する必要があります。 

ABORT BUSY

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT 'NO CARRIER'

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT ERROR

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

REPORT CONNECT

CONNECT 文字列をモデムから収集し、その文字列を出力します。

"" AT&F1&M5S2=255

&M5 – モデムにエラー制御を要求させます。

S2=255 – TIES “+++” ブレークシーケンスを無効にします。

TIMEOUT 60

タイムアウトを 60 秒にリセットし、接続ネゴシエーションにより多くの時間を割り当てます。 

OK ATDT1-123-555-1234

電話番号 1-123-555-1212 を使ってリモートピアに発信します。 

CONNECT \c

反対側のピアのモデムからの CONNECT メッセージを待ちます。

SAY "Connected; logging in.\n"

Connected; logging in (接続完了。ログイン中)」という通知メッセージを表示して、ユーザーの状態を知らせます。

TIMEOUT 5

タイムアウトを変更し、ログインプロンプトを迅速に表示できるようにします。 

ogin:--ogin: pppuser

ログインプロンプトを待ちます。ログインプロンプトを受け取らなかった場合は、RETURN を送信して待機します。次にユーザー名 pppuser をピアに送信します。この後に続くシーケンスは、ほとんどの ISP から PAP ログインと呼ばれています。ただし、PAP 認証とはまったく無関係です。

TIMEOUT 20

タイムアウトを 20 秒に変更し、パスワードの検証により多くの時間をかけられるようにします。 

ssword: \qmysecrethere

ピアからのパスワードプロンプトを待ちます。プロンプトを受け取ると、パスワード \qmysecrethere を送信します。\q は、パスワードがシステムログファイルに書き込まれるのを防ぎます。

"% " \c

ピアからのシェルプロンプトを待ちます。chat スクリプトは C シェルを使用します。ユーザーが異なるシェルを使ってログインすることを希望する場合は、この値を変更します。 

SAY "Logged in. Starting PPP on peer system.\n"

Logged in. Starting PPP on peer system (ログイン完了。ピアシステム上で PPP を開始中)」という通知メッセージを表示してユーザーの状態を通知します。

ABORT 'not found'

シェルがエラーに遭遇した場合、伝送を中止します。 

"" "exec pppd"

ピア上で pppd を起動します。

~ \c

PPP がピア上で開始するのを待ちます。 

ISP は、CONNECT \c の直後に PPP を開始することをしばしば「PAP ログイン」といいます。しかし、実際には、PAP ログインは PAP 認証とは無関係です。

ogin:--ogin: pppuser 句は、ダイアルインサーバーからのログインプロンプトに対してユーザー名 pppuser を送信するようにモデムに指示します。pppuser は、ダイアルインサーバー上のリモートユーザー user1 用に作成された専用の PPP ユーザーアカウント名です。ダイアルインサーバー上に PPP ユーザーアカウントを作成する方法については、「ダイアルインサーバーのユーザーを構成する方法」を参照してください。

外部 ISDN TA 用 chat スクリプト

次は、ダイアルアウトマシンから ZyXEL omni.net. ISDN TA を使って呼び出すための chat スクリプトです。


        SAY "Calling the peer\n"
        TIMEOUT 10
        ABORT BUSY
        ABORT 'NO CARRIER'
        ABORT ERROR
        REPORT CONNECT
        "" AT&FB40S83.7=1&K44&J3X7S61.3=1S0=0S2=255
        OK ATDI18882638234
        CONNECT \c
        \r \d\c
        SAY "Connected; running PPP\n"

次の表では、chat スクリプトのパラメータを説明します。

スクリプトの内容 

意味 

SAY "Calling the peer"

ダイアルアウトマシンの画面上にこのメッセージを表示します。 

TIMEOUT 10

初期タイムアウトを 10 秒に設定します。 

ABORT BUSY

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT 'NO CARRIER'

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

ABORT ERROR

モデムが反対側のピアからこのメッセージを受け取った場合、伝送を中止します。 

REPORT CONNECT

CONNECT 文字列をモデムから収集し、その文字列を出力します。

"" AT&FB40S83.7=1&K44&J3X7S61.3=1S0=0S2=255

この行内の文字は、次を意味します。 

  • &F – 出荷時のデフォルトを使用します

  • B40 – 非同期 PPP 変換を実行します

  • S83.7=1 – スピーチベアラーにデータを使用します

  • &K44 – CCP 圧縮を有効にします

  • &J3 – MP を有効にします

  • X7 – DCE 側のレートを報告します

  • S61.3=1 – パケット断片化を使用します

  • S0=0 – 自動応答を行いません

  • S2=255 – TIES エスケープを無効にします

OK ATDI18882638234

ISDN 呼び出しを行います。マルチリンクでは、2 番目の呼び出しは、同じ電話番号に対して行われます。これは、通常、ほとんどの ISP の条件です。リモートピアが 2 番目の電話番号に異なる番号を要求する場合は、「+nnnn」を付け加えます。nnnn は 2 番目の電話番号を表します。

CONNECT \c

反対側のピアのモデムからの CONNECT メッセージを待ちます。

\r \d\c

CONNECT メッセージの最後まで待ちます。

SAY "Connected; running PPP\n"

ダイアルアウトマシンの画面上にこのメッセージを表示します。 

chat スクリプトのオプションの説明およびその他の詳細な情報については、chat(1M) のマニュアルページを参照してください。expect-send 文字列の説明については、/etc/uucp/Systems ファイルの Chat-Script フィールド」を参照してください。

その他の chat スクリプト例の参照先

数多くの Web サイトで、chat スクリプトのサンプルとスクリプト作成のヒントが提供されています。たとえば、http://ppp.samba.org/ppp/index.html を参照してください。

chat スクリプトの呼び出し

chat スクリプトを呼び出すには、connect オプションを使用します。PPP 構成ファイルまたはコマンド行で connect "chat ..." を使用できます。

chat スクリプトは実行可能ではありませんが、connect によって呼び出されるプログラムは実行可能でなければなりません。connect によって呼び出されるプログラムとして chat ユーティリティーを使用することがあります。この場合、-f オプションを使用して chat スクリプトを外部ファイルに保存すると、chat スクリプトファイルは実行可能にはなりません。

chat(1m) で説明されている chat プログラムは、実際の chat スクリプトを実行します。pppd デーモンは、pppdconnect "chat ..." オプションを検出すると必ず、chat プログラムを起動します。


注 –

PerlTcl などの外部プログラムを使って機能を拡張した chat スクリプトを作成することもできます。Solaris PPP 4.0 で chat ユーティリティーが提供されているのは、ユーザーの便宜を図るためです。


Procedurechat スクリプトを呼び出す方法 (手順)

  1. ASCII ファイル形式で chat スクリプトを作成します。

  2. 次の構文を使用して、任意の PPP 構成ファイル内で chat スクリプトを呼び出します。


    connect 'chat  -f /etc/ppp/chatfile'

    -f フラグは、ファイル名があとに続くことを示します。/etc/ppp/chatfile は、chat ファイルの名前を表します。

  3. 外部 chat ファイルの読み取り権を pppd コマンドを実行するユーザーに与えます。


    注意 – 注意 –

    connect 'chat ...' オプションが特権ソースから呼び出された場合でも、chat プログラムは、常にユーザーの権限と連携して実行します。したがって、-f オプションを使って読み取る個別の chat ファイルを呼び出すユーザーは、そのファイルの読み取り権を備えている必要があります。chat スクリプトにパスワードやその他の機密情報が含まれる場合、この特権はセキュリティーの問題にかかわる可能性があります。



例 22–1 インライン chat スクリプト

次に示すように、chat スクリプトの全会話を 1 つの行に入れることができます。


connect 'chat "" "AT&F1" OK ATDT5551212 CONNECT "\c"'

chat スクリプトは、chat キーワードのあとに続きます。スクリプトは "\c"' で終了します。この形式は、pppd の引数として、PPP 構成ファイルまたはコマンド行で使用できます。


外部ファイル内の chat スクリプト

特定のピアで必要な chat スクリプトが長くて複雑な場合は、スクリプトを別ファイルとして作成することを考えます。外部 chat ファイルは、簡単に維持、作成できます。ハッシュ記号 (#) のあとに続けて chat ファイルについてのコメントを追加できます。

外部ファイルに含まれる chat スクリプトの使用については、「ピアを呼び出すための命令群を作成する方法」の手順を参照してください。

実行可能な chat ファイルの作成

実行可能なスクリプトの chat ファイルを作成して、ダイアルアップリンクが開始されたときに自動的に実行されるようにできます。これにより、接続開始時に、従来の chat スクリプトに含まれるコマンドのほかに、パリティー設定のための stty のような追加コマンドを実行できます。

この実行可能な chat スクリプトは、7 ビット長/ 偶数パリティーを要求する旧スタイルの UNIX システムにログインし、PPP 実行時に 8 ビット長/ パリティーなしに移行します。


#!/bin/sh
chat "" "AT&F1" OK "ATDT555-1212" CONNECT "\c"
stty evenp
chat ogin: pppuser ssword: "\q\U" % "exec pppd"
stty -evenp

Procedure実行可能な chat プログラムを作成する方法

  1. テキストエディタを使用して、前述の例のような実行可能な chat プログラムを作成します。

  2. chat プログラムを実行可能にします。


    # chmod +x /etc/ppp/chatprogram
    
  3. chat プログラムを呼び出します。


    connect /etc/ppp/chatprogram
    

    chat プログラムの場所は、/etc/ppp ファイルシステム内である必要はありません。chat プログラムは任意の場所に保存できます。