- カーネルを再構築する
- pppにパッチを当てインストールする
- ppp設定ファイルを作成する
- テスト接続
手順1 カーネルを再構築する
カーネルの入手
http://www.kernel.org/ から kernel2.4.19をダウンロードします。
# cd /usr/local/src/
# wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.19.tar.gz
# cd /usr/src
# tar xfvz /usr/local/src/linux-2.4.19.tar.gz
.configを準備
.config ファイルはカーネルをコンパイルする際の設定ファイルです。
現在のカーネルが使っているCPUがi686ならば、
(CPUの情報は # uname -a で確認)
私がコンパイル時に使った
.configをそのまま使えます。
# cd /usr/src/linux-2.4.19
# wget http://princo.org/tips/kpppoe-files/kpppoe.dotconf.txt -O ./.config
そのままではコンパイル出来ないので、
一度 make menuconfig を実行し、そのまま何もしないで終了します。終了時に
設定を保存してください。
# make menuconfig
i686以外のCPUの場合は、カーネルソースをRPMからインストールし、
.configファイルを手動で設定する必要があります。
カーネルソースをインストールし、make menuconfigで
下記項目を設定します。
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
CONFIG_N_HDLC=m or CONFIG_N_HDLC=y
CONFIG_UNIX98_PTYS=y
#make menuconfig(#make config or #make xconfig)
が完了したら、 .configファイルをKernel-2.4.19のディレクトリにコピーしてください。
# cp .config /usr/src/linux-2.4.19
そのままではコンパイル出来ないので、
一度 make menuconfig を実行し、そのまま何もしないで終了します。終了時に
設定を保存してください。
# make menuconfig
カーネルをコンパイルする
準備ができたらコンパイルです。まず、依存性テストとごみ掃除を行います。
# make dep
# make clean
現在インストールされているカーネルとバージョンが混在出来るように
カーネルリビジョンを書き加えます。
# vi Makefile
フィアル先頭部分の EXTRAVERSION に書き加えます。
下記のように記述すると、カーネルバージョンは
Kernel-2.4.19-PPPoE1.0
として構築されます。
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 19
EXTRAVERSION = -PPPoE1.0
コンパイルを開始します。
かなり時間がかかるので気長に・・・
bzImageを作成
# make bzImage
モジュールをコンパイル
# make modules
モジュールをインストール。"_"の付け忘れに注意。
# make modules_install
initrd イメージの作成。
リビジョンの部分がMakefileと同じになるように注意。
# mkinitrd /boot/initrd-2.4.19-PPPoE1.0.img 2.4.19-PPPoE1.0
インストール!
# make install
ブートローダー(lilo)の設定
lilo.confを設定します。
GRUBの人は別の資料を参考にしてください。
# vi /etc/lilo.conf
赤字部分が変更/追加した部分です。
prompt
timeout=50
default=PPPoE
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
image=/boot/vmlinuz-2.4.18-3
label=linux-old
initrd=/boot/initrd-2.4.18-3.img
read-only
root=/dev/hda3
image=/boot/vmlinuz-2.4.19-PPPoE1.0
label=PPPoE
initrd=/boot/initrd-2.4.19-PPPoE1.0.img
read-only
root=/dev/hda3
ブートローダを反映
# lilo -v
実行後に
Writing boot sector. と表示されていればOKです。
その後、リブートしてみて、ちゃんと起動されればカーネルの再構築は完了です。
手順2 pppにパッチを当てインストールする
RPMパッケージのアンインストール
rpmでpppがインストールされていると、ソースでのインストールに
失敗してしまうので、まずアンインストールします。
# rpm -q ppp
上記コマンドでrpmパッケージがインストールされているかを調べることができます。
インストールされてる場合は、下記コマンドでアンインストールします。
# rpm -e ppp
rp-pppoe等がインストールされている場合は、同様の方法で
rp-pppoe等をアンインストールし、最後にpppをアンインストールして下さい。
pppの入手
ppp-2.4.1のソースパッケージとpppoeパッチを入手
# cd /usr/local/src
# wget http://princo.org/tips/kpppoe-files/ppp-2.4.1.tar.gz
# wget http://princo.org/tips/kpppoe-files/ppp-2.4.1-pppoe.patch4.txt -O ppp-2.4.1-pppoe.patch4
# tar xfvz ppp-2.4.1.tar.gz
pppのインストール
パッチをあててインストール
# patch -Np1 -i /patch/put/dir/ppp-2.4.1-pppoe.patch4
# ./configure
# make
# make install
手順3 ppp設定ファイルを作成する
PPPoE接続に必要な設定を実施します。
ここでは、フレッツスクウェアに接続する設定になっています。
/etc/ppp/chap-secrets ファイル
"guest@flets" * "guest"
/etc/ppp/pap-secrets ファイル
"guest@flets" * "guest"
/etc/ppp/options ファイル
plugin pppoe.so
defaultroute
name "guest@flets"
lcp-echo-interval 20
lcp-echo-failure 3
usepeerdns
persist
手順4 テスト接続
ひと通りの設定が終わったので、テスト接続してみます。
ここでは、
eth0 にFlets側の回線が繋がっていると仮定します。
/var/log/messages を見ながら行うのが良いでしょう。
# pppd eth0
正常に接続されれば、/var/log/messages に下記のようなログが吐かれるはずです。
Sep 25 00:24:33 gw pppd[843]: Plugin pppoe.so loaded.
Sep 25 00:24:33 gw pppd[843]: PPPoE Plugin Initialized
Sep 25 00:24:34 gw pppd[866]: pppd 2.4.1 started by root, uid 0
Sep 25 00:24:34 gw pppd[866]: Sending PADI
Sep 25 00:24:34 gw pppd[866]: HOST_UNIQ successful match
Sep 25 00:24:34 gw pppd[866]: HOST_UNIQ successful match
Sep 25 00:24:34 gw pppd[866]: Got connection: 1836
Sep 25 00:24:34 gw pppd[866]: Connecting PPPoE socket: 00:00:00:00:00:00 3618 eth0 0x807cae0
Sep 25 00:24:34 gw pppd[866]: Using interface ppp0
Sep 25 00:24:34 gw pppd[866]: Connect: ppp0 <--> eth0
Sep 25 00:24:34 gw pppd[866]: Couldn't increase MTU to 1500.
Sep 25 00:24:34 gw pppd[866]: Couldn't increase MRU to 1500
Sep 25 00:24:34 gw pppd[866]: Couldn't increase MRU to 1500
Sep 25 00:24:34 gw pppd[866]: local IP address 3.2.1.10
Sep 25 00:24:34 gw pppd[866]: remote IP address 3.2.1.1
Sep 25 00:24:34 gw pppd[866]: primary DNS address 1.2.3.4
Sep 25 00:24:34 gw pppd[866]: secondary DNS address 5.6.7.8
下記コマンドを実行して、インターフェイスが存在すれば成功です。
# ifconfig
補足
Path MTU Discovery Black Hole の問題と対処
pppoeルーターでIPマスカレードを行っている場合、
ルーター以下のクライアントPCから外部に接続した時に
特定なホストにだけ接続出来ない状態に陥る事があります。
これは、クライアントPCのMTU値がルーターのMTU値と違っている為
発生する問題です。大規模ネットワークでは、全てのクライアントPCの
MTUを設定し直す 事はほぼ不可能です。
この場合、netfilterの設定(マスカレード機能)で
通過するパケットのMTUを修正しながら Forwardする事が出来ます。
# iptables -A FORWARD \
-p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
追記
2006/10/27時点のパフォーマンス測定結果
測定環境:
- 回線: DTI via TEPCOひかりホームプラン(PPPoE) 100Mbps
- Software: Linux 2.4 + ppp-2.4.1-pppoe.pl4
- CPU: Pentium2 400Mhz
- MTU値: ppp0(eth0)=1492 eth1=1492
- NIC: e100 * 2
- 方法: DMZホスト2台から3セッションづつ合計6セッションで巨大なファイルをwget(http)する
測定結果:
- 平均速度 12.20MB/s ≒ 97.6Mbps
- 最高速度 12.35MB/s ≒ 98.8Mbps
- 平均CPU使用率 47.53%
- 最近の回線はアホみたいに速い.