NTT の B フレッツ や フレッツ・ADSL 等、PPPoE 接続を NetBSD から利用する方法について述べます。 ただし NetBSD から直接 PPPoE セッションを開始する場合のみを対象とし、 ブロードバンドルータ等を介した接続はここでは扱いません。
PPPoE 接続に必要な機能は NetBSD 1.6 以降のベース構成に含まれています。
カーネルの構成オプションに
pseudo-device pppoe
が含まれている必要があります。
コンパイル済みの状態で配布されているカーネルは、
おそらくこのオプションを含んだ状態でコンパイルされていると思います。
もし以下の「1. pppoe インタフェースを作成する」でエラーが出た場合は、
オプションを有効にしたカーネルを入手(もしくは自分でコンパイル)
する必要があります。
また、モデムとの接続には Ethernet を使いますので、 当然ながら Ethernet アダプタが使える状態でなければなりません。
まずはコマンドを手動で実行しながら接続してみましょう。 以下のコマンドはすべて root ユーザで実行してください。 また便宜上 Ethernet アダプタは ne0 として表記しますが、 使用する環境に応じて置き換えてください。
カーネルが PPPoE の機能を持っていても
pppoe インタフェースは自動的には作成されません。
ifconfig
コマンドを使って明示的に作成する必要があります。
# ifconfig pppoe0 create
作成したインタフェースは、destroy で明示的に削除するか、 または reboot するまで有効です。
カーネルに pppoe が組み込まれていない場合は以下のエラーが出ます。 pppoe が組み込まれたカーネルで起動してください。
# ifconfig pppoe0 create ifconfig: SIOCIFCREATE: Invalid argument
PPPoE に使用する Ethernet アダプタを、 IP アドレスをつけずに up にします。
# ifconfig ne0 up
pppoectl コマンドを使って、pppoe で使用する Ethernet インタフェースを指定します。 pppoe0 が ne0 を使用する場合、コマンドは以下のとおりです。
# pppoectl -e ne0 pppoe0
認証情報を pppoectl コマンドで設定します。 少し気持ち悪いのですが、パスワードもコマンドオプションで指定します (一瞬で終了するプロセスなので実害はないと思いますが)。 典型的には以下のようになります。
# pppoectl pppoe0 myauthproto=pap myauthname=XXXXX myauthsecret=XXXXX
ISP から指定されたユーザ ID を myauthname に、 パスワードを myauthsecret に指定します。 また myauthproto は、ほとんどの場合 pap で良いはずです。 pap 以外には chap および none を指定できます。 ISP から指定があった場合は、その指示に従ってください。
pppoe インタフェースに IP アドレスを設定します。 Ethernet インタフェース(このシナリオでは ne0) ではない ので間違えないようにしてください。
IP アドレスが固定の場合はそのアドレスを設定してもよいのですが、 動的に取得しなければならない場合もあるため、 pppoe インタフェースはマジックナンバーを用意しています。 自分のアドレスには 0.0.0.0 を、 接続先のアドレスには 0.0.0.1 を設定してください。
# ifconfig pppoe0 inet 0.0.0.0 0.0.0.1
あとは pppoe インタフェースを up にすれば自動的に接続されます。
# ifconfig pppoe0 up
問題なく接続されていれば、 ifconfig を実行すると以下のような出力が得られるはずです。
# ifconfig pppoe0 pppoe0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1454 inet XXX.XXX.XXX.XXX -> YYY.YYY.YYY.YYY netmask 0xff000000 inet6 fe80::ZZZZ:ZZZZ:ZZZZ:ZZZZ%pppoe0 -> prefixlen 64 scopeid 0xa
上記の出力例のうち、 XXX.XXX.XXX.XXX が NetBSD 側の IP アドレス、 YYY.YYY.YYY.YYY が ISP 側の IP アドレスです。
(接続できなかった場合の対応を追加予定)
多くの場合、PPPoE 接続をデフォルトルートとして使用するはずです。 上記で確認した ISP 側の IP アドレスをデフォルトルートとして設定します。
# route add default YYY.YYY.YYY.YYY
手動接続と同じ手順を /etc/ifconfig.pppoe0 に書いておけば、 OS ブート時に自動的に接続します。 以下にサンプルを示します。
! /sbin/ifconfig ne0 up ! /sbin/pppoectl -e ne0 $int ! /sbin/pppoectl $int myauthproto=pap myauthname=XXXXX myauthsecret=XXXXX inet 0.0.0.0 0.0.0.1 up
NetBSD 1.6.1 以降
(-current は /etc/rc.d/network が 1.39 以降)、
明示的に create
を書く必要はなくなっています。
/etc/ifconfig.pppoe0 が存在すれば自動的に
ifconfig pppoe0 create
が実行されます。
一般的な /etc/ifconfig.* の記述とは違って、
pppoe の設定には、他の Ethernet インタフェースへの ifconfig や
pppoectl コマンドが必要です。NetBSD 1.5.1 以降
(-current は /etc/rc.d/network が 1.29 以降)、
/etc/ifconfig.* の行頭に !
を書くことで
任意のコマンドを記述できるようになっています。
上記サンプルにはルーティングの設定が入っていません。
マニュアルの
pppoe(4)
にあるように、/sbin/route add default -iface 0.0.0.1
で設定することも可能です。
しかし私は、静的に設定する場合は後述の ifwatchd を使っています。
またルーティングデーモンを使って動的に構成することも可能です。
(動的ルーティングについては別にページを作成予定)
なお、このファイルには PPPoE の認証情報が含まれますので、 root 以外はアクセスできないように設定しておくべきです。
# chown root.wheel /etc/ifconfig.pppoe0 # chmod go-rwx /etc/ifconfig.pppoe0
NetBSD 1.6 で追加された ifwatchd というデーモンを使うと、pppoe インタフェースの up / down に同期して 任意のコマンドを実行できます。 IP フィルタ、NAT、ルーティング等を設定するのに便利です。
ifwatchd を使用するためには /etc/rc.conf に以下の記述を追加します。
ifwatchd=YES
OS 起動時にこの記述があると、自動的に ifwatchd が常駐します。 起動後に追加した場合は、追加後に root ユーザで以下のコマンドを実行します。
# /etc/rc.d/ifwatchd start
インタフェースが up になると /etc/ppp/ip-up が、 down になると /etc/ppp/ip-down が実行されます。 これらのスクリプトは pppd と共用です。
NetBSD はマルチセッションに対応しています。 pppoe0 と同じ要領で pppoe1 等を使用してください。 ただし実際に使う際には、何らかのルーティングデーモンが必要でしょう。
NTT の B フレッツ や フレッツ・ADSL を使用している場合、 フレッツ・スクウェア という独自コンテンツにアクセスできます。 フレッツ・スクウェアはインターネットへの通常の接続からはアクセスできず、 専用の PPPoE 接続が必要です。 NetBSD はマルチセッションに対応していますので、 インターネット接続と同時にフレッツ・スクウェアへも接続できます。