PPPoE router using FreeBSD mpd+pf

PPPoEをバラしているFreeBSDのPCルータを、tun device による basesystem ppp から netgraph device による mpd に切り替えたので記録。

  • net/mpd を導入
  • /usr/local/etc/mpd を適当に設定。参考
  • /boot/loader.conf に ng_ether_load="YES" を追加。不必要かもしれないけど、いくつか報告も見かけるので念のため。
  • /etc/rc.conf で ppp を廃止・mpd を有効化、ログはsyslogに。 ppp_enable="NO" mpd_enable="YES" mpd_flags="-s mpd -b" あたり。
  • うまく自動起動させるために、ちょっと荒技
    • mv /usr/local/etc/rc.d/mpd.sh /etc/rc.d/mpd
    • /etc/rc.d/mpd の冒頭で、REQUIRE: NETWORKING を外して BEFORE: NETWORKING に変更
    • rcorder /etc/rc.d/* とかやって、外への接続性が必要なサービスより前に mpd が実行されることを確認
    • もしかしたら /etc/rc.d/NETWORKING で REQUIRE にも追加しないといけないかも。
  • インターフェース名を見ている者を tun0 から ng0 に変更
    • /etc/pf.conf の
    • MRTG

rcNG的にはどう配置してどう書くのが正しいのかな。でも、外部への接続性をmpdで提供するんだから、REQUIRE: NETWORKING は嘘だよな。ロジックとしては、mpd 側は REQUIRE/BEFORE を書かずに NETWORKING から要求させるのが筋なんだろうか。でも標準のファイルは触りたくないしなぁ、絶対間違えて上書きしてはまるし。

とりあえず、CPUかつかつで30Mbpsぐらいで頭打っていたのが50MbpsでまだCPUに余裕がある感じなので満足。