PPxPを使ったダイアルアップPPP接続 |
YAMAMORI Takenori ●yamamori |
一般にPPP接続では,接続が完了するとそのPPPのリモート側のIPアドレスが, ネットワーク経路のデフォルトルートとして自動的に設定されるようになっています. これにより,PPP接続が完了すると自動的にインターネットに向けて IPパケットが届くようになるわけです. ところが,PPxPによる接続を行なう前に, すでになんらかのデフォルトルートが設定されていると, PPxPの接続完了時のデフォルトルートの設定がうまくいかない という不具合があります.
具体的には,tkppxpなどを使ってダイアルアップすると, モデムレベルのネゴシエーションはもちろん, PAP/CHAP認証やPPP両端のIPアドレスの割り当て, さらにISP側のDNSサーバのIPアドレスの取得からresolv.confの書換えまで, すべてうまく動作しているのにも関わらず, 実際にはIPパケットが通らず, インターネットにアクセスできないという状態になります.
この時,「netstat -rn」を実行してネットワーク経路を表示すると, デフォルトルートのIPアドレスはPPP接続後のものに書き換わっており, あたかも正しくデフォルトルートが設定されたかのように表示されてしまいます. また,$HOME/.ppxp/log以下のログファイルには,
ERROR: SysIpRoute change: Disc quota exceeded
という,紛らわしいエラーメッセージが出ます. この,「Disc quota exceeded」は, libcのsys_errlist[]内のメッセージと思われますが, これは不適切で,Disc quotaつまりハードディスクの使用可能容量については, エラーの原因とは全く関係ありません.
以上のことから混乱させられ, 実は筆者はこの問題の解決に長時間かけてしまいました. 原因は上記の通り,PPxPでの接続前にすでに別のデフォルトルートが設定されて いたことです.
PPxPでの接続前にすでにデフォルトルートが設定されている場合は, 下図のようにしてこれをネットワーク経路から削除します.
$ netstat -rn ← 現在のネットワーク経路を表示 Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.1.7 UGSc 0 0 fxp0 ← これが問題 127.0.0.1 127.0.0.1 UH 0 48 lo0 192.168.1 link#1 UC 1 0 fxp0 192.168.1.7 8:0:20:XX:XX:XX UHLW 2 74 fxp0 1193 (以下省略) $ su Password: # route delete default 192.168.1.7 ← デフォルトルートを削除 |
次回リブート後もデフォルトルートが設定されないようにするには, /etc/rc.confの中の defaultrouter="IPアドレス" という行を見つけ, これを削除するかまたは「#」でコメントアウトします. FreeBSDのOSのインストール時に, インストーラ上のネットワークの設定画面でデフォルトルートを入力していると, この行が自動的に記述されているはずです.
通常,デフォルトルートが設定されているということは, LAN内にインターネットに通じるルータまたはルータの役割を行なう 別のダイアルアップマシンがすでにあるということであり, その場合はそもそもPPxPを使う必要はないでしょう. 一方,今回のようにPPxPを使用するホストの場合は, 逆にデフォルトルートを設定する必要がないばかりか, 設定してはいけないということになります.