pfSenseで無料の最強ファイヤーウォールを作ろう! - PPPoEサーバ

PPPoEサーバとは?

 フレッツなどでは、ISPに接続するためにPPPoEという接続方式を使っています。ブロードバンドルータはPPPoEクライアントの機能を持っています。このPPPoEクライアントを接続するためにPPPoEサーバが必要です。

PPPoEサーバを何に使うの?

 PPPoEサーバは、通常接続事業者(フレッツを提供しているNTT東西とか)の設備なので、一般の利用者がこのPPPoEサーバ機能を必要とすることはほぼ皆無です。
 使い道としては、ブロードバンドルータの動作確認や、VPNを組むときの接続試験などに使えます。PPPoEを使ってインターネットVPNを組む場合、試験用にプロバイダのPPPoEアカウントが複数必要です。しかし、PPPoEサーバを自分で立てることで、試験のためにプロバイダと契約してアカウントを利用する必要がなくなります。
 PPPoEサーバはLinuxなどを使って自作することもできますが、pfSenseを利用すれば結構簡単に立てれます。

pfSenseのPPPoE機能

 pfsenseはデフォルトでこのPPPoEサーバ機能を持っています。設定も簡単です。
  • pfSenseでPPPoEアカウントを管理する
 PPPoEのユーザが少なければ、pfSenseのローカルでユーザ管理ができます。
  • RADIUSでPPPoEアカウントを管理する
 本格的にPPPoEサーバを立てるのであれば、RADIUSとの連携もできます。

設定方法


Service>PPPoE Serverから設定を始めます。まずは「Configration」タブから。
  • Enable PPPoE server
 デフォルトはOffになってます。Enableにしてください。
  • Interface
 PPPoEの接続を受けるインターフェースを選びます。ひとつだけしか選択できないようです。
  • Subnet netmask
 PPPoE接続に利用するサブネットの、サブネットマスクを設定します。同時接続を何セッション受けるかに依存します。通常は24で十分でしょう。
  • Number of PPPoE Users
 PPPoE接続を最大何セッション接続できるかを設定します。最大は254です。
  • Server address
 PPPoEサーバのIPアドレスです。pfSenseに割り当てられ、PPPoEクライアントからのゲートウェイになるアドレスです。Remote address rangeの範囲になっている必要があります。
  • Remote address range
 PPPoE接続に利用するサブネットのネットワークアドレスです。
  • 注意点
 Subnet netmask・Server address・Remote address rangeがひとつのサブネットマスクに納まるように注意してください。

Saveしたら、Userタブに移動します。PPPoE認証用のアカウントを設定していきます。

最初はユーザはいないので、「+」をクリックしてユーザを追加します。


ユーザを追加します。
  • Username
 PPPoE認証用のユーザアカウントです。
  • Password
 PPPoE認証用のパスワードです。確認のために同じパスワードを二回入力してください。
  • IP address
 PPPoEクライアントに払いだされるアドレスです。空欄の場合、設定したサブネットから適当なアドレスが払い出されます。

終わったらSaveしてください。この段階で、PPPoEクライアントからは接続できるようになります。しかし、まだ通信はできません。Firewallのルールで通信が許可されていないからです。FirewallのRuleで通信を許可してあげることでPPPoEクライアントが通信できるようになります。

「Firewall」→「Rule」を選んでください。

PPPoEを有効にすると、「PPPoE VPN」というタブが増えています。ここでPPPoEクライアントの通信を許可してあげます。


とりあえず全通信を許可してみたところ。必要な通信だけ許可するようにしてください。

接続確認

 接続されているPPPoEクライアントをGUIから確認する方法は見つかりませんでした。
 CLIからifconfigを入力するとngインターフェースに接続されているのが確認できます。

結論、pfSenseのPPPoEサーバ機能は使えるか?

  • テスト用や勉強用には十分。
  • 多分、実運用で使うことはないので、安定してなくても心配ない。
  • 使える、と言いたいが、使う人が限定されると思うので、「必要な人には使える」としておこう :D