おうちで NetBSD といっても、特別なことはほとんどありません。
単に大学だと LAN 環境にいるけれども、家に帰ると電話回線でしか
よその計算機とお話しできないって事だけです。そこで、
ここでは NetBSD 附属の pppd
を用いて
ppp 接続するための方法についてまとめます。
技術評論社 Linux x BSD Hyper Pressに 書いた記事を元に書き直しました。古いバージョンも あります。
NOTE:福井医科大学内のユーザで防火壁内部から 見ている場合はてらに 大学に特化した物があります。そちらもあわせて御覧下さい。
まずはともあれ、自分のカーネルが、ppp をサポートしているか確認しましょう。
[tamp]~% /sbin/ifconfig -a ... ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 ppp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 ...
と出てくればサポートしています。(一つあれば十分です。)
出てこないばあいは
カーネルの configuration file に
pseudo-device ppp 2 # PPP
という行を付け加えて(別に 0 でなければいくつでもかまいません)
カーネルを作り直しリブートをかけます。
次は modem の設定確認です。モデムの繋がっているデバイス名を 確認します。
% /sbin/dmesg | grep ^com com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo com2 at pcmcia1 function 1 port 0x420-0x427: serial device com2: ns16550a, working fifo
私の場合 pcmcia card を用いていますから com2
がモデムです。
ここで、com
を tty
に変えたものがモデムの
デバイス名になります。そこで、次のように入力します。
[tamp]/root# cu --line=/dev/tty02 connected at ok
ここまでくれば、modem ときちんとお話しできる環境になっています。 Modem のマニュアルを片手に必要なセットアップを行ってください。 以下では「57600baud, parity none, hardware flow control を用いて、 応答コードは文字列」という設定を仮定します。具体的な方法は モデムの種類によるのでマニュアルを片手に行ってください。
modem と話をするのを止めるのには "~."
を入力します。
必要な時に自分で pppd
を立ち上げてネットワーク設定を行う
方法です。自動接続と違って一々しないといけない面倒くささはありますが、
思いもかけないときに勝手に電話されないので、まずこちらでつなぐことにしましょう。
次の様なファイルを作成します。基本的には pppd(8) に書いてあることと
同じですから、よくわからないときには参照してください。
/etc/ppp/options
/etc/ppp/options.tty02
57600 crtscts modem lock
/etc/ppp/peers/mygate
tty02 noipdefault defaultroute idle 60 noauth ipparam mygate user ogaito connect '/usr/sbin/chat -v -f /etc/ppp/chats/chap -T 123456' #connect '/usr/sbin/chat -v -f /etc/ppp/chats/login.mygate -T 123456'connect 行は ppp の認証方式により選んでください。CHAP または PAP の場合は 上の行を、Unix login 形式の場合は下の行を有効にします。また、 user の行の引数には ppp のアカウントを書きます。これは pppd を 起動する local user 名が同じならば省略することが出来ます。また、 ppp の認証が unix login の形式の場合には、chat script の 中に記述する必要があります。
-T
の後ろの番号は
アクセスポイントの電話番号です。
/etc/ppp/chats/chap
このファイルは CHAP または PAP 認証を行う ppp serverにつながった際に ppp でつなげるために行う手続きを記述します。
ABORT "NO CARRIER" ABORT "ERROR" ABORT "NO DIALTONE" ABORT "NO DIAL TONE" ABORT "BUSY" ABORT "NO ANSWER" TIMEOUT 3 "" "at" "OK-\Kat-OK" "atdp\T" TIMEOUT 45 CONNECT ""
atdp
とパルス指定されています。
トーンの場合は atdt
とすればいいはずです。
\T
は chat の起動オプション -T で指定された番号が
入ります。
OK-\Kat-OK
の行は TIMEOUT(秒) だけ待っても
応答がなければ、Break 信号と at
を送り OK
を
待つという意味になります。
/etc/ppp/chats/login
認証が Unix login の形式の場合、上記の/etc/ppp/chats/chapを 少し変更します。
ABORT "NO CARRIER" ABORT "ERROR" ABORT "NO DIALTONE" ABORT "NO DIAL TONE" ABORT "BUSY" ABORT "NO ANSWER" TIMEOUT 3 "" "at" "OK-\Kat-OK" "atdp\T" TIMEOUT 45 CONNECT "\r\n" "ogin:" "my_ppp_account" "assword:" "\qmy_ppp_passwd"変更されたのは
CONNECT
行より後ろの部分です。
CONNECT
が来たら login prompt が出るように \r\n
を送る。
ogin:
が来たらユーザー名(my_ppp_account)を送る。
assword
が来たらパスワード(my_ppp_passwd) を送る。先頭の\q
は
log file に文字列を記録しないように chat に指示するためのキーワードです。
/etc/ppp/chap-secrets
, /etc/ppp/pap-secrets
my_ppp_account myserver mypasswordの様に自分のアカウント名, server 名、 パスワードを書きます。 server 名がわからなくて、一つの ppp server しかない場合は
*
でも
かまいません。
さて以上のファイルを準備できれば、
[tamp]~% /usr/sbin/pppd call mygate
と入力すれば電話をかけはじめつながります。つながってしまえば、
[tamp]~% telnet <IP_Address>
とすれば外部の計算機につながるでしょう。もちろん、
/etc/resolv.conf
をきちんと設定しておけば名前でもつながります。
複数のプロバイダと契約している場合には同様にして peers の
ディレクトリの下に設定ファイルを作ります。認証方式が Unix Login の場合には
chats/login の中身も変更したものを作ることを忘れないでくださいね。
あと、/etc/ppp/ip-up
とか /etc/ppp/ip-down
とかに
つながった時と切れた時に行うコマンドを書くことが出来ますが、必須ではありません。
一応例題を。
#!/bin/sh # /etc/ppp/ip-up /bin/echo `/bin/date` PPP: IP up: $1 on $2 at ${3}b/s from $4 to $5 > /dev/console
#!/bin/sh # /etc/ppp/ip-down /bin/echo `/bin/date` PPP: IP down: $1 on $2 at ${3}b/s from $4 to $5 > /dev/console
このようにしておくと PPP の状態が変化したときに console に通知されます。
これらのコマンドはスーパーユーザ権限で起動されるので security には十分
注意する必要があります。また、すべての入出力は /dev/null
に
つながれていることにも注意しましょう。
必要な時にだけ電話を勝手にかけるようにするためには上にあげたファイルの内、 次のファイルだけをほんの少し変更する必要があります。
/etc/ppp/peers/mygate
# mygate dial on demand version tty02 noipdefault defaultroute idle 60 noauth ipparam mygate user ogaito demand :<ip_of_pppserver> ipcp-accept-local ipcp-accept-remote connect '/usr/sbin/chat -v -f /etc/ppp/chats/chap -T 123456' #connect '/usr/sbin/chat -v -f /etc/ppp/chats/login.mygate -T 123456'
マニュアルによれば remote 側の IP address が指定されていないばあいには
dial on demand は出来ないようにみえます。しかしながら
ipcp-accept-remote option をつけていると相手が自分の IP を
言ってきたときに動的に変わるのでわからないときは適当に設定してしまえばいいです。
嘘の gateway を指定していても接続後の routing table は書き直されます。
違っていた場合は syslogd にdaemon.warning
で通知されますから、
log file を見れば正しい remote IP がわかります。あるいは接続中に
netstat -rn の出力を見てもわかります。
ちなみに、"<" と ">" は必要ありません。
直接 IP address を書きます。
変更したら pppd
を立ち上げます。
[tamp]~% pppd call mygate
起動しても電話かかりませんよね? ではおもむろに
[tamp]~% telnet xxxxxxxx
と打ってみましょう。電話がかかりはじめつながることでしょう。
この時注意するべきことは、一般の dialup 接続、つまり固定アドレスを
持っていない場合、ppp 接続の結果、起動前と接続後の ppp0 に振られていた
アドレスは異なります。したがって、pppd を起動するきっかけとなった
パケットは戻ってくることがありません。そのため、いきなり IP アドレスを
指定して telnet
などのコマンドを実行するとそのコマンドは
接続に失敗します。これを避けるためには pppd の書き直しをする必要が
ある気がするのですが、私はめんどくさいのできっかけには ping
を
使うか、/etc/hosts に書かれていない hostname を指定してコマンドを
実行するようにしています。hostname が /etc/hosts で解決できない場合に
用いられる resolver は timeout を起こした場合、retry を
してくれるので、ユーザーにとって問題が起きていないように見せることが出来ます。
この Dial on Demand 設定を使うと思いがけないときに勝手に
電話をかけはじめるので cron
などで起動されている
scripts をチェックしておかないと、電話代が恐しいことになるかも
知れません。:-)
手動接続の最後で紹介した
/etc/ppp/ip-up
や /etc/ppp/ip-down
を
使うと、接続時に様々な設定を行わせることが出来ます。これらのスクリプトは
引数として、interface名、デバイス、スピード、local IP アドレス、
remote IP アドレスを与えられます。 ipparam
が指定されている場合
その内容が最後の引数に加えられます。また、pppd の設定ファイルに
usepeerdns
を加えるとこれらの script の中から、DNS1, DNS2 という環境変数を 通して、server から通知された DNS の IP アドレスを利用することが出来ます。
また、これらの script はスーパーユーザー権限で実行されるので、 時刻あわせもできますし、mail queue にたまった mail を送り出すことも 出来ます。今私が使っている ip-up と ip-downを参考のために載せておきましょう。
#! /bin/sh RES_CONF=/etc/resolv.conf # Setup resolv.conf if [ -r ${RES_CONF} ]; then /bin/rm -f ${RES_CONF}.bak /bin/mv -f ${RES_CONF} ${RES_CONF}.bak fi /bin/rm -f ${RES_CONF} cat > ${RES_CONF} <<EOF nameserver ${DNS1:-202.19.136.108} nameserver ${DNS2:-202.19.136.108} search fukui-med.ac.jp EOF /bin/chmod 644 ${RES_CONF} /etc/rc.d/sendmail restart /usr/sbin/ntpdate 202.19.136.108 exit 0
#! /bin/sh RES_CONF=/etc/resolv.conf # Reset resolv.conf rm -f ${RES_CONF} if [ -r ${RES_CONF}.bak ]; then /bin/mv -f ${RES_CONF}.bak ${RES_CONF} fi /etc/rc.d/sendmail restart /sbin/ifconfig $1 delete $4 /sbin/ifconfig $1 inet 0.0.0.0 exit 0
Return to Comfortable Life With NetBSD