ダイヤルアップアクセスサーバ

概要

getty+iij-pppにてダイヤルアップサーバの構築をします。ダイヤルアップアクセスサーバの仕組みを簡単に説明すると、まず、initから起動されたgettyが、割り当てられシリアルポートがオープンされるのを待ちます。外から、電話がかかり、モデム同士が接続されると、kernelがキャリア信号を検出して、gettyによりポートのオープンが行われ、同時に、PPP認証プログラムが起動します。このPPP認証プログラムは、実際にはシェルプログラム(pppstart)から起動されるもので、別名IIJ-PPP(OSに付属)と言われます。このPPPにて、ppp.confとppp.secret及びppp.denyの設定内容が有効になります。ppp.secretはPPP認証に使用されるパスワードが格納されます。接続の方法として、固定速度と可変速度の接続がありますが、今回は可変速度の接続を試してみます。

設定ファイル

設定が必要なファイルは6つあります。

ttys

/etc/ttysは、既に存在するファイルですので、新たに作成する必要はありません。ただし、必要であれば“ttys.org”としてバックアップを作っておくと良いでしょう。この定義によってシリアルポートが監視されて、接続があると、gettyが起動されます。

ttyd0 "/usr/libexec/getty std.9600" dialup off secure

を以下の様に変更します。

ttyd0 "/usr/libexec/getty ppp.115200" dialup on

ppp.115200はgettytabで定義される初期速度です。

gettytab

可変速度ごとの以下の設定を追加します。最近はほとんどのマシンが、115200の速度に対応していますので、基本的には、ppp.115200の行だけあればよいのですが、一応低速の定義も加えておきます。ppp.115200での接続が失敗すると、nxパラメータで定義されたスピードで再度接続が試みられます。それでもダメなら、次のスピードでというように順番に使用されます。

#
# Dial in PPP entry
#
ppp.4800:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.115200:\
        :np:sp#4800:pp=/etc/ppp/pppstart:
ppp.9600:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.4800:\
        :np:sp#9600:pp=/etc/ppp/pppstart:
ppp.19200:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.9600:\
        :np:sp#19200:pp=/etc/ppp/pppstart:
ppp.38400:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.19200:\
        :np:sp#38400:pp=/etc/ppp/pppstart:
ppp.57600:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.38400:\
        :np:sp#57600:pp=/etc/ppp/pppstart:
ppp.115200:\
        :cb:ce:ck:lc:fd#1000:im=:nx=ppp.57600:\
        :np:sp#115200:pp=/etc/ppp/pppstart:

pppstart

シェルプログラムです。gettytabのppパラメータで定義されているファイルです。OS付属のiij-pppを起動するスクリプトです。

#!/bin/sh
echo "pppstart run"
exec /usr/sbin/ppp -direct ppp

このスクリプトは、実行可能属性を持たせておく必要があります。

ppp.conf

このファイルの設定は、いまいち理解してませんが、一応正常に動作しているので、よしとしましょう。

default:
# set log Phase Chat LCP IPCP CCP tun command
set log Phase Chat IPCP tun command
set speed 115200
deny lqr
set timeout 0
set ifaddr xxx.162.104.90 xxx.162.104.91-xxx.162.104.94
allow users *

#
# dial-in PPP with PAP authentication entry
#

# ------ on ttyd

ppp:
accept dns
set dns xxx.162.104.90 xxx.162.104.82
enable pap
enable proxy

ppp.secret

接続のためのパスワードファイルです。接続のためのユーザ名、パスワード、割り当てのアドレスを定義します。今回は、固定アドレスを割り当てず、接続してきたときに、割り当てのアドレスを決めますので、アドレスの欄は空白にしておきます。

設定例
# Authname Authkey Peer's IP address
wmp58417 peterdog 234.567.890.123
tatsuo CatDog

モデムの設定

モデムは、以下の設定を行います。
・S0レジスタを1以上にして自動着信を設定します。
・DCD(CD)信号相手モデムのキャリアを受信するとオンにします。
・DTR(ER)信号オンからオフに変わると回線を切断します。
・RS/CS(ハードウェア)フロー制御を行います。
aiwaのモデムですと、AT&C1&D2&H1&I0&R2となります。
また、コマンドエコーなし、リザルトコードなしに設定しないと、マシンとモデムの間でコマンドがループしてしまいます。
・ATE0Q1

モデムの設定には、cuコマンドを使います。

>cu -l /dev/cuaa0 -s 115200 <-- sパラメータはなくてもよいです。
conectted
ATS0=2 <-- 自動着信の呼び出し回数を設定します。
AT&C1&D2&H1&I0&R2 <-- aiwaのモデムの場合です。
ATE0Q1 <-- このコマンドを打ち込むと、当然この後はなにも表示はされません。
~. <-- cuコマンドから抜けます。
>

複数ポートでダイヤルアクセスを受ける場合の設定

カーネルの再構築

デバイススペシャルファイルの作成

makedevコマンドでトンネルデバイスを作成します。通常トンネルデバイスは"tun0"しかありません。シリアルポートを2個とも使用するときは、"tun1"を作成する必要があります。
cd /dev
./MAKEDEV tun1
複数のデバイスを作成するときは、tun1に続けてtun2 tun3と記述する。区切りはスペース。

接続に成功しないとき

モデムの接続速度について

モデムは基本的に本体側からの発信によってスピードを決定しています。モデムの電源を入れてすぐには、モデムはマシンとの通信スピードを知りません。ですから、標準の9600bpsでマシンと通信します。当然モデムとモデムの回線スピードもそれ以上は速くなりません。これではちょっといけません。これを回避するには、モデムにマシンとの通信速度を教えてやる必要があります。先ほどの“モデムの設定”の項で使ったcuコマンドで可能です。cuコマンドでsパラメータは必要ないとしましたが、実は最初の一回だけ “-s 115200” を指定してやる必要があります。
(115200に対応していないマシンもありますが、最近のマシンは460800まで可能なものもあります。)

cu -l /dev/cuaa0 -s 115200
at

cuコマンドでモデムと接続した後、atコマンドで一度通信しましょう。この後は、~. でモデムとの通信を終了します。一度、最高速度をモデムに教えてやれば、記憶されます。ただし、モデムの電源を切ったら、記憶されているスピードは消えてしまいます。また、このように普通のモデムは最高通信速度をマシンからのスピードによって設定されますが、中にはこのような方式で無いモデムもあります。

ログを見よう

/var/logにppp.logというファイルがあります。エラーが発生したときの内容等がここに残されます。ログが全くでていない場合は、pppが起動されていません。

ダイヤルアップサーバ構築奮闘記

モデム同士がおしゃべりしない!

モデムをシリアルポートに2台接続。回線はTAのアナログポートに接続。また、TAはISDN回線に接続。各種設定ファイルも準備OK!。さて、WIN98マシンからダイヤルアップしてみよう。「ツー、ピロピロピ、ピー、ガーガーガー」で、ずーと「ガーガーガー」が続く。なんで?。普通ならここで、「ガーガーガー、バリバリガーバリバリ」となってユーザー認証となるはずなのに。なんだなんだ、どういうことだこれは?もしかして、モデム同士がおしゃべりしていないのでは?でも、きちんと自動着信されているので、モデム同士はおしゃべりしているかも。

トンネルデバイスを作り忘れてた!

ちょっと、角度を変えて考えてみる。んっ?デバイス tun1 がない!作り忘れてた。でも、今は試験的につないでみてるだけなので、tun0 だけあればいいはずなのに、どういう事だろう。(結構悩んだ。無情にも時間は過ぎる)
もしかして、ポート0ではなくてポート1に着信しているのでは...
試しに tun1 を作ってみたら症状が変わった。先ほどまでのずーと「ガーガーガー」ではなく、「ガーピー、ピープーピープー」と延々と「ピープー」が続く。やっぱり tun1 が必要だった。それにしてもモデム同士は、以外と簡単におしゃべりするもんだ。でも、他にどこがおかしいのだろう。
/var/log/ppp.logには、なにも出ていない。まだ、pppが起動されていないのだろう。さあ困ったぞ。

pppstartに実行可能属性がない!

なんと、pppstartに実行可能属性をつけるのを忘れていました。だから、モデムが電話を受け取って、gettyがpppstartを起動しようとしていたのに、実行可能属性を付け忘れていたので、先ほどの「ピープー」が延々と続いたのでしょう。
>chmod ugo+x pppstart
とすると、一発OK!つながった。/var/log/ppp.logを見るといろいろとメッセージがでている。うふふっ。

モデムを変えたらつながらなくなった!

えっ!どういうこと?さっきまでaiwaのモデムでつながっていたのに、デジタルモデムに変更したらつながらなくなった。なんでだ?ppp.logにも何にもでていない。モデムは着信するのに

[サーバーの種類]で指定された互換性のあるネットワークプロトコルを処理できませんでした。
コントロールパネルでネットワーク設定を調べてから、接続し直してみてください。

なんていうエラーがでて回線が切られてしまう。試しにもとのaiwaのモデムを再度接続してみたらきちんとユーザ認証まで進んで確実につながる。なんでデジタルモデムはつながらないのだろう?