カーネルモードPPPoE

MN7310 は外から来たパケットをすべて Linux サーバに送っていましたが,これではルータの意味がありません.そこで,MN7310 にはブリッジモードになってもらって,Linux サーバに PPPoE を処理させることにしました.

普通の人は pppd + rp-pppoe を使っているようですが,そのままでもおもしろくないですし,よりパフォーマンスを求めて,カーネルモード pppoe のみで運用してみようと思います.pppoe 導入に当たってはぷりんこ研究所を参考にしました.

カーネル再構築

適当なところから Linux カーネルのソースをとってきます(ディストリビューション付属のものでも全然かまいません).以下のオプションを有効にします.私は場所が分からず往生した(特に,CONFIG_N_HDLC)ので場所も書いておきます.:-)

 
[Network device support]
CONFIG_PPP=m or CONFIG_PPP=y
CONFIG_PPP_ASYNC=m or CONFIG_PPP_ASYNC=y
CONFIG_PPP_SYNC_TTY=m or CONFIG_PPP_SYNC_TTY=y
CONFIG_PPP_DEFLATE=m or CONFIG_PPP_DEFLATE=y
CONFIG_PPP_BSDCOMP=m or CONFIG_PPP_BSDCOMP=y
CONFIG_PPPOE=m or CONFIG_PPPOE=y
[Character devices]
CONFIG_UNIX98_PTYS=y
[Non-standard serial port support]
CONFIG_N_HDLC=m or CONFIG_N_HDLC=y

適当に再構築して再起動します.

ppp(pppd)のインストール

ppp のソースとパッチをとってきてインストールします.なお,インストール方法はぷりんこ研究所を参考にしています.

 
ソースゲット
# cd /usr/local/src
# wget http://www.princo.org/contents/kpppoe/ppp-2.4.1.tar.gz
# wget http://www.princo.org/contents/kpppoe/ppp-2.4.1-pppoe.patch4.txt -O ppp-2.4.1-pppoe.patch4
# tar xfvz ppp-2.4.1.tar.gz
コンパイル&インストール
# patch -Np1 -i /patch/put/dir/ppp-2.4.1-pppoe.patch4
# ./configure
# make
# make install

設定

設定はいろいろ苦労しました.当サーバの接続先はフレッツですが,他のキャリアでもうまくいくと思います.

/etc/ppp/options : pppd の設定ファイル
plugin pppoe.so                       # カーネルモード PPPoE をつかう
passive                               # LCP パケットを送って応答を待つ
defaultroute                          # PPP デバイスをデフォルトのルートにします
name "hogehoge"                       # ISP からのユーザアカウント
                                      # という情報が多かったですが
                                      # ユーザ名と@ISPのサーバ名で書かないとうまくいきませんでした
                                      # user234@hoge.ne.jp みたいな感じで
lcp-echo-interval 20                  # LCP エコーの要求パケットを送る前の待ち時間(秒)
lcp-echo-failure 3                    # LCP エコー要求パケットを送る回数
maxfail 0                             # 接続を無限回再試行する
persist                               # 接続中切断されても再接続する

以下のファイルに関しても様々な情報が多くて,苦労しましたが,動くようになりました.また,pppd は chap-secrets と pap-secrets の両方があると,chap-secrets で接続しようとするみたいです.私のプロバイダは chap で接続できましたが,pap でないといけないところは chap-secrets を削除しなければなりません.

/etc/ppp/chap-secrets : ISP への接続設定ファイル
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
# ユーザ名(ユーザ名@サーバ) サーバ パスワード IP の順で記述します.
# ユーザ名はダブルクォーテーションでくくり,サーバ名はアスタリスクにしておきます.
# パスワードもダブルクォーテーションでくくり,IP は非固定なら,アスタリスクにしておきます
"user234@hoge.ne.jp" * "hugahoge" *
/etc/ppp/pap-secrets : ISP への接続設定ファイル
# Secrets for authentication using PAP
# client        server  secret                  IP addresses
# ユーザ名(ユーザ名@サーバ) サーバ パスワード IP の順で記述します.
# ユーザ名はダブルクォーテーションでくくり,サーバ名はアスタリスクにしておきます.
# パスワードもダブルクォーテーションでくくり,IP は非固定なら,アスタリスクにしておきます
"user234@hoge.ne.jp" * "hugahoge" *

設定が終わったら,試験接続をしてみるといいでしょう./usr/sbin/pppd eth0 とかしてみれば,pppd が設定に従ってがんばります.もし成功すれば /var/log/message や,ifconfig をしてみると分かると思います.ADSL 回線の接続確立には結構時間がかかるようです.

起動スクリプト

起動スクリプト

ここで注意ですが,起動の優先順位をネットワークより後にして,シャットダウンの優先順位をネットワークよりも先にしてください.