ほとんどの人は仕事場でインターネットを使っています。しかし、自宅であ るいは仕事場以外の場所でもたびたびネットを必要とすることがあります。在 宅での作業は、会社からの作業よりもより安上がりになるかもしれません。もっ ともよい解決方法は Linux のサーバにコールバックソフトウェアをインストー ルすることだと思います。コールバックは、費用を会社負担とし、リストした 電話番号に再ダイアルできるようにします。 運用方法を紹介しましょう。モデムがコールバックしてもよいと許可されてい る人は、まず Linux のサーバに電話をかけて認証を受けます。ユーザ側では、 モデムを "モデムを切断する" という設定に変更しておくと、同時に Linux はユーザに電話をします。ユーザは再度認証を受けます。接続が完了するとサー バには課金がかかります。ユーザは接続を開始したときだけの料金を払うので す。許可されていない人たちにコールバックが使えないように、コールバック プログラムには二度の照合や追加オプションがあります。社内ネットワークや インターネットからの接続だけにアクセス者を限定できます。コールバックは とても融通がききます。以下、Linux システムでのコールバックサーバのコン フィグレーションを公開し、お使いのコンピュータで再電話接続を設定する方 法を紹介しています。
管理者はさまざまな種類のモデムを使いたがりますが、モデムを購入するとき は、いくつかの注意事項を忘れてはいけません。
適切なモデムを入手したら、システムにモデムを設定しなければなりません。 モデムが、どの com ポート上にあるかをチェックします。それからハードウェアと /dev/modem にシンボリックリンクを作ります。たとえば、2つ目の com ポートにモ デムがつながっているなら、次のようにします。
ln -s /dev/cua1 /dev/modem
リンクを確認しておきます。
lrwxrwxrwx 1 root uucp 9 Sep 19 19:10 /dev/modem -> /dev/cua1
別の com ポート上にモデムがつながっているなら、モデムデバイスと com ポートは 次のような関係になっています。
/dev/cua0 is com1 /dev/cua1 is com2 /dev/cua2 is com3 /dev/cua3 is com4
新しいカーネルでは次のようになっています。
/dev/ttyS0 is com1 /dev/ttyS1 is com2 /dev/ttyS2 is com3 /dev/ttyS3 is com4
minicom を使って設定をチェックします。
訳注:kernel-2.2.x の /usr/src/linux/Documentation/Changes の General Information に次のような記述があります。 /dev/ttyS* で設定したほうがよいでしょう。
Also, please remember that cua* devices are now obsolete. Switch to the corresponding ttyS* device instead (e.g., cua0 -> ttyS0, cua1 -> ttyS1, etc.). cua* デバイスは現在は使われていません。 かわりに対応する ttyS* デバイスに変更します。 (たとえば、cua0 は ttyS0 に、cua1 は ttyS1 のようになります。)
また mgetty のパッケージの doc のディレクトリに ttyS-cua.txt という ファイルが添付されているので参照してください。
Linux 上にアクセス可能なコールバックを作る最初の手順は、カーネルに適切 なパラメータを設定することです。カーネルに ppp が組み込まれているかどう かをチェックします。お使いのカーネルに ppp が組み込まれていない、ある いはモジュールにもなっていないなら、カーネルを再構築し、ppp を組み込ま なければいけません。より詳しい情報は Kernel-HOWTO にあります。できてい ますね。適切なカーネルをお使いですね。それではシステムにソフトウェアを インストールしましょう。コールバックプログラムは mgetty-sendfax と ppp の一部です。お使いのディストリビューションにすべてのものが入っているで しょう。コールバックシステムは二回認証を行いますから、サーバ側では ppp を走らせるユーザを作っておきます。
訳注 : /etc/passwd に以下の内容を追加します。
pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin
次にパスワードを変更します。/etc/ppp/pap-secret にパスワードについての 情報を追加しなければいけません(詳細は man pppd で確認してください)。
pppuser * password_for_pppuser *
訳注:$ cat /etc/ppp/pap-secret で確認しておきます。
このユーザは通常のシェルを持っていませんが /etc/ppp/ppplogin ファイル に存在します。このファイルは自分で作成します。 たとえば vi を使って /etc/ppp/ppplogin を次のように編集します。
#!/bin/sh exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2
アドレス 192.168.1.1 はモデムを持つサーバのアドレスで、 アドレス 192.168.1.2 は自分のモデムに割り当てるアドレスです。 このファイルに実行オプションを立てます。 ppp デーモンを使うので、このデーモンにオプションを設定しなくてはいけません。 /etc/ppp/options ファイルを編集します。
netmask 255.255.255.0 proxyarp lock crtscts modem
Proxyarp は、サーバにあるモデムを通じてインターネットに出て行くことが できるので、上記オプションで最も重要なものです。その他のオプションはお 使いのモデムの制御に使われます。オプション proxyarp を使わなければ、ユー ザはローカルネットワークでだけ作業ができます。詳細は PPP-HOWTO やオン ラインマニュアルで pppd を調べてください。
注:ARP [Address Resolution Protocol]
それではサーバ上のモデムを設定しましょう。 サーバ起動後に接続を受け入れる準備をしなければいけません。 /etc/inittab を編集し、2つ目の com ポート上にモデムを加えます。
s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
1つ目の com ポートに対しては次のようになります。
s0:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
init q を送ります。 記録にどんなエラー情報も出ないなら、次に進みましょう。 /etc/ppp のディレクトリに戻り、 options.ttyS1 というファイルを作ります(com1 ポートのモデムには options.ttyS0 になります)。
IP_local: IP_remote
われわれのネットでは次のようにしています。
192.168.1.1:192.168.1.2
さらにすることがあります。 /etc/mgetty+sendfax/login.config というファイルをチェックします。 一番重要なものは次の行です。
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug
他の行は #
マークをつけることができます。
pppuser はpppd を稼働させ、インターフェースとして動くようにしなければ なりませんから、次のコマンドで、pppd に suid を設定します。
chmod u+s /usr/sbin/pppd
訳注:$ ls /usr/sbin/pppd
そうすればこのようになります。
-rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd
私のサーバでは pppd の再起動を優先させた後に問題があったので、 cron に加えるのはよい考えだと思います。 サーバはルータとして動きます。 IP forwarding を使えるように /etc/rc.d/rc.local に次の行を加えます。
echo "1" > /proc/sys/net/ipv4/ip_forward
RedHat のユーザの場合は、 FORWARD_IPV4=false から FORWARD_IPV4=true に /etc/sysconfig/network ファイルで変更できます。
認証のために Linux に電話をかけます。そのためにスクリプトを使います。
MS Windows を使うなら、"接続のあとで端末を呼び出す"
のオプショ
ンをマークしておきます。ユーザ名 pppuser 、パスワードは pppuser のパス
ワードでログインします。すべてがうまくいきますように。
私たちはすでに Linux サーバ に電話をかけることができます。さて、Linux
が私たちに電話をかける番です。難しいことではありません。2つのファイル
を編集しなくてはいけません。/etc/mgetty+sendfax/callback.conf
というファイルを作り、それを空っぽのファイルにしておきます。
次にユーザの電話番号を登録します。さきほど接続に使った電話番号を書きこみます。 そのために /etc/mgetty+sendfax/login.conf に次のような行を加えます。
call - - /usr/sbin/callback - S 123456
電話が非ユーザの場合は接続の開始を要求します。
/etc/mgetty+sendfax/login.conf
に登録された電話番号 (例では
123456 としています)に電話をかけるプログラムを動くようにしておきます。
その他ユーザも同じ方法で登録します。どのように動いているのか説明しましょ
う。サーバに電話をかけると、認証を受けます。電話をかけると非ユーザとし
てログインするのです。自分のコンピュータのスクリプトがモデムをハングアッ
プします。そのまま待機すると接続は切られます。すると、コールバックプロ
グラムが起動し、折り返し呼び出しを受けます。パスワードを使って pppuser
として再度認証されると、電話がつながり ppp が確立します。これですべて
です。稼働状態はとても単純です。MS Windows をお使いなら、お使いの電話
番号にダイアルアップをインストールしなければなりません。モデムプロパティ
の"プロパティ- - ->詳細- - -> 追加オプション" に次のモデムコマン
ドを書き込みます。
&c0s0=1
モデムプロパティの窓を閉じ電話をかけます。上に示した方法でログインしま す。Linux を使うならスクリプトを使わなければいけません。Linux ではこれ が一番良いというスクリプトをひとつだけ提示するのは難しいです。システム において、ppp をうまく設定することがまずは重要なことです。(次に示した スクリプトを使って pppuser として電話をすることができます)。下記のスク リプトは、 A. Gozdz によって書かれました。
これらのスクリプトは Slackware で動きます。
ppp デーモンのコンフィグレーションファイル /etc/options (com2 ポートにつながっているモデムの例)
lock defaultroute noipdefault modem /dev/cua1 33600 crtscts debug passive asyncmap 0
目的別のスクリプトです。
#!/bin/bash teksta="Connection failed" tekstb="Probably, You will be connect" # /sbin/setserial /dev/cua1 spd_vhi killall -INT pppd 2>/dev/null rm -f /var/lock/LCK* /var/run/ppp*.pid (/usr/sbin/pppd -detach /dev/ttyS1 115200 \ connect "/usr/sbin/chat -v -f /etc/ppp/pppcallback" &) || \ (echo $teksta; ls marsss >/dev/null; exit 1) echo $tekstb exit 0
TIMEOUT 60 ABORT 'ERROR' ABORT 'BUSY' ABORT 'NO ANSWER' ABORT 'NO DIALTONE' ABORT '\nVOICE\r' ABORT '\nRINGING\r\n\r\nRINGING\r' '' AT&FH0 <p>'OK-+++\c-OK' 'AT&C0S0=1' TIMEOUT 75 OK ATDT123456 CONNECT '' ogin:-ogin: ppp_pseudouser '\nNO CARRIER\r' '' TIMEOUT 180 '\nRING\r' AT&C1A CONNECT '' TIMEOUT 20 ogin:-ogin: pppuser sword:-sword password_for_pppuser
次のスクリプトはLINUX RED HAT 6.x です。
lock defaultroute noipdefault modem 33600 crtscts debug passive asyncmap 0
TIMEOUT 5 ABORT 'ERROR' ABORT 'BUSY' ABORT 'NO ANSWER' ABORT 'NO DIALTONE' ABORT '\nVOICE\r' ABORT '\nRINGING\r\n\r\nRINGING\r' '' AT&FH0 'OK-+++\c-OK' 'AT&C0S0=1' TIMEOUT 40 OK ATDT5376443 CONNECT '' ogin:-ogin: ppp-pseudo-user '\nNO CARRIER\r' '' TIMEOUT 180 '\nRING\r' AT&C1A CONNECT '' TIMEOUT 20 ogin:-ogin: pppuser sword:-sword password_for_ppuser
#!/bin/bash teksta="Connection failed" tekstb="Probably, You will be connect" # /sbin/setserial /dev/cua1 spd_vhi killall -INT pppd 2>/dev/null rm -f /var/lock/LCK* /var/run/ppp*.pid (/usr/sbin/pppd -detach call ppp_call &) || \ (echo $teksta; ls marsss >/dev/null; exit 1) echo $tekstb exit 0
M$ Windows をお使いなら接続のために次のスクリプトを使えます。私はこの スクリプトのテストをしていません(私はターミナルを使っています)が、質問 があれば Adrian Debkowski(adrian@cr-media.pl) に尋ねてください。
proc main delay 1 waitfor "ogin:" transmit "call^M" waitfor "RING" transmit "ATA^M" waitfor "CONNECT" waitfor "ogin:" transmit "pppuser^M" waitfor "word:" transmit "ppp^M" endproc