pfsenseはFreeBSDベースのルータアプライアンスです。LinuxベースのVyattaが最近は有名ですね。
Vyattaに無い機能としてPPPoE AC(PPPoEサーバ)があります。pfsense以外だと、SEIL シリーズとかDD-WRTとかアライドテレシスのVPNルータあたりが同じようにPPPoE ACを持っています。
おもむろにNICが2つあるマシンにインストールします。初期設定でVLAN設定ができるので、タグを理解できるスイッチをもっている人はそれでもOK。僕は仮想環境でやっているのでISOからVMを起動して、画面に従ってインストール、再起動。適当にNICの対応を設定します。
初期状態ではLAN側からしか管理画面に到達できないので注意。物理マシンなら設定用端末をつなぐなり、仮想環境ならうまいことやってください。デフォルトのログイン情報はadmin/pfsense。DHCPが動いているので、指定されたGWにhttpsで接続すればログイン画面が表示されます。
今回は擬似的にインターネット接続を提供するPPPoEサーバを構築するのでこのpfsenseはNATしません。また、LAN側は検証環境なのでWAN側から設定画面に到達できるようにします。
FirewallのWANインタフェースのタブを開いて新しいルールを追加。WANインタフェースに対してpass any to anyで全通しにします。それからNATの設定画面のOutboundタブでManual Outbound NATに変更してSAVE、自動生成されたルールは消せないので各ルールの設定画面からDo not NATを設定しておきます。これでNATしないただのルータになりました。
次にLAN側のDHCPを無効にします。今回はLAN側のEthernet直接接続は考慮しません。
次、PPPoEの設定。ServicesからPPPoE Serverを選択して設定を追加。EnableにしてLANインタフェースを選択、subnetは適当に(今回は24)、User数も適当に(例えば5とか)、サーバアドレスに192.168.250.254、リモートサブネットに192.168.250.0を指定します。サーバアドレスはリモートサブネットから外しておくのが一般的みたいですが、じゃあどのアドレスにしようかっていうのがよくわからないので、今回は同じサブネットにします。接続ユーザがサブネットに満たないので実害はありません。最後にユーザを作成します。適当なIDとパスワード、固定アドレスを振りたければIPアドレスを指定します。んで、Save。
これでクライアントはPPPoEで接続できるようになります。PPPoEで接続するとGWがpfsenseを向くのであとはpfsenseのルーティングを適切に設定してください。上でNAT設定を外しましたが、Automatic outbound NATに設定しておけば、NATで外に出ていけます。今回の検証はPPPoEサーバは擬似インターネット接続のためなので、ここでNATせずフラットに他のプライベートネットワークと通信できるようにしました。
それからPPPoE接続に対して独立のfirewallルールが作成されるのでfirewallのPPPoE Serverタブを適切に設定してください。基本的にはpass any to anyにしておいて、たとえば25/tcpをブロックしてみるとか。
pfsenseはロードバランサ(配下のサーバの負荷分散)ができるので、Vyattaで作ったWAN冗長化と組み合わせると貧者のBIGIPがつくれそうですね。管理性が悪いか。。。