★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
なんかも確認してみます。
高村のホームに戻る