(This page is written in Japanese.)

FreeBSDでmgettyとiijpppを使用してPPPサーバを動かす

最終更新: 1998/07/07

はじめに

この資料は、筆者が自宅に引いているOCN エコノミーに接続されているサーバに外線からPPPできるように設定したときの記録です。
現在は、INSネット64でTA ALEX-128/HGとサーバをシリアル接続し、V.110, PPP, PIAFSでの接続を受け付け、PPPによるダイヤルアップもしくはV.110, PIAFSのUNIX loginを受け付けるようになっています。
サーバはFreeBSD 2.2.6で、着信の待ち受けにはmgetty-1.1.11を使用し、サーバ側のPPPにはiijpppを使用しています。

最初に決めておくこと

回線の種類

アナログモデムを使用しての接続を受け付けるか、INSの通信モードでの接続を受け付けるかの選択があります。INSの通信モードでの接続を受け付ける場合、ISDNルータを着信用に使用できるのであれば、接続受け付けはISDNルータがすべてやってくれます。ここではサーバとTAをシリアル接続して接続を受け付ける方法についてのみ解説します。
一般的にはサーバの1つのシリアルポートでアナログモデムとINS通信モードの両方を受けることはできないので、両方を受け付けたい場合にはシリアルポートを2つ使用して別々の設定をすることになります。
最近のTAではPIAFS接続を受け付けるものも多く、たいていの場合はレジスタ設定でPIAFSも受け付けるようにすれば、INS通信モードであるかPIAFSであるかは気にすることなく接続を受け付けることができます。

着信電話番号

回線の種類がアナログ回線なら、着信はモデムが占領することになります。ただし後述するmgettyを使用すれば、1つの電話回線、電話番号、モデム、サーバのシリアルポートでFAXとデータ接続の両方を受け付けることができます。
INSネット64を契約しているのであれば、通信モードによって振り分けることができます。ダイヤルイン契約をしていなくても、アナログモデムでの接続を受け付けないのであれば、通常の電話で使用しているのと同じ電話番号で通信モードでの接続を受け付けることができます。また、通常の電話を使用しないのであれば、アナログモデムとINS通信モードでの接続を同じ電話番号で受け付けることができます。ただし前述の通りサーバのシリアルポートは2つ使用することになります。
さらにダイヤルイン契約をしていれば、INSネット64回線1本で通常の電話とアナログモデムとINS通信モードでの接続を受け付けることができます。通常の電話とアナログモデムは違う番号で受け付けることになりますが、INS通信モードでの接続はどっちの番号で受け付けてもかまいません。

通信方式

外線からの接続を受け付ける場合、PPPを受け付けるかUNIX loginを受け付けるかという選択があります。PPPの場合はWWWなどIPのすべてのサービスが利用できますが、UNIX loginは旧式な非力なマシンでもパソコン通信ソフトを利用しての通信ができるというメリットがあります。mgettyでは1つのシリアル接続でPAP認証によるPPPとUNIX loginの両方を受け付けることができます。

gettyを使用するかmgettyを使用するか

標準ではgettyがポートにlogin:プロンプトを送り、ポートを監視していて、login認証をします。モデムからのloginを受け付ける場合には、モデムを自動着信に設定して、かかってきた電話にモデムが応答してgettyがモデムとの対話を開始します。UNIX loginではなくPAP認証によるPPPを行なうためには、/etc/gettytabにPAP認証のためのエントリを作成し、login(1)に制御を渡すかわりにpppdを起動するスクリプトに制御を渡すことになります。
mgettyはモデムからの着信を受け付けるためにより洗練されたgettyの代替品です。mgettyを使用するときにはモデムは自動応答なしに設定します。mgettyは常時ポートを監視していて、モデムからのRINGに反応して電話をとります。このためサーバが落ちているときは電話をとらなくなります。
さらにmgettyはFAXの着信やPAP認証によるPPP接続も認識するので、1つのシリアルポートでFAXの着信とPAP認証によるPPPとUNIX loginのすべてを受け付けることが可能です。
このドキュメントではmgettyを使用する設定について解説します。
どのシリアルポートで何が待ち受けるかは、/etc/ttysで指定します。portsを使用してmgettyをインストールすると/etc/ttysは自動で編集されますが、設定を変更した場合は/etc/ttysをチェックしてください。変更した/etc/ttysを有効にするためには、rootになってkill -HUP 1とします。

pppdを使用するかiijpppを使用するか

pppdはカーネルPPPとも呼ばれています。
iijpppは多機能で、インタラクティブモードやパケットフィルタリングなどの機能を備えています。旧バージョンのiijppppppdとくらべて、認証にpasswdデータベースが使えないという短所がありましたが、FreeBSD 2.2-961014-SNAPおよびそれ以降のシステムでは認証にpasswdデータベースが使用できるようになり、またWin95/NTクライアントに自動的にDNSアドレスを渡すことができるようになりました。

設定手順

モデム/TAとの接続確認

ここではCOM1を使用するものとします。COM2以降を使用する場合は、cuaa0をcuaa1,cuaa2,...と読みかえてください。rootになって、
cu -lcuaa0 -s115200
と入力します。モデム/TAと正しく接続されていれば、
Connected.
と表示されます。
cu: cuaa0: Line in use
と表示された場合は、他のプロセスがポートを使用しています。ps axと入力してポートを使用しているプロセスがないか確かめてください。よくあるのは、テストに使用した他のcuが生き残っている場合です。
接続できたら、キーボードからAT[Enter]と打ち込むと、
AT
OK
と表示されます。キーボードから打ち込んだ文字(AT)はモデムの設定によって表示されないことがあります。OKが表示されない場合はリザルトコードが表示されない設定になっている可能性があるので、ATQ0[Enter]と入力してリザルトコードを表示する設定にしてください。
それでもうまくいかない場合はマシンとモデム/TAの接続を確認してください。一般的にマシンとモデム/TAはストレートケーブルで接続しますが、
MN128-SOHOのようにクロスケーブルで接続するものもあるので注意が必要です。

モデム/TAの設定

着信を受け付けるには、モデムである場合もTAである場合も
  • 自動着信の有無
  • コマンドエコーの有無
  • リザルトコードの有無
  • リザルトコードの表示形式
を設定する必要があります。gettyを使用する場合には、自動着信は有りにしないといけませんが、mgettyは自分でRINGを検出して、ATAを送出して電話を受けるので、自動着信は無しにしないといけません。多くのモデムはS0レジスタを0にすることにより自動着信を無しに設定できます。
コマンドエコーは有りにしても意味がないので無しにしておきます。多くのモデムではATE0でコマンドエコーを無しにできます。
リザルトコードは必ず返すように設定しないといけません。多くのモデムではATQ0でリザルトコードを有りにできます。
モデムの設定により、リザルトコードは数字と単語の表示形式が選べます。mgettyが単語でリザルトコードを判定しているので、単語形式にします。多くのモデムではATV1でリザルトコードを単語形式にできます。
ATコマンドは一部をのぞいてまとめて記述できるので、以上にあげたコマンドはATS0=0E0Q0V1と記述できます。

TAの場合はさらに、
  • 通信モードごとの着信許可設定
  • ダイヤルイン番号
  • 着信番号チェック設定
を設定する必要があります。V.110, PPP, MP, PIAFSなどの通信モードのうちで、どのモードの着信を許可するかを設定しなければなりません。
ALEX-128/HGVer 3.00以上ではG11レジスタを35にすることにより、V.110, PPP, PIAFSを受け付けるようになります。
INSネット64のダイヤルイン契約をしている場合で、ダイヤルイン番号で接続を受けたい場合には、接続を受け付けるダイヤルイン番号を設定する必要があります。設定の方法はTAにより大きく異なりますが、ALEX-128/HGの場合には、TAにダイヤルイン番号を設定して、契約者回線番号とそのダイヤルイン番号について着信番号チェック設定をするようになっています。
ALEX-128/HG では、C61レジスタにダイヤルイン番号を設定して、C11レジスタで契約者回線番号とダイヤルイン番号のいずれか、または両方の着信を許可することができます。

mgettyは起動時に初期化文字列を送って着信を待ち受けるため、モデム/TAが落ちたときには電源投入時の設定に戻ってしまってサーバと通信できなくなることがあります。それを避けるためcuを使用して設定を保存しておきましょう。特に重要なのは、電源投入時の端末速度です。ALEX-128/HGでの設定例は以下のようになります。
ATS0=0E0Q0V1X1G11=35C11=2C61=3634xxxx
OK
ATG2=4
OK
AT&W
OK

mgettyをインストールする

この記録は筆者がFreeBSD 2.2.6mgetty-1.1.11をインストールしたときのものです。
mgetty/usr/ports/comms/mgetty+sendfaxを利用してインストールします。ただし、portsでインストールするとAutoPPPが無効の状態でコンパイルされるので、PAPを受け付けるためにはMakefileにオプションを追加してやらないといけません。
  • su
  • cd /usr/ports/comms/mgetty+sendfax
  • make configure
  • work/mgetty-1.1.11/Makefileを編集して、CFLAGSがコメントアウトされているところに、
    CFLAGS=-O2 -DAUTO_PPP
    
    という行を追加する。
  • make install
  • makeが完了すると対話型設定に移ります。/etc/ttysも自動的に編集されるので、使用するポートは実際に使用するポートを答えてください。その他の項目はあとでファイルを編集して設定できるので、すべてデフォルトでかまいません。
インストールが完了したら、設定ファイルを編集します。mgetty.configで設定すべき項目は、シリアル速度とモデム/TA初期化文字列です。autobaudingNOにしておきます。
login.configでは、/AutoPPP/を設定します。AutoPPPを有効にすると、クライアントからのPAP接続を検出して、自動的に認証にうつります。
/usr/sbin/pppの引数(pap)は/etc/ppp.confのエントリに対応します。mgettyで複数のシリアルポートを待ち受ける場合は、ttyを見て振り分けるスクリプトを書く必要がありますが、待ち受けるポートが1ポートだけの場合は引数でエントリ指定してかまいません。 以下にはデフォルトから変更する行だけを示してあります。
mgetty.config
port cuaa0
speed 115200
init-chat "" ATS0=0E0Q0V1X1G11=35C11=2C61=3634xxxx OK
autobauding NO
  
login.config
/AutoPPP/ -     a_ppp   /usr/sbin/ppp -direct pap
  

iijpppの設定

FreeBSD 2.2.6のiijpppは、DESをインストールしていないとlibdes.so.3.0がないため起動しないという問題が知られています。このため、DESをインストールしていない場合は/stand/sysinstallからDESをインストールしておきます(Basic DES encryption servicesだけでかまいません)。
iijpppを使うには、カーネルにtunデバイスが組み込まれてないといけません。ifconfig -a
tun0: flags=8050<POINTOPOINT,MULTICAST> mtu 1500
のような行が含まれていれば、tunデバイスが組み込まれています。組み込まれていない場合にはカーネル再構築が必要です。
/etc/ppp.confに必要な項目を設定します。iijpppをPAP認証で接続を受けるだけに使うときの最低限必要な設定を以下に示します。 この設定例はPAP認証、passwdデータベースを使用して認証、クライアントに210.160.94.85を割り当て、Win95/NTからのDNSの問い合わせに対して210.160.94.82203.139.160.74を応答となっています。
/etc/ppp.conf
default:
 deny lqr
pap:
 enable pap
 enable passwdauth
 enable proxy
 enable msext
 set ifaddr 210.160.94.82 210.160.94.85 255.255.255.255
 set ns 210.160.94.82 203.139.160.74
  

pppdの設定

参考にpppdを使う場合の設定も記しておきます。pppdを使う場合には、login.configのAutoPPPの行は以下のようになります。
login.config
/AutoPPP/ -   a_ppp   /usr/sbin/pppd auth -chap +pap login kdebug 7 debug :210.160.94.85 dns1 210.160.94.82 dns2 203.139.160.74
  
pppdを使うには、カーネルにpppデバイスが組み込まれてないといけません。ifconfig -a
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
のような行が含まれていれば、pppデバイスが組み込まれています。組み込まれていない場合にはカーネル再構築が必要です。
pppd/etc/ppp/optionsというファイルがないと起動しません。上記の設定例ではpppdのオプションはすべてコマンドラインに記述したので、単に
touch /etc/ppp/options
とするだけで十分です。

参考資料

FreeBSDハンドブック ユーザ ppp の設定 : ppp の設定
PPP(8)マニュアル
FreeBSDのPAP設定
トップページ