http://www.jraitala.net/comp/articles/2002/pppoe/ などで 触れられているが、OpenBSDのPPPoE (Point to Point Protocol over Ethernet)は、 ユーザランドで実行されており、あまり効率がよくない。 というか、他のOSと比べてもダントツにパフォーマンスがよくない。
うちの環境でも、ADSL (FLETS ADSL 8M)自体は下りで7Mbps台でリンクアップ しているのだが、実行スループットは1M弱。もったいない。
2ちゃんねるの「OpenBSDユーザーコーナー」で、
OpenBSD用のin-kernel PPPoE (カーネルモードで動作するPPPoEドライバ)が紹介
されていたので試してみる。
http://www.pro-bono-publico.de/openbsd/pppoe/
上記サイトよりパッチをダウンロードし同梱のドキュメントに従い、
なので、ネイティブなUserland実装の2倍以上のスループットが得られる。
/usr/sbin/ifwatchd -u /etc/ppp/ip-up.hook -d /etc/ppp/ip-down.hook pppoe0などと実行。
うまく接続すると、スループットも飛躍的に伸び、Uptimeも100日近く運用できたが、前項に述べたような理由でOSごと停止してしまう場合もあるので、運用には注意が必要。CPUパワーに余裕のあるマシンなら、安全性を重視してネイティブのUserland PPPoEを使うのが無難。
そこらへんの問題が解決されて、正式に配布系に採用されるのがベストなんだけど‥。
これとは別に独自に実装している人もいました。具体的なソース等は公開されていないようですが。
ネイティブサポートされたようです。
In kernel PPPoE client
http://undeadly.org/cgi?action=article&sid=20041130200439
とりあえずテスト用マシンに-current ( http://kaw.ath.cx/dl/pub/OpenBSD/current/ - 20041204) をインストール。設定は通常のネットワークインターフェースやbridgeなどとおなじ、/etc/hostname.if に記述。PPPoEなので、/etc/hostname.pppoe0 を作成した。
/etc/hostname.pppoe0
pppoedev ne0 ! /sbin/ifconfig ne0 up ! /usr/sbin/spppcontrol \$if myauthproto=pap myauthname=XXX myauthkey=YYY ! /sbin/ifconfig \$if inet 0.0.0.0 0.0.0.1 netmask 0xffffffff ! /sbin/route add default 0.0.0.1 up
これでOK。
3.7のリリース時には、正式に含まれるのでは。 そうしたら、このページは用無しだな。
→予想どおり含まれました。