★FreeBSDにPPPoEを喋らせてブロードバンドルータにする。
 June 9,2002 takamura@itoh.co.jp

 NTT東西のフレッツADSLやBフレッツと

 NTTコミュニケーションズの OCN ADSL/光アクセスIP8/IP16
 NTT PCコミュニケーションズの BizADSL8/16/HIKARI8/16

などを組み合わせグローバルサブネットが振り出されるサービスを受ける
際にはWAN側unnumberedに対応したブロードバンドルータが必要になります。

 ところが市販されているこの手のブロードバンドルータは

・スループット性能が低すぎる
・突然止まる・ちゃんと動かない
・リンクが切れたら復旧するのに時間がかかる
・ファームウェアがこなれていない?
・詳細なパケットフィルタリングができない。(または設定が判りにくい)
・自力である程度の期間ログをためておくことができない。
・SSHで安全なリモート接続ができない。

などでまともな性能のモノに当たった試しがありません。1台あたり1万
数千円から高いもので4万円台のものまで4機種ほど買って全部捨てまし
た。(涙)

 そんなこんなでFreeBSD 4.5RELEASEをインストールしたPCにPPPoEを喋らせ
ブロードバンドルータに仕立て上げてみることにしました。結果は今まで月に
1〜2度止まっていたのが50日間一度も止まることなく、切断・再接続も
ほぼ瞬時にリンクするようになり満足な結果になりました。スループットは
50Mbpsほどは出ているようですからこれもまずまずでしょう。


★kernel再構築
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/PPPOE
をひな形にして

ident		PPPOE  #ここは新しいカーネル名に書き換えておく

options         IPFILTER                # ipfilter
options         IPFILTER_LOG            # ipfilter
options         IPFILTER_DEFAULT_BLOCK  # ipfilter
options         TCP_DROP_SYNFIN         # ipfilter

options		MSGBUF_SIZE=40960       # for PPPoE
options		NETGRAPH                # for PPPoE
options		NETGRAPH_ETHER          # for PPPoE
options		NETGRAPH_PPPOE          # for PPPoE
options		NETGRAPH_SOCKET         # for PPPoE

を追加。
 INET6(IPv6)関係とNFS関係、それから死んでも使わないデバイスを削除し
てから

cd /usr/src/sys/i386/conf
config PPPOE

cd ../../compile/PPPOE
make depend ; make ; make install

でカーネル作成は終了。


★PPPの準備

/etc/ppp/ppp.conf
を下記のように作成

default:
 set device PPPoE:rl0  ### これはPPPoEに使うネットワークデバイス
 set log Phase Chat LCP IPCP CCP tun command
 set speed sync
 set mru 1454
 set mtu 1454
 set ctsrts off
 set timeout 0
 accept CHAP
 add default HISADDR
 enable tcpmssfix
 disable deflate
 disable pred1

pppoe:
 set authname is********@***.sphere.ne.jp
 set authkey **********


続いて
/etc/ppp/ppp.linkup
を下記のように作成

pppoe:
 ! ifconfig tun0 delete
 ! ifconfig tun0 PPPoEルータのIPアドレス netmask 255.255.255.248 HISADDR
 add! default HISADDR

この ppp.linkupが無いとInfoshereBizADSL8/16や OCN ADSL IP8/16、そのほか光
も なぜかネットワークアドレスそのものを名乗ってしまうのでその対策です。

★rc.confの追加事項

/etc/rc.conf

network_interfaces="rl0 rl1 lo0"
tcp_extensions="YES"

ifconfig_rl0="media 10BaseT/UTP up"
#ifconfig_rl0="up" だけだとオートネゴが効かないのでADSLの場合は上記のように記述
#B-Fletsの場合は下記を採用しないとオートネゴが効かない。
#ifconfig_rl0="media 100baseTX mediaopt full-duplex up"
#ADSLもBフレッツもADSLモデム/メディアコンバータ(光加入者線終端装置)と直結時は
#必ず上記のように記述。 2セッション(Bフレッツ)を張る場合にスイッチを経由する
#ときはupだけでも多分OKだと思われる。

ifconfig_rl1="inet PPPoEルータのIPアドレス netmask 255.255.255.248"
gateway_enable="YES"
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="pppoe"
ppp_nat="NO"
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipfilter_flags=""
ipmon_enable="YES"
ipmon_flags="-D /var/log/ipf.log"

★パケットフィルタリング設定
これは
http://www.tac.tsukuba.ac.jp/~hiromi/ipf4.html
を参考に適当に設定してください。

とりあえずPPPoEの動作確認の為に臨時で

/etc/ipf.rulesを

pass in all
pass out all

などと書いておけばとりあえず動きますが、ちゃんとしたパケットフィルタ設定
は必須です。

★いよいよ動かしてみます。

shutdown -r now
で立ち上がったら
/var/log/ppp.log
をみてみたり

ifconfig tun0
なんかも確認してみます。
高村のホームに戻る