作成開始 : 平成19年01月07日(土)  最終更新日 : 平成23年09月29日(木)

PPPoEサーバーを試す


[動機]

お客様のサーバー機をハウジングするにあたり、ルータやVPNした時のスループットが体感的に実用できるかどうか検証することになった。
そのため、以下のような構成で実験をすることにしたが、PPPoEで認証する必要があるため「FreeBSDでPPPoEサーバー」を試してみた。
かなりハマったので忘れないようまとめておくことにした。

実験環境


[参考にしたサイト] ・・・・・ お世話になりました。

The FreeBSD Project (Japan)
2002/04/04 三田(2) 「FreeBSD で PPPoE サーバ」 ・・・・ほそかわたつみ さんの 不定期性写真日記
粉骨砕身の覚悟でがんばります[2003年08月30日] ・・・・・ pqrs.org
サーバ構築 ・・・・・・ Eudaemonia

[環境の準備と期待される成果]

1.実験環境の構成
まずは、PPPoEで認証を行いIPアドレスが付与されるかどうか検証するため下記環境を準備した。
本来であれば、PPPoEサーバーはNICを2枚差ししてブロードバント・ルータにするかLAN内の上部ネットワークへのルータとして使うところであるが、道具が足りないのでこの構成にした。
今回PPPoEサーバーの実験をしたPCは、わが家のLANに接続されているものであるが、LAN内に接続したままだとClientからPPPoE接続しても「認証失敗(エラー:691)」や「応答なし(エラー:678)」になってしまう。Etherealでクライアントのパケットキャプチャしてみたが、クライアントから接続後、サーバーからもクライアントに応答を求めているが、そのパケットが到達できないようだった。なので、上記の構成にしている。(これ発見にずいぶんハマった)
2.期待する成果
(1)PPPoEクライアントから指定したユーザ名、パスワードが認証されること。
(2)PPPoEクライアントに"接続時に指定したユーザ名、パスワードに該当する"IPアドレスが付与されること。
(3)PPPoEサーバー、PPPoEクライアント間でのPingが通ること。
(4)PPPoEクライアントからSSHでPPPoEサーバーにログインできること。
できれば、PPPoEクライアントを複数接続して色々確認したいところではある。

[各機器の設定]

作業は全てスーパー・ユーザで行いました。

1.PPPoEサーバー機

(1) カーネル再構築
PPPoEを利用するためには次をコンフィグレーション・ファイルに記述してカーネルの再構築が要ります。
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
NICを2枚差ししてルーティングなんかする時は IPFIREWALL とかも要るでしょうね。とりあえず、今回の目的では上記のみ記述して再構築しました。 
(平成19年01月10日 追記)
もしかしたらカーネル再構築は要らないかもしれません。色々やってしまったので・・・・・
とりあえず、(2)〜(5)まで試してみて、ダメだったらカーネル再構築した方がいいと思います。
(2) /etc/ppp/ppp.conf
ディフォルトで存在しているのは「カーネルPPP」のconfファイルでした。今回は「ユーザPPP」を使います。そこで、 /usr/share/examples/ppp/ppp.conf.sample をコピーしました。
v200# cd /etc/ppp
v200# cp /usr/share/examples/ppp/ppp.conf.sample ./ppp.conf
ディフォルトの ppp.conf.sample
vi で修正・追記したのは「default:」と「pppoe-in:」のセクションです。
関係無いところもあるかもしれませんが動いた最終のものをそのまま記載しておきます。
default:
 set log Phase Chat LCP IPCP CCP tun command
 ident FreeBSD userland PPP
 set device /dev/cuad1
 set speed 115200
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT \
      OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
※default: は太文字だけ追加しました。
pppoe-in:
 set device PPPoE:fxp0
 enable lqr echo
 set mru 1492
 set mtu 1492
 allow mode direct     # Only for use on server-side
 set speed sync
 enable lqr          # Enable LQR and proxy-arp
 enable pap chap      # Force client authentication
 disable deflate
 disable pred1
 #set ifaddr 10.0.0.1 10.0.0.100-10.0.0.199 255.255.255.0 # Hand out up to 100 IP numbers
 accept dns         # Allow DNS negotiation
 accept chap
 accept pap
※ enable passwdauth があると /etc/passwd ファイルに登録のアカウント認証するようです。
(3) /etc/ppp/ppp.secret
今回はアカウント情報を設定ファイルで認証したいのでこれを用意しました。
/usr/share/examples/ppp/ppp.secret.sample をコピーしました。
v200# cd /etc/ppp
v200# cp /usr/share/examples/ppp/ppp.secret.sample ./ppp.secret
ディフォルトの ppp.secret.sample
今回は、認証OKならIPアドレスを配布してほしいので次を追加しました。
test    tast0107    192.168.1.200
(4) /etc/rc.conf
vi で下記を追加しました。
pppoed_enable="YES"
pppoed_interface="fxp0"
pppoed_flags="-l pppoe-in"
そして、再起動しましょう。起動画面に「Starting pppoed」があり、次のようなプロセスがあればOKです。
(平成19年02月01日 追記)
PPPoEサーバーにPPPoEで接続したClient相互間で通信するには、/etc/rc.conf に次の記述が必要です。
これしないと、Client間ではpingすら通りません。

gateway_enable="YES"

これにより、パケットをフォワードできるようになります。
(5) PPPoEログの設定
接続テストに備えて、ログをファイルに出力するように設定しました。
vi で /etc/syslog.conf に次を追加しました。
!pppoed
*.* /var/log/pppoed.log
vi で /etc/newsyslog.conf に次を追加しました。
/var/log/pppoed.log 640 3 100 * Z
そして、再起動しましょう。/var/log/pppoed.log が作成されていればOKです。

2.PPPoEクライアント機

本来はブロードバンド・ルータがあればいいのですが、無いしFreeBSDでルータにしたり1FD LinuxでPPPoEルータにすると時間かかるので、手っ取り早く Windows XP の PPPoE接続を使うことにしました。
スタート→マイネットワーク→プロパティ→ネットワーク接続→新しい接続 とするとウイザードが始まります。

 ↑
次へ をクリックします。

 ↑
「インターネットに接続する」をチェックし 次へ をクリックします。

 ↑
「接続を手動でセットアップする」をチェックし 次へ をクリックします。

 ↑
「ユーザー名とパスワードが必要な広帯域接続を使用して接続する」をチェックし 次へ をクリックします。

 ↑
適当な名前を入力し 次へ をクリックします。

 ↑
/etc/ppp.secret に設定したユーザ名とパスワードを入力して 次へ クリックします。

 ↑
完了 をクリックします。

 ↑
上のようになりますが、ここではとりあえず キャンセル しときましょう。するとデスクトップにショートカットができネットワーク接続に広帯域の接続が設定されます。

[接続テスト]

テストに当たっては、やみくもにやっても何がどうなっているのかわからないので、先に設定した pppoed.log を表示しながらやるといいでしょう。root でログインし tail -f /var/log/pppoed.log とすればリアルタイムでログを見られます。(停止は Ctrl + C です)
では、接続してみましょう。
デスクトップのショートカットをクリックすると次を表示します。

 ↑
ここで「接続」をクリックします。
 接続の状態を表示します。

 ↑
うまく接続されると上のようなログ出力します。20:15:32 のが接続ログです。
(平成19年02月01日 追記)
実際に動作を確認するには、pppoed.log よりも fork される ppp.log の方がいいです。
接続のプロセスを詳細に見ることができます。動作がおかしい時の手がかりになります。
PPPoEクライアントのタスクバーにネットワーク接続のアイコンが現れます。
また、ネットワーク接続は次のように「接続」になっていますね。
どのようになったか、ipconfig /all で見てみましょう。

 ↑
PPP adapter が設定されていますね。うまくいきました。

 ↑
ping も通っていますね。

 ↑
SSH での接続もOKです。

[感想]

とりあえず、接続の確認はできました。今後はこれをもとに実際の検証環境で微調整しながら作業したいと思います。
その記録は別途ドキュメントとして残したいと思います。
ステップとしては・・・・

1.この環境で複数のPPPoEクライアントを接続し、相互に通信してみる。
2.実際の検証環境で各VPN対応ルータに設定した情報で認証でき、ネットワーク情報が取得できることを確認する。
3.VPN接続ができるか確認する。
4.クライアントPCからVPNを通して、基幹サーバーにアクセスできるか確認するとともに体感速度を判定する。

(平成19年02月02日 追記)

PPPoEサーバからもらうアドレスは端末型 (10.0.0.129/32, 10.0.0.130/32) です。
通信路は IPSecでトンネルを確立しお互いのローカル同志で通信します。

1月の始め頃から上記の環境でテストをしてきました。ルータのconfigは構成図をこちらから提示してルータのベンダさん(オムロン)に書いてもらいました。
PPPoEサーバー側の調整や私のスキルが低いせいもあって、苦労した結果本日(2月2日)上記の通信が確認できました。
ここでの目的は両端末での通信が可能であることです。よかったぁー
うまく、トンネルが構成されているようです。これで一歩前進です。

平成23年09月29日(木) 追記

お客様のルータが更改なるのに伴い同環境を構築してみました。FreeBSD 6.1 RELEASE をダウンロードして インストールCDを作成しインストールしました。
以前までの設定だと、約3分ほどで PPPoEセッションがサーバーから切断されます。
/etc/ppp/ppp.conf の default セクションに set timeout 0 を追加すると切断されないでセッションを保持するようになりました。

戻る

サイトトップへ