PPPoE で接続


NTT の B フレッツフレッツ・ADSL 等、PPPoE 接続を NetBSD から利用する方法について述べます。 ただし NetBSD から直接 PPPoE セッションを開始する場合のみを対象とし、 ブロードバンドルータ等を介した接続はここでは扱いません。

前提条件

PPPoE 接続に必要な機能は NetBSD 1.6 以降のベース構成に含まれています。 カーネルの構成オプションに pseudo-device pppoe が含まれている必要があります。 コンパイル済みの状態で配布されているカーネルは、 おそらくこのオプションを含んだ状態でコンパイルされていると思います。 もし以下の「1. pppoe インタフェースを作成する」でエラーが出た場合は、 オプションを有効にしたカーネルを入手(もしくは自分でコンパイル) する必要があります。

また、モデムとの接続には Ethernet を使いますので、 当然ながら Ethernet アダプタが使える状態でなければなりません。

手動で接続してみる

まずはコマンドを手動で実行しながら接続してみましょう。 以下のコマンドはすべて root ユーザで実行してください。 また便宜上 Ethernet アダプタは ne0 として表記しますが、 使用する環境に応じて置き換えてください。

1. pppoe インタフェースを作成する

カーネルが PPPoE の機能を持っていても pppoe インタフェースは自動的には作成されません。 ifconfig コマンドを使って明示的に作成する必要があります。

# ifconfig pppoe0 create

作成したインタフェースは、destroy で明示的に削除するか、 または reboot するまで有効です。

カーネルに pppoe が組み込まれていない場合は以下のエラーが出ます。 pppoe が組み込まれたカーネルで起動してください。

# ifconfig pppoe0 create
ifconfig: SIOCIFCREATE: Invalid argument

2. Ethernet アダプタを up にする

PPPoE に使用する Ethernet アダプタを、 IP アドレスをつけずに up にします。

# ifconfig ne0 up

3. 使用する Ethernet アダプタを指定する

pppoectl コマンドを使って、pppoe で使用する Ethernet インタフェースを指定します。 pppoe0 が ne0 を使用する場合、コマンドは以下のとおりです。

# pppoectl -e ne0 pppoe0

4. PPPoE の認証情報を設定する

認証情報を pppoectl コマンドで設定します。 少し気持ち悪いのですが、パスワードもコマンドオプションで指定します (一瞬で終了するプロセスなので実害はないと思いますが)。 典型的には以下のようになります。

# pppoectl pppoe0 myauthproto=pap myauthname=XXXXX myauthsecret=XXXXX

ISP から指定されたユーザ ID を myauthname に、 パスワードを myauthsecret に指定します。 また myauthproto は、ほとんどの場合 pap で良いはずです。 pap 以外には chap および none を指定できます。 ISP から指定があった場合は、その指示に従ってください。

5. IP アドレスを設定する

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

6. 接続する

あとは 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 アドレスです。

(接続できなかった場合の対応を追加予定)

7. ルーティング情報を設定する

多くの場合、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

ifwatchd

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 はマルチセッションに対応していますので、 インターネット接続と同時にフレッツ・スクウェアへも接続できます。