FreeBSD QandA ジャンル別一覧: PPP
[管理番号 45] (最終更新 2001/03/07 02:08:45)
Q. 家から PPP でインターネットに接続しているとお金かかるのですが、必要
なとき (データが流れるとき) だけ自動的に PPP 接続するように出来ませんか?
A. ppp(8) の -auto モードや -ddial モードを使えばできます。詳しくは、日本
語マニュアルの (もちろん英語でも構いませんが)、`DIAL ON DEMAND' を読ん
でください。具体的な設定が、/usr/share/examples/ppp/ppp.conf.sample の
pmdemand や PAPorCHAPpmdemand セクションにあるので参考にしてください。
[管理番号 211] (最終更新 2001/01/08 04:31:13)
Q. ppp (iij-ppp) への nat-xxxx.patch のあて方と、インストールのしかたを
教えてください。
A. FreeBSD 3.3R 以降の ppp(8) には、既に NAT 機能が含まれています。また、
いまだに FreeBSD の ppp(8) の事を iij-ppp と呼ぶ人がいますが、現在では
大幅に書き換えられたため元の iij-ppp とはかなり異ります。それ以前の
RELEASE の FreeBSD を使っているのならば、可能ならシステムのアップグレー
ドをお薦めします。もし、どうしても古いシステムのまま、ppp だけを NAT
に対応させる事も不可能ではありませんが、恐らく茨の道を覚悟しておいてく
ださい。
1. まず使用中の FreeBSD のソース (usr.sbin) を CD-ROM などから
インストールして下さい。
# mount /cdrom
# cd /cdrom/x.x-RELEASE/src
# sh install.sh susbin
2. 次に佐藤さんのホームページから nat-******.patch を入手します。
****** には、nat patch のバージョン (日付け) が入ります。目的の
FreeBSD 用のものをダウンロードしてください。
<URL:http://configure.sh/FreeBSD/NAT/nat.html>
改行コードの問題などがあるのでダウンロードには気をつけてください。
FreeBSD の Netscape からだと右クリックして Save Link as でダウンロード。
Windows95 のブラウザだと名前を保存して、FreeBSD に移す際に Ascii
Text) モードで転送する事。
3. 無事にダウンロードできたらパッチを当てます。
# cd /usr/src/usr.sbin
# patch -p < /tmp/nat-******.patch
4. 新しい ppp をコンパイルしてインストールします。
# cd /usr/src/usr.sbin/ppp # /usr/src/usr.sbin/ppp に移動
# make # コンパイルします。
# make install # インストールします。
これで完成です。ppp は、オリジナルを上書きする形で、/usr/sbin に
インストールされます。
[管理番号 213] (最終更新 2001/03/07 02:08:44)
Q. ppp(8) の自動モード (-auto や -ddial) を終了させるには、どうすればいい
のでしょうか?
A. /etc/ppp/ppp.conf の該当セクションに、
set server /var/tmp/internet "" 0177
という行を追加しておいて、コマンドラインから
% pppctl /var/tmp/internet 'close; quit all'
とします。そのほか応用の仕方が pppctl(8) に載っています。
複数の tun(4) デバイスを同時に使う場合、FreeBSD 2.2.8-RELEASE 以降で
あれば `set server' で指定したパスに %d を含めると、それが tun デバイスの
ユニット番号に置換されます。即ち、
set server /var/tmp/loop%d "" 0177
このとき tun2 を使っているとして、
% pppctl /var/tmp/loop2 'close; quit all'
となります。ただし FreeBSD 2.2.5-RELEASE 以前では、
o telnet で localhost の "3000 + tunデバイス番号" に接続して、
o pass "ppp.secret で設定したパスワード"
o quit all とすると終了します。
tun0 を使用している場合は具体的には以下のようになります。
% telnet localhost 3000
% ppp on hogehoge> pass XXXXXX
% ppp ON hogehoge> quit all
この方法では Internet 側からのアクセスも可能である点に注意してください。
アクセス制限については [管理番号 678] も参照してください。
[管理番号 214] (最終更新 2003/11/17 02:28:48)
Q. 起動時に自動的に ppp の自動モードにできないでしょうか?
A. 1. FreeBSD 3.3R 以降では rc.conf(5) へ次のような設定を行います。ここで
providername には ppp.conf にあなたが設定したエントリ名を書きます。
ppp_enable="YES"
ppp_profile="providername"
[/etc/defaults/rc.conf での関連項目]
ppp_enable="NO" # YES に設定すれば ppp を起動する (or NO).
ppp_mode="auto" # ppp の動作モードを選択します. "auto", "ddial",
# "direct", "dedicated" のいづれか. 詳しくは
# ppp(8) の man ページを見てください.
# デフォルトでは auto です.
ppp_nat="YES" # YES なら ppp で NAT を有効にする (or NO).
ppp_profile="papchap" # /etc/ppp/ppp.conf でのエントリ名を指定する.
ppp_user="root" # ppp を動作されるユーザ名.
2. /etc/rc.local か /usr/local/etc/rc.d/ppp.sh に次のように付け加えて、
再起動させてください。
#!/bin/sh ← /usr/local/etc/rc.d/ppp.sh のときのみ
if [ -f /etc/ppp/ppp.conf ] ; then
/usr/sbin/ppp -quiet -auto providername && echo -n ' PPP start'
fi
[管理番号 216] (最終更新 2001/03/07 02:08:45)
Q. ppp(8) で接続中に突然回線が切れるのはどうして?
A. "** 1 Too many ECHO packets are lost. **" という記述が /var/log/ppp.log
に表示されている場合は、
disable lqr
deny lqr
という二行の記述を /etc/ppp/ppp.conf の default セクションか、接続用の
セクションにいれると解決する場合があります。
[管理番号 343] (最終更新 2001/03/07 02:08:45)
Q. ppp(8) を利用して手動で PPP 接続を行ったところ、 プロンプトが小文字の
ppp から大文字の PPP に変わって接続は出来ているようなのですが、ping
コマンドを実行しても応答が返って来ないのですが?
A. PPP での接続自体は正常に行われているのですが、 デフォルト経路
(default route) が設定されていないため、パケットが相手に届いていないよ
うです。具体的には、プロンプトに対して以下のコマンドを入力します。
add default HISADDR
既にデフォルト経路が存在する場合は、
add! default HISADDR
とすれば上書きできます。ここで HISADDR が PPP サーバの IP アドレスに置
き換わります。最近の ppp(8) のバージョンでは、これらの一行を
/etc/ppp/ppp.conf の該当セクションに追加することで、接続後に自動的にデ
フォルト経路を書き換えてくれます。
FreeBSD 2.2.7R 以前では、上記の代わりに以下のコマンドを使用します。
delete ALL
add 0 0 HISADDR
この設定は、/etc/ppp/ppp.linkup ファイルに記述しておけば、接続後自動的
に設定できます。
[管理番号 344] (最終更新 2001/02/27 00:36:43)
Q. ppp(8) を利用して PPP 接続を行ったところ、 接続は出来て ping も通る
のですが、 telnet hostname とすると 'unknown host' というエラーが返っ
てきて、接続出来ないのですが?
A. ホスト名から IP アドレスが取得できないようです。/etc/ppp/ppp.conf の
該当セクションに、
enable dns
の一行を加えてください。これにより、ISP の DNS サーバを自動的に参照す
るように、/etc/resolv.conf が設定されます。ただし、最近では少ないと思
いますが、ISP の PPP サーバがこれらの情報を返してくれない場合、こちら
の設定で対処するしかありません。これについては後述します。
もし、ローカルで DNS サーバが動作していて、PPP に接続していないときは
ローカルの DNS サーバを参照する必要があれば、/etc/ppp/ppp.linkdown の
該当セクションに、
resolv restore
を追加します。もし設定ファイル自体がなければ作成してください。
/usr/share/examples/ppp/ 以下にインストールされたサンプルが参考になる
でしょう。
上記の方法が使えない場合、または FreeBSD 2.2.7-RELEASE 以前では、少々
原始的な方法を取らざるを得ません。/etc/resolv.conf に、
nameserver 192.168.1.2 192.168.2.3
などのように DNS サーバの IP アドレスを並べます。最大 3 つまで書けます
が、もし一番目のサーバが問い合わせに答えなければ、順にあとの DNS サー
バへの問い合わせを行います。接続先が ISP なら、契約時に DNS サーバの
IP アドレスを教えてもらったはずなので、その IP アドレスを書けばよいで
す。それ以外の環境ではそのサイトの管理者に問い合わせてください。詳しい
書式は man ページの resolv.conf(5) を参照してください。
FreeBSD でホスト名の解決を行うには、/etc/hosts データベース、DNS といっ
た順でホスト名から IP アドレスを検索します (2.2.7-RELEASE 以前は逆でした。
詳しくは /etc/host.conf を参照)。このうち、/etc/hosts には IP アドレスと
ホスト名が一覧されていますが、当然のことながら世界中のホストについて列
挙することは不可能です。このため、/etc/hosts でホスト名が見付からない
場合、DNS への問い合わせを行うのですが、この際どこに問い合わせれば良い
かを指定するのが /etc/resolv.conf です。
[管理番号 390] (最終更新 2001/03/07 02:08:45)
Q. ppp(8) を対話モードで起動して、ppp プロンプトから "dial セクション名"
として接続すると、回線はつながるのですが 5 秒で切断されてしまいます。
A. /etc/ppp/ppp.conf にて、そのセクションの最後で "dial" を指定していませ
んか?
ppp.conf に dial が指定してあると、対話モードでの dial コマンド実行時に、
もう一度 dial コマンドを実行しようとして、2回目の dial コマンドの失敗
により、回線が切断されてしまいます。
切断までの時間が 5 秒なのは、ppp.conf の default: セクションで、
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK
と書いてあるからです。 ^^^ここ
(既に1回目の dial コマンドでモデムはデータモードに入っているから、AT
コマンドに応答するはずがない)
ppp.conf に dial 指定をした場合には、
・コマンドラインからの ppp 起動時に引数でセクション名を指定する。
・対話モードの ppp プロンプトで "load セクション名" と入力する。
のいずれかの方法を使いましょう。
[管理番号 407] (最終更新 1999/02/17 23:58:45)
Q. (サーバ) ppp 着信用サーバの設定法をおしえて
A. <URL:http://www.y-min.or.jp/~nob/FreeBSD/ppp.html>
他に FreeBSD handbook にも解説があります。
<URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/ppp-and-slip.html>
[管理番号 408] (最終更新 2001/03/07 02:08:45)
Q. 端末型ダイアルアップ IP 接続で、LAN ごと接続出来ませんか?
A. FreeBSD 3.3-RELEASE 以降であれば、標準の ppp(8) に -nat オプションが
追加されましたので、適切に /etc/ppp/ppp.conf に設定すれば可能です。
詳しい設定方法については、日本語マニュアルの ppp(8) を参照してください。
少し記述の古い部分も見受けられますが、以下の文書も参考になると思います。
<URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/ppp-primer/index.html>
それから、佐藤淳一さんの NAT パッチを利用している人は、設定方法が異な
りますので、佐藤さんの Web ページを参照してください。
<URL:http://configure.sh/FreeBSD/NAT/nat.html>
[管理番号 611] (最終更新 2001/03/07 02:08:45)
Q. ppp + natd で、ネットワークに接続し直すとパケットが流れなくなってしま
います。
A. natd(8) へのオプションに -dynamic yes は付けてありますか?
# natd -p 6668 -n tun0 -dynamic yes
こうしておかないと、natd が IP アドレスの変更を検出できないためです。
FreeBSD 2.2.7-RELEASE 以降なら、/etc/rc.conf で以下のように設定すれば
良いでしょう。
nat_enable="YES" # Enable natd (if firewall_enable == YES).
nat_interface="tun0" # Public interface or IPaddress to use.
nat_flags="-dynamic" # Additional flags for natd.
また、FreeBSD 3.3-RELEASE 以降であれば、ppp と natd を組み合わせる
よりも、ppp(8) の -nat オプションを使うことを考慮した方が良いでしょう。
[管理番号 645] (最終更新 1999/02/17 23:58:45)
Q. PAPとかCHAPって何ですか?
A. PPP接続の際のユーザ認証方式です。この他にUNIXのログインにより認証
する方法があります。
PAPは、UNIXのログインの手順とよく似ていますが ログイン名とユーザーパス
ワードを PPP の パケットとして送出します。
さらに CHAPは、サーバ側から暗号化のもとになる「チャレンジ」と言われる
と文字列を送り、クライアント側はこれに基づいて暗号化されたワンタイム・
パスワードを送ります。 セキュリティ面で言うと、パスワードなどがそのま
まながれることがないのでCHAPの方が優れています。
UNIXのログインによる認証は、まず無手順でUNIXにログインした後 PPP が
起動されという方式です。
どの認証方式を選ぶべきかは、接続先のISPがサポートの対応状況によります。
/etc/ppp/ppp.confに
accept chap
deny pap
と書くことでCHAPが選択され、
accept pap
deny chap
だととPAPで接続します。
ログインネームとパスワードは
set authname myloginname
set authkey mypassword
と指定します。
一方、UNIXのログインによる認証は
deny pap
deny chap
set login "TIMEOUT 5 login:-\\r-login: myloginname word: mypassword"
などと書きます。
[管理番号 662] (最終更新 2001/05/07 03:21:09)
Q. ppp で filter を設定していますが、cvsup が動きません。
A. cvsup は port として 5999 を使うので以下のように指定してください。
また、cvsup を multiplexed モードで動かす必要があります。最近の
cvsup (cvsup 16.0 以降) のデフォルトは multiplexed モードですが、
明示的にこのモードにするには
cvsup -P m <以下略>
のように指定してください。
[2.2.8-RELEASE 以降]
# cvsup
set filter in rule-no permit tcp src eq 5999 estab
set filter out rule-no permit tcp dst eq 5999
[2.2.7-RELEASE 以前]
# cvsup
set ifilter rule-no permit tcp src eq 5999 estab
set ofilter rule-no permit tcp dst eq 5999
なお、rule-no は filter 指定時のルール番号です。
[管理番号 678] (最終更新 2001/03/07 02:08:44)
Q. ppp(8) コマンドを auto モードや ddial モードで起動したときに、診断ポート
(3000/tcp) への Internet 側からのアクセスを拒否したいのですが、どうす
ればいいのでしょうか?
A. TCP ソケットを使う必要がないのならば、LOCAL ドメインソケットを使うよう
に変更する方法があります。これならば、外部からの直接アクセスは自ずとで
きなくなります。/etc/ppp/ppp.conf の該当セクションで、`set server' 行を
探して、
set server /var/tmp/internet "" 0177
などのように変更します。アクセス方法は pppctl(8) コマンドを使って、
% pppctl /var/tmp/internet
とすればあとは今までと同じです。
何かの理由で TCP ソケットを使わなければならないのであれば、ppp(8) のパ
ケットフィルタリングを使って、外部からのアクセスを拒否するようにしてく
ださい。次のような設定を ppp.conf の該当セクションに追加すればよいでしょう。
set filter in <rule-no> deny 0 MYADDR tcp dst eq <port-no> (3.3R以降)
set filter in <rule-no> deny tcp dst eq <port-no> (2.2.8R以降)
set ifilter <rule-no> deny tcp dst eq <port-no> (2.2.7R以前)
ここで、<rule-no> はフィルタのルール番号、<port-no> は `set server'
で指定したポート番号です。詳しくは ppp(8) のマニュアルを参照してください。
[管理番号 698] (最終更新 1999/02/24 03:32:00)
Q. PPP でユーザ認証がうまくいかないようです。/var/log/ppp.log には
May 7 02:43:24 X68000 ppp[279]: tun0: Chat: Expecting login:-\r-login:
May 7 02:43:24 X68000 ppp[279]: tun0: Chat: Wait for (5): login: --> login:
May 7 02:43:29 X68000 ppp[279]: tun0: Chat: Can't get (5).
となっています。
A. /etc/ppp/ppp.conf に
-------------
default:
set device /dev/cuaa1
...
# PAP で接続するサイト
ppp1:
accept pap
deny chap
set phone 0123456
...
# CHAP で接続するサイト
ppp2:
accept chap
deny pap
set phone 9876543
...
# UNIX のログイン認証で接続するサイト
ppp3:
deny chap
deny pap
set login "TIMEOUT 5 login:-\\r-login: hoge word: fuga"
set phone 6543210
...
----------------
などと記述している場合、ppp を実行してすぐに ppp1 や ppp2 にダイアルす
るとうまくいきますが、ppp3 にダイアルした後に ppp1 や ppp2 にダイアル
するとユーザ認証に失敗します。
これは、前回ダイアル時の set login "..." の設定が残ってしまい、ppp1 や
ppp2 の接続先に (UNIX の) ログイン認証でユーザ認証を行おうとすることが
原因です。ppp1 と ppp2に
set login ""
を追加することで、ログイン認証を明示的に禁止できます。
[管理番号 719] (最終更新 2001/03/07 02:08:45)
Q. 一般ユーザで ppp を使うことができません。su で root になれば
できるのですが面倒です。
A. FreeBSD 2.2.6-RELEASE 以降では、
- そのユーザが network グループに属している
- /etc/ppp/ppp.conf で `allow users' を記述する
という2つの設定を行えば、一般ユーザでも ppp コマンドを利用
できるようになります。例えば、ユーザ名を hoehoe としたとき
以下のようにします。
1. /etc/group
network:*:69:hoehoe
^^^^^^
`network:*:69:' で始まる行を探して、追加したいユーザ名を最後の ':'
の後ろに記述します。複数のユーザを登録したいときは、`,'で区切って並
べます。
2. /etc/ppp/ppp.conf
default:
allow users hoehoe
`allow users' は一般的に default セクションに追加する方が良いでしょう。
複数のユーザを登録するときは、スペースで区切ってまとめて記述します。
詳しくは、ppp(8) を参照してください。
残念ながら、2.2.5-RELEASE では root 以外利用できません。
[管理番号 781] (最終更新 2004/04/09 05:04:53)
Q. ダイアルアップルータや ppp の -auto モードを使用しています。
次のような操作により、意図していないのに勝手にダイアルしてしまいます。
これを抑制するにはどうすればいいですか?
1. sendmail 等、アプリケーションの起動時
2. 夜中の 3 時頃
3. なにかしら DNS への問い合わせが発生する操作
A. 一般的に on-demand dialup では、DNS サーバへの参照をトリガーとしてダイ
アルします。これを抑制すれば意図しないダイアルを防げます。
(1) 名前解決の順序
(2) 自ホストの名前解決
(3) 外部への接続が不要な DNS への問合せを抑制する。
(1) 名前解決の順序
デフォルトでは /etc/host.conf は
hosts
bind
となっています。これを逆順にすると、必ず DNS サーバーへの問い合わせ
が行われるという問題が起きます。念の為、確認してください。
(2) 自ホストの名前解決
sendmail 等のアプリケーションは、起動時に自ホストの名前解決を行います。
これによる DNS への問合せを避ける為、/etc/rc.conf で hostname 変数に指
定した自ホスト名を、/etc/hosts に登録する必要があります。
すなわち、hostname(1) コマンドの結果が `myhost.example.jp' なら、
127.0.0.1 localhost localhost.example.jp myhost.example.jp
または、ネットワークインタフェースが使えるなら、その IP アドレスを使って、
127.0.0.1 localhost localhost.example.jp
192.168.0.1 myhost.example.jp myhost
のようにします。
LAN 上に DNS サーバを立ち上げてないような小規模サイトでは、その LAN に
あるそれ以外のホストについても、ホスト名と IP アドレスのペアを登録して
おきましょう。これはこちら側から直接 telnet などするつもりがなくても、
逆から接続されるとき、IP アドレスからホスト名を逆引きするときにも使わ
れるからです。
(1) 及び (2) は、ローカルで DNS サーバーを動かしていない場合の必須事項
で、これをしてないがために、アプリケーション起動のたびに PPP 接続して
しまったり、起動に時間がかかるといった現象に出食わすことになります。
(3) 外部への接続が不要な DNS への問合せを抑制する。
典型的な例として、netstat(1) があります。このコマンドはデフォルトで
DNS への問合せを発行します (-n オプションで抑制できます)。
4.1.1-RELEASE 以降のデフォルトでは、/etc/periodic/dayly から、
netstat が実行されます (4.9-RELEASE で確認)。その為、
/etc/periodic/dayly が実行される午前3時頃にダイアルアップすることに
なります。これを避けるには、/etc/periodic.conf に次の行を追加してく
ださい。詳しくは periodic.conf(5) をご覧ください。
daily_status_network_usedns="NO"
daily_status_named_usedns="NO"
なお、ppp(8) のパケットフィルタを設定すれば、DNS への問い合わせにより
自動的にダイアルしないようにもできますが、on-demand dialup の目的から
すると本末転倒かもしれません。もちろん設定するしないは自由ですので、ケー
スバイケースで判断してください。
set filter dial 0 deny icmp
set filter dial 1 deny udp src eq 53
set filter dial 2 deny udp dst eq 53
set filter dial 3 permit 0 0
詳しくは man ページや、/usr/share/examples/ppp/ 以下、または /etc/ppp/
にあるサンプルファイルを見てください。
[管理番号 859] (最終更新 2001/10/19 21:29:32)
Q. FreeBSD で RADIUS サーバを立てようと思っているのですが、
参考になる Web サイトはありますか?
A. iij-ppp や pppd を使うのなら
<URL:http://www.kyoto-wave.or.jp/shain/radius/>
DTC Radius
<URL:http://www.dtc.co.jp/Radius/>
<URL:http://www.dtc.co.jp/Radius2.0/>
Lucent (旧 Ascend 社) Radius FAQ
<URL:[BROKEN!] http://www.lucent.co.jp/ins/techdoc/radiusfaq.html>
HappySize さんによる RADIUS リンク集
<URL:http://happysize.com/techie/>
<URL:http://happysize.com/techie/RADIUS/radiusserver.html>
ルータ RT シリーズを作ってる YAMAHA のサイト
<URL:http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/radius.html>
あとは RFC ですが、Index を RADIUS でサーチしてみれば、関連するものが
いくつか見付かるでしょう。
- [管理番号 67] Q.RFC の和訳 (日本語訳) はありますか?A.RFC ならびに Inter...
- [管理番号 200] Q.SOHO / 家庭内LAN を構築しようと考えているのですが、IPアドレスは...
- [管理番号 409] Q.電子ブック (8cm CD) や EPWING 規格 (12cm CD) な...
- [管理番号 553] Q.「RFC 何番を読め」と言われたんですが、RFC とか Internet D...
- [管理番号 699] Q.Limited broadcast ってなんですか?A.宛先が 255.25...
- [管理番号 815] Q.POP プロトコルと POP3 プロトコルって違うんですか?A.「POP プ...
- [管理番号 859] Q.FreeBSD で RADIUS サーバを立てようと思っているのですが、参考...
- [管理番号 1311] Q.(bind-4.x.x で使用していたゾーンファイルのままで)BIND-8....
- [管理番号 1547] Q.wget で HTTP や FTP 経由で再帰的にファイルを取得したいのです...
- [管理番号 2073] Q.FTP の active/passive モードの仕組みを教えてください。A...
[管理番号 1152] (最終更新 2001/08/12 02:51:17)
Q. ppp(8) で接続した直後から
Apr 17 04:38:39 somehost sendmail[39248]: NOQUEUE: SYSERR(root):
opendaemonsocket: daemon MTA: cannot bind: Address already in use
Apr 17 04:38:39 somehost sendmail[39248]: daemon MTA: problem creating SMTP socket
などという変なメッセージが限りなく出てきます。
A. すでに sendmail(8) が daemon mode で起動しているのに、更に
/etc/ppp/ppp.linkup に
!bg sendmail -bd -q30m
などと書かれていませんか?
既に sendmail(8) が daemon mode で起動しているのにもかかわらず
新たに sendmail(8) を daemon mode で起動するとこのようなメッセージが
出ます。とりあえず、sendmail(8) を停止すればこのメッセージは
止まります。ps -auwx | grep sendmail して sendmail の PID を
確認し、kill -TERM で停止させてください。
[管理番号 1154] (最終更新 2001/04/18 02:12:12)
Q. 電話料金を節約するため /etc/ppp/ppp.conf の中で、
set timeout 300
などと指定して 5 分間ネットワークにアクセスしない時には回線を切るよ
うにしてありますが、特にアクセスをしていないのに接続が維持されてし
まいます。
A. set timeout による idle timer の設定で、一定時間パケットが流れない
場合には回線を切るようになっていますが、デフォルトでは ping、
NetBIOS などのパケットにも反応して、接続を維持してしまいます。例え
ば、外部から ping を一定間隔で打たれると、その都度 idle timer がリ
セットされ、見た目にネットワークアクセスをしていなくても ppp(8) は
接続を維持しようとします。また、接続を維持する上で意味のないパケッ
トも idle timer に影響を与えることがあります。
このために、idle timer に影響を与えるパケットと与えないパケットを
指定して timeout の動作を変更することができます。これは
alive filter を利用し、例えば、
[2.2.8-RELEASE 以降]
set filter alive 0 deny udp src eq 137
set filter alive 1 deny udp src eq 138
set filter alive 2 deny udp src eq 139
set filter alive 3 deny udp dst eq 137
set filter alive 4 deny udp dst eq 138
set filter alive 5 deny udp dst eq 139
set filter alive 6 deny icmp
set filter alive 7 permit 0/0 0/0
[2.2.7-RELEASE 以前]
set afilter 0 deny udp src eq 137
set afilter 1 deny udp src eq 138
set afilter 2 deny udp src eq 139
set afilter 3 deny udp dst eq 137
set afilter 4 deny udp dst eq 138
set afilter 5 deny udp dst eq 139
set afilter 6 deny icmp
set afilter 7 permit 0/0 0/0
などと /etc/ppp/ppp.conf に指定すると、ポート 137 〜 139 を出入りす
る UDP datagram と ICMP message (ping が代表的)については、idle
timer に影響を与えませんが、その他のパケットが流れると idle timer
をリセットし、接続は維持されます。
詳しいことは ppp(8) の man ページおよび /usr/share/examples/ppp/
以下のサンプルファイルを参考にしてください。
[管理番号 1234] (最終更新 1999/05/07 00:50:22)
Q. NAT-patch をあてた iij-ppp をオンデマンドダイアルアップモードで起動すると、
コマンドプロンプトがすぐに返ってきません。数十秒後に勝手にダイアルを開始し、
ようやくコマンドプロンプトが返ってきます。
A. DNS を立ちあげていませんか?しかも DNS で解決できない場合、外部 (プロ
バイダー等) の DNS に問い合わせるように設定していませんか? もしそうなら、
/etc/ppp/ppp.conf に
add default ...
という行があると思います。ppp はこの default をホスト名だと解釈して IP
アドレスを引きに行きます。でもこの時点ではまだ ppp は起動していませんから、
タイムアウトを待つことになります。それが数十秒待つ原因です。その後 ppp が
起動するとあらためて DNS に問い合わせてしまうので、ダイアルアップして
しまいます。
解決策としては、下記のいずれかが考えられます。
1. /etc/ppp/ppp.conf で
add 0.0.0.0. ...
とする。
2. /etc/host.conf を
hosts
bind
の順に設定し、/etc/hosts に
0.0.0.0 default
を加える。
[管理番号 1302] (最終更新 2003/05/17 21:39:23)
Q. NEC Aterm シリーズの ISDN TA で、同期 64Kbps のアクセスポイントに PPP
接続しようと思うのですが、うまくつながりません。TA は RS-232C ポートに
繋げて使っています。
A. 同期 64Kbps のアクセスポイントに接続するためには、「非同期/同期 PPP 変
換をする」という設定にする必要があります。Aterm シリーズの ISDN TA で
は、AT コマンドで AT$N1=1 とすればこの設定ができます。
また、チャットスクリプトの段階で失敗するなら、\\d (2 秒待つ) を付加する
ことで接続に成功するかもしれません。
AtermIT40、AtermIT45、AtermIT55、AtermIT60 では、次のチャットスクリプトでの
接続が確認されています。途中で改行していますが、実際は一行に続けて記述します。
なお、Aterm シリーズ固有の問題なのかどうかは分かっていません。
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT$N1=1
OK-AT-OK \\dATE1Q0 OK \\dATD\\T TIMEOUT 40 CONNECT"
ただし、FreeBSD 4.1-RELEASE 以降や 3.5-RELEASE 以降では、環境変数を
使える様になった関係で、AT$N1=1 を AT$$N1=1 や AT\$N1=1 とする必要が
あります。
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT\$N1=1
OK-AT-OK \\dATE1Q0 OK \\dATD\\T TIMEOUT 40 CONNECT"
[管理番号 1429] (最終更新 1999/11/19 16:04:26)
Q. ppp コマンドでインターネットに接続しているのですが、ftp コマンドで
ファイルを転送したり、メールに添付してファイルを送る場合などに、ある
特定のサイズ (20kbytes くらい) 以上のファイルを送ろうとすると、途中
から送信が止まったような状態になります。この時、kernel が
sio1: 1 more silo overflow (total 1)
などというエラーメッセージを出しています。同じハードウェア構成でも
Windows95 では全く問題ありません。
A. PC-モデム間の送信フロー制御の設定が正しくない時や、ケーブルが不適切な
時に起こりそうな症状です。DCE速度 (33.6kbps) よりも DTE速度 (例えば
115.2kbps) の方が速いので、よほど LAPM で圧縮が効くデータでない限り
モデムのバッファが一杯になってモデムから PC へ送信停止要求が行きますが、
これが発生しなかったり正しい方式でなかったり (xon/xoff制御) するとフロー
制御ができなくてオーバーフローした送信データが消失します。
以下の点を確認してみて下さい。
1) モデムはハードウェア (RTS/CTS 又は RS/CS) フロー制御になってい
るか。(またはPPP接続初期化時にハードウェアフロー制御に設定する
ATコマンドが送られているか)。
2) (念のため)sio の irq が正しいか。
モデムに関する設定は
1) PC 側の設定は ppp コマンドを実行してから show modem で
2) モデム側の設定は AT コマンドで
それぞれ参照できます。AT コマンドの詳細はモデムのマニュアルを参照して
下さい。私の環境では /etc/ppp/ppp.conf の set dial を以下のように
しました。
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATLM \
OK-AT-OK AT&K3 OK-AT-OK ATDP\\T TIMEOUT 40 CONNECT"
ここで、 "AT&K3" が私のモデム(Diamond Multimedia SupraExpress 336i
PnP)で RTS/CSフロー制御にするための ATコマンドです。
また sio の irq に関しては dmesg | grep sio で、見ることができます。
他の OS (例えば Windows) などがある場合はそちらでも irq を確認して
みましょう。
[管理番号 2247] (最終更新 2003/10/16 23:20:37)
Q. フレッツ ADSL と ppp(8) を使ってインターネットに接続しています。
自動リダイアルモード (-ddial) で、PPPoE 接続が切れても、自動的に
再接続してくれません。
A. フレッツ ADSL の場合、 PPPoE 接続が切れたことを ppp で認識できない
ことがあります。これを改善するためには、なんらかの方法で PPPoE 接続が
切断されたかどうかを調べる必要があります。
対策としては、以下の方法があります。
1. PPP 設定ファイルで、 "enable lqr" とする。
この場合、 ppp は、30 秒に 1 度、 PPPoE 接続先に
LQR パケットを送る。 LQR パケットが連続して 5 回無視されたら
(つまり、 PPPoE 接続先から 150 秒応答がなければ)、
ppp は自動的に PPPoE 接続を切断する。
2. 以下のようなスクリプトを書く。
「 PPPoE 接続先 (ifconfig で tun* のデバイスを見た時、 -> の
右側に書いてある IP アドレス ) に ping を飛ばす。
飛ばないようなら PPPoE 接続が切断されたとみなし、
ppp を再起動する。」
[FreeBSD-users-jp 63734] から始まるスレッドが参考になるでしょう。