1997/12/12: BSD/OS 3.0でpppコールバックしよう!
$Id: index.html,v 1.19 1998/01/25 08:44:14 itojun Exp $
What the page is about?
- Perform ppp connection to Yamaha RT80i (a router sold in Japan)
by using Notebook PC with bsdi BSD/OS+cell phone+modem card.
- By modifying /usr/bin/ppp, perform callback ppp connection.
Patch to ppp source code is here.
You should add :cbcp: to the entry on /etc/ppp.sys,
and configure /etc/ppp.sys for both outbound ppp connection
and inbound connection.
The following part is in Japanese, but I believe you can get some configuration
examples.
なんのページ?
- bsdi BSD/OSなノート+PHS+PIAFSカード <-> RT80iでpppする。
- さらに、/usr/bin/pppを改造してcallbackする。
pppの設定
callbackは、
- bsdi -> RT80iの方向にpppセッションを張りに行く。
認証ができたあと、callback要求をして回線を切る。
- RT80i -> bsdiの方向にpppセッションを張りにいく。
つながっておめでとう。
という手順で動作する。
このとき両方の呼は別の/usr/bin/pppで取り扱われることに注意。
ということで、まずは、普通のpppを両方向完璧に
設定する必要がある。
callbackに興味がないひとはここだけ読んでも参考になるかもしれないので、
先にppp設定のはなしをしよう。
1. 勉強する
bsdi BSD/OS 3.0のgettyまわりは普通じゃないので、
まずはUNIX magazine97年12月号をもってきて勉強しよう。
2. PIAFSカードのための設定
wildboarは当然きちんと動作しているよね?
まだだったらちゃんと設定する。
そしたら、PIAFSカードのために/etc/ttys.conf.localを書く。
このへんはtipでいちいち確認しながら書けばよい。
NTTパーソナル/パナソニックのDC-1Pの場合こんなかんじ。
ただし、あまり自信がないがとりあえず動く、という程度の設定である。
おとしあなの説明をしておこう:
- 発番号なんて通知したくないもんねというひとはAT#SB1のところを
AT#SB0にすればよい。
PHS電話機側の発番号通知の設定より、DC-1Pの設定の方が強いので、
ことPIAFSでの接続については、PHS電話機の設定は無視される。
(97/12/16に設定更新しました。AT#SB1はhinitに
いれておいても効果ないです。なんでじゃあ)
- DC-1PはSレジスタ2(escape character)が腐っていて、
127よりでかい値を代入することができない
(かといってマイナスの数もだめよ)。
たとえばに255をつっこもうとして
ATS2=255とかするとエラーになる。
まさかパリティビット無視するのかな?
よって、escape characterの変更は省いている。
まあ、プラスみっつでも普通は平気だろう。
# NTTPersonal/Panasonic DC-1P
PIAFS:\
:modemtype=NNTP PIAFS:\
:hcondition=ATE0S0=1:\
:hdial=AT#SB1DT$1:\
:hhangup=ATH:\
:hinit=ATZ0\\\W1#M=0&Q6&K3&D3&C1U0S0=0:\
:hquiet=ATQ1:\
:hreset=AT&F:\
:tc=Generic336:
3-a. pppのための設定(bsdi側)
つぎ。
/etc/ppp.sysの設定をする。
この例題では、/dev/tty02をpppに使う。
それから、認証は受身(RT80iがbsdi箱に「おまえのユーザ名とパスワードは
なんじゃい」と聞いてくる)の設定になっている。
bsdi箱はRT80i側に向かって「おまえのユーザ名とパスワードはなんじゃい」
とは聞きにいっていない。
ほんとは双方向に認証したかったのだが、結局成功しなかったのでやめてしまった。
:pap:と書いてbsdi箱からの問い合わせをonにすると、
RT80i側のPAPの状態遷移図で期待していない
タイミングでbsdi側からpap要求が出て、RT80i側がいやんと言うように
見えたのだが、勘違いだろうか。もうすこし検証必要
(あとでログ貼っときます > hirose)。
ただ、この設定だと/etc/passwdはいじくらなくていいので、
そこは美味しいかもしれない。
まあ、いつもPHSを繋いでいるわけじゃないし、noteだから移動するし、
というわけで双方向認証にはそんなにこだわらないくていいだろう。
# bsdi -> RT80i
Ppap:\
:immediate:\
:idle-timeout=0:\
:phone-number=0312345678:\
:pap-peerid=itojun:\
:pap-passwd=naisho:\
:speed=115200:\
:device=/dev/tty02:\
:tc=Dialout:
# RT80i -> bsdi
ppp_direct:\
:dialin:\
:pap-peerid=itojun:\
:pap-passwd=naisho:\
:debug-all:
:auth-retries=3:\
:echo-freq=60:\
3-b. pppのための設定(RT80i側)
RT80i側の設定もしよう。
- RT80i側のISDN回線のでんわばんごう: 0312345678
- PHSのでんわばんごう: 0609999999
- 自分ちのsubnet: 10.1.1.96/28
- RT80iのip address: 10.1.1.109/28
- pppの相手に渡すip address: 10.1.1.108と10.1.1.107
余計な設定もいろいろ書いてあるが、まあとりあえず動く。
mscbcpと書いてあるところはcallback関係の設定だけど、
どうせそのまんまのbsdi箱はcallbackができないので、
問題なーし。
isdn local address 0312345678
ip lan address 10.1.1.109/28
ip lan broadcast 3
ip lan route add net default 10.1.1.110 1
ip lan proxyarp on
pp select anonymous
isdn auto connect off
isdn callback permit on
isdn callback permit type mscbcp
isdn disconnect time 600
isdn disconnect input time 600
isdn disconnect output time 600
ip pp local address 10.1.1.109
ip pp netmask 32
ip pp remote address pool 10.1.1.108 10.1.1.107
ip pp hide static route on
ip pp secure filter out 20 21 22 23 24 25 10
pp auth request chap-pap
pp auth accept pap chap
pp auth username itojun naisho 0609999999 mscbcp <- PHSのでんわ番号
ppp ipcp vjc on
ppp ipcp ipaddress on
ppp ipcp msext on
pp enable anonymous
4. 仕上げに
最後に/etc/ttysの設定をする。
ppp-onlyは、tty02にはlogin:プロンプトださずにいきなり
pppにご挨拶させろ、という設定である。
これをやらないとRT80iと仲良くできなかった。
モデム設定の問題だと思うのだが、この状態でtipするとcarrier lostと言って
遊ばせてくれない。
まあ、そのうち直そう。
tty02 com PIAFS ppp-only bidir
5. テストの前に
以下を忘れないこと。
- PIAFSカードをbsdi箱につっこんだら、忘れずにgettystat -raすること。
/etc/card.confを直しておくのもよい。
- /etc/ttysを変えたらkill -HUP 1すること。
6-a. テストその1: bsdi -> RT80i
/usr/bin/ppp -X debug-all Ppapとかやるとダイヤルするはずである。
/usr/bin/pppのdebug出力(標準エラー出力)と、
RT80iのログ(show logで見える)をよーく睨んで直しましょう。
6-b. テストその2: RT80i -> bsdi
connect 1とかやるとダイヤルするはずである。
/usr/bin/pppのdebug出力(/var/log/ppp.debug)と、RT80iのログ(show logで見える)をよーく睨んで
直しましょう。
ちなみに、RT80i -> bsdiの呼び出しのときには、
こんなエラーメッセージが何度かでます。
どちらも人間さま用メッセージが邪魔なのだと思うのだけれど。
Dec 12 10:22:42 dialup Async to Sync: CRC unmatch
Dec 12 10:22:42 dialup PP[ANONYMOUS01] Non LCP packet in not LCP OPENED state
7. 実運用のための調整
適宜、ppp接続が完了したときの経路の設定をどうするべとか、
そういう細かなことを直しましょう。
callbackの場合、bsdi箱からみるとdialinなのに、経路設定などの面からみると
dialout(dialup)なので、そのへんは適宜対処するべし。
8. 完璧
両方向完璧になりましたね?
よかったよかった。
まずはお茶でものんでひとやすみしてください。
callbackに興味のないひとはここまででおしまい。
これできみも街角netsurfer!(おいおい)
callbackのための改造
さて、bsdi BSD/OS 3.0の/usr/bin/pppはcallbackのためのプロトコル、
ms-cbcp(microsoft callback control protocol)を喋ることができない。
ms-cbcpの「まともな」仕様書はこの世のどこにもないと言っていいだろう。
というわけで、他の実装と繋いで動かしながら様子を見るしかできないのだ。
まずはこのパッチをあてる: ppp.diff
(97/12/12 18:00にパッチ更新しました。ppp.sys.5も直した)
注意。
このパッチは、ms-cbcpの「callbackされる側」の動作しか実装していない。
「callbackする側」、すなわちbsdi箱のモデムサーバみたいなのには
使えないぞ
(改造したら送ってくれ)。
で、makeしてmake install、/usr/bin/pppを入れ換える
(上書きされたくなければちゃんとコピーを残しておきましょう)。
/etc/ppp.sysの呼び側の設定に、:cbcp:を加える。
# bsdi -> RT80i
Ppap:\
:immediate:\
:idle-timeout=0:\
:phone-number=0312345678:\
:pap-peerid=itojun:\
:pap-passwd=naisho:\
:speed=115200:\
:device=/dev/tty02:\
:cbcp:\
:tc=Dialout:
これで/usr/bin/ppp -X debug-all Ppapとかやると、
おもむろにppp接続にいって、認証が終ったとたんに回線が切れるはずだ。
で、5秒くらいするとRT80iくんからでんわがかかってきて、
回線が繋ぎ直されるはずである。
これできみも街角call-backer!(おいおい)
good luck!
PHSの電話料金に関する考察
なぜcallbackしたいのか?
それは、PHS(NTT personal)の電話料金体系からみて、
- プラン198で加入して
- 短い呼のときはそのまま通話して
- 長い呼のときは一般加入電話からコールバックする
のが結構得であり、
月にどんだけ使うかわかんない場合にはよい方策だからだ。
以下の考察では、1998年2月以降の課金体系で計算しているので、
とりあえずそこんとこよろしく。
1998年2月以前の料金体系でも多分これが得だけど。
まず、PHSの電話料金プラン(月額料金)は以下のようになっている:
- プラン270:
月額固定料金2700円
- プラン270+32Kデータ通信プランF5:
月額固定料金4600円(= 2700+1900)
- プラン198:
月額固定料金1980円
でもって、実際の呼ごとの課金は以下のとおりである。
- プラン270:
- 通常通話(PHS->地上網): 10円/呼+10円/分
- 通常通話(地上網->PHS): 10円/呼+10円/分
- 32Kデータ通信(PHS->ISDN): 10円/分
- 32Kデータ通信(ISDN->PHS): 10円/呼+10円/分
- プラン270+32Kデータ通信プランF5:
- 通常通話(PHS->地上網): 10円/呼+10円/分
- 通常通話(地上網->PHS): 10円/呼+10円/分
- 32Kデータ通信(PHS->ISDN): 10円/分 (300分/月までは無料)
- 32Kデータ通信(ISDN->PHS): 10円/呼+10円/分
- プラン198:
- 通常通話(PHS->地上網): 15円/呼+15円/分
- 通常通話(地上網->PHS): 10円/呼+10円/分
- 32Kデータ通信(PHS->ISDN): 15円/分
- 32Kデータ通信(ISDN->PHS): 10円/呼+10円/分
地上網(ISDN/アナログ問わず)は、必ず課金単位が10円、というのがミソ。
さて、ここで以下のシナリオを考える。
- Aさん: プラン270で契約してPHS->ISDNで通信する
- Bさん: プラン270+32Kデータ通信プランF5で契約して、PHS->ISDNで通信する
- Cさん: プラン198で契約して、PHS->ISDNで通信する
- Dさん: プラン198で契約して、ISDN->PHSにコールバックする
「A/Bさんのコールバック版」がないのは、「A/Bさん」よりも
高くて意味がないからだ(もちろん、課金を地上網側に追いやるだけ
---たとえば、地上網の電話代は会社もちとか---なら意味がある)。
まず、月額基本料のことを忘れて、1通話あたりのコストを計算する。
- Aさん: 10円/分
- Bさん: 10円/分(300分/月までは無料)
- Cさん: 15円/分
- Dさん: 40円/呼+10円/分(コールバック要求分30円/呼)
呼あたりの料金を考えたら、AさんとBさんが安い。
CさんとDさんは勝負にならない。
CさんとDさんの呼ごとの金額のグラフを描いてみると、
CさんとDさんのどっちが得になるかの分岐点は、「8分」だ。
つぎに、月額基本料のことも考えて、月あたりのコストを計算する。
- Aさん: 2700+通話時間×10
- Bさん: (通話時間 < 300) ? 4600 : 4600 + (通話時間 - 300)×10
- Cさん: 1980+通話時間×15
- Dさん: 1980+通話時間×10+呼の数×40
PHSの料金計算で嫌らしいのは、「月あたりの呼の数」を考えないと
料金計算ができないことである。
とりあえずDさんを除いて考えると、
- 144分/月までだったら、得な順にCさん/Aさん/Bさん
- 144分/月から190分/月の間は、得な順にAさん/Cさん/Bさん
- 190分/月より上なら、Bさんがいちばん得
ということがわかる。
Dさんが月に1回しか通話しなかった場合、15回通話した場合、
30回通話した場合のグラフを描いてみる。
呼の数が少ない(= 1回あたりの通話時間が長い)場合にはDさんが
一番得であることがわかるだろう。
ここで重要なのは、「CさんとDさんは契約を変えずにどっちにでも移れる」
ということである。
ようは、コールバック設定つかえばDさんに、コールバックしない設定を
使えばCさんになれる。
また、「一度も通話がなかった場合」の料金は、当然C/Dさんが安い。
Bさんはなにも使わないのに4600円もとられてシャレにならない。
というわけで、月150分程度しか使わないのであれば、
- プラン198で加入して
- 短い呼のときはそのまま通話して
- 長い呼のときは一般加入電話からコールバックする
のがおトク、というおはなしでした。
御協力
- vaioの鬼yuoさま
- RT80iの鬼hiroseさま
itojun
hack
ESD
Saturday meeting
Wednesday meeting
Yobichosa
bookshelf
comics
1995:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
1996:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
1997:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
1998:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
1999:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2000:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2001:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2002:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2003:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2004:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2005:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2006:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
2007:
Jan Feb Mar
Apr May Jun
Jul Aug Sep
Oct Nov Dec
diary update scanner
1
2
3
4
places I frequently visit:
Altavista
PCWatch
comics
LPF
bookmarks
Free Mr.Kaneko! /
[六ヶ所村問題]
[software patent]
[共謀法反対]
Unauthorized reproduction is strictly prohibited unless specially noted.
If you have problem reading the text (KSC5601 with ctext/iso-2022-jp-2
encoding) use
w3m-m17n or mozilla.