LS-GLでPPTPサーバーを構築しようとしてppp_mppeのロード
# insmod ppp_mppe.ko
これがエラー。モジュール ppp_mppe.koがないのに気づく。
つまり、カーネルをコンパイルして、モジュールを作る必要がある。
ちなみにLS-GL debian lenny のカーネルバージョンは、2.6.29 なのだが、ソースは。2.6.26しかないので、2.6.26 ベースでブートイメージとmodulesを作ってみた。
参考にしたページ
http://d.hatena.ne.jp/irasya/20100111/1263213868
http://k355566687.blogspot.com/2010/04/blog-post_23.html
パッケージ一覧情報の更新をする
# aptitude update
必要なツール、ライブラリをインストール
# aptitude install build-essential bzip2 libncurses5-dev git-core fakeroot initramfs-tools kernel-package module-assistant devscripts uboot-mkimage devio
カーネルソースの入手
# aptitude install linux-tree-2.6.26
ソースのビルド
# cd /usr/src/linux-source-2.6.26
debian用のパッチをあてる
# /usr/src/kernel-patches/all/2.6.26/apply/debian
....
(+) OK bugfix/all/nfs-aio-fix-use-after-free.patch
(+) OK bugfix/all/md-fix-bug-with-re-adding-of-partially-recovered-device.patch
(+) OK bugfix/all/md-fix-bug-with-re-adding-of-partially-recovered-device-regression.patch
(+) OK bugfix/x86/flush-tlb-if-pgd-entry-is-changed-in-pae-mode.patch
(+) OK bugfix/all/ext3-skip-orphan-cleanup-on-rocompat-fs.patch
(+) OK bugfix/all/cciss-fix-lost-command-issue.patch
(+) OK bugfix/all/cifs-check-that-last-search-entry-resume-key-is-valid.patch
(+) OK bugfix/all/cifs-fix-saving-of-resume-key-before-CIFSFindNext.patch
(+) OK bugfix/all/vm-fix-vm_pgoff-wrap-in-upward-expansion-regression.patch
--> 27 fully applied.
/bootパーティションをマウント
# mount -t ext2 /dev/sda1 /boot
オリジナルのconfigファイルをコピー。
# cp arch/arm/configs/orion5x_defconfig .config
Makefileを変更、EXTRAVERSIONに -cocoro.ppp を追加
EXTRAVERSION = -cocoro.ppp
カーネルの設定
# make oldconfig
... デフォルトでずっとENTER、以下だけ変える。
Buffalo Linkstation Pro/Live (MACH_LINKSTATION_PRO) [N/y/?] (NEW) Y
... 後も終わるまでずっとENTER
使用するモジュールの設定
# make menuconfig
[Device Drivers]->[Network device support]にある
<M> PPP (point-to-point protocol) support
として
[*] PPP multilink support (EXPERIMENTAL) (NEW)
[*] PPP filtering (NEW)
<M> PPP support for async serial ports (NEW)
<M> PPP support for sync tty ports (NEW)
<M> PPP Deflate compression (NEW)
<M> PPP BSD-Compress compression (NEW)
<M> PPP MPPE compression (encryption) (EXPERIMENTAL) (NEW)
<M> PPP over Ethernet (EXPERIMENTAL) (NEW)
<M> PPP over L2TP (EXPERIMENTAL) (NEW)
他はそのまま。
コンパイル作業、(devioの>はリダイレクトではないらしい。)
# make clean
# make zImage; make modules; make modules_install
# devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811031,4'
# cat foo arch/arm/boot/zImage > zImage
# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n 'Linux-2.6.26-cocoro-ppp' -d zImage /boot/uImage-2.6.26-cocoro-ppp
Image Name: Linux-2.6.26-cocoro-ppp
Created: Fri Nov 11 22:38:09 2011
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1789232 Bytes = 1747.30 kB = 1.71 MB
Load Address: 0x00008000
Entry Point: 0x00008000
ブートパーティションに置く
/boot/uImageはシンボリックリンクなので一度削除して張りなおす。
# cd /boot
# rm uImage
# ln -s uImage-2.6.26-cocoro-ppp uImage
終わったら、再起動。
# shutdown -r now
uname でカーネルバージョンを確認
# uname -a
Linux LS-GL 2.6.26-cocoro.ppp #1 PREEMPT Fri Nov 11 01:03:15 JST 2011 armv5tel GNU/Linux
lsmodでロードされているか確認
#lsmod
Module Size Used by
ppp_synctty 7392 0
ppp_async 8960 0
ppp_deflate 4928 0
ppp_generic 23572 3 ppp_synctty,ppp_async,ppp_deflate
slhc 5504 1 ppp_generic
pcbc 3584 0
ecb 2752 0
crypto_blkcipher 15972 2 pcbc,ecb
crypto_algapi 14304 3 pcbc,ecb,crypto_blkcipher
なんか逆にモジュールが足りなくなった。その上、ppp_mppeがロードされてない。
pcbc, ecbはロードされてんだけどなあ。
tunやbridgeがないのが原因か?再度 menuconfig で修正してカーネルビルド
# cd /usr/src/linux-source-2.6.26
#make menuconfig
以下の設定を画面から選択
Networking --->
Networking options --->
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure) (FIB_HASH)
[*] IP: policy routing
[*] IP: equal cost multipath
....
<M> IP: tunneling
<M> IP: GRE tunnels over IP
[*] IP: broadcast GRE over IP
....
<M> IP: AH transformation
<M> IP: ESP transformation
<M> IP: IPComp transformation
<M> IP: IPsec transport mode
<M> IP: IPsec tunnel mode
<M> IP: IPsec BEET mode
ついでに、iptablesのフィルタ関係を追加。
Networking --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
[*] Bridged IP/ARP packets filtering
Core Netfilter Configuration --->
以下選べるの全部チェック
IP: Netfilter Configuration --->
以下選べるの全部チェック
Bridge: Netfilter Configuration --->
以下選べるの全部チェック
ブリッジ使う前提で入れる。
Networking --->
Networking options --->
<M> 802.1d Ethernet Bridging
Device Drivers --->
Network device support --->
<M> Universal TUN/TAP device driver support
再度ビルド作業
# make zImage; make modules; make modules_install
# devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811031,4'
# cat foo arch/arm/boot/zImage > zImage
/bootをマウントして、uImageを置き換え
# mount -t ext2 /dev/sda1 /boot
# mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n 'Linux-2.6.26-cocoro-ppp' -d zImage /boot/uImage-2.6.26-cocoro-ppp
# cd /boot
# rm uImage
# ln -s uImage-2.6.26-cocoro-ppp uImage
再起動して再度試す。
# shutdown -r now
ロードされたモジュールの確認
# lsmod
Module Size Used by
ppp_synctty 7392 0
ppp_async 8960 0
ppp_deflate 4928 0
ppp_generic 23572 3 ppp_synctty,ppp_async,ppp_deflate
slhc 5504 1 ppp_generic
pcbc 3584 0
ecb 2752 0
crypto_blkcipher 15972 2 pcbc,ecb
crypto_algapi 14304 3 pcbc,ecb,crypto_blkcipher
tun 9764 0
bridge 51968 0
状況変わらず、他が原因か・・・試しに depmod を実行
# depmod -a
# modprobe ppp_mppe
FATAL: Error inserting ppp_mppe (/lib/modules/2.6.26-cocoro.ppp/kernel/drivers/net/ppp_mppe.ko): No such device
他に原因があるに違いない・・・ググって、以下のモジュールをロードするとうまくいった。
# modprobe crypto_algapi
# modprobe arc4
# modprobe sha1
# modprobe cryptomgr
# modprobe cbc
# modprobe pcbc
# modprobe ecb
それで、結局、/etc/modulesは以下の内容へ変更
----------------------------------------------------------------------
# Parameters can be specified after the module name.
bridge
tun
crypto_algapi
arc4
sha1
cryptomgr
cbc
pcbc
ecb
ppp_generic
ppp_deflate
ppp_async
ppp_mppe
ppp_synctty
alias ppp-compress-18 ppp_mppe
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
----------------------------------------------------------------------
再起動して、確認
# lsmod
Module Size Used by
ppp_synctty 7392 0
ppp_mppe 7044 0
ppp_async 8960 0
ppp_deflate 4928 0
ppp_generic 23572 4 ppp_synctty,ppp_mppe,ppp_async,ppp_deflate
slhc 5504 1 ppp_generic
ecb 2752 0
pcbc 3584 0
cbc 3392 0
crypto_blkcipher 15972 3 ecb,pcbc,cbc
cryptomgr 2720 0
sha1_generic 2336 0
arc4 1696 0
crypto_algapi 14304 7 ecb,pcbc,cbc,crypto_blkcipher,cryptomgr,sha1_generic,arc4
tun 9764 0
bridge 51968 0
結論)
ppp_mppeがロードできるようになるには、暗号関係(cryptomgr,sha1_generic,crypto_algapi)をロードさせることが必要。bridge やtunは関係なし。
また、後で気づいたのが、使用しているADSLモデム Aterm WD701CVは、VPNパススルーとうたっているが、GRE(プロコトル番号=47)のNAT対応がされていなかった。これじゃ外部からアクセスできない。
2012/04/30 しかし、GREのNATが出来なくても、高度な設定で、DMZホストの登録機能があった。以下の設定をAterm WD701CVで設定
・DMZホスト機能=使用する
・DMZホストの配置=LAN側
・DMZホストのIPアドレス=Linkstation のIPアドレス
後は、ポートマッピングで、TCP / 1723 をLinkstation のIPアドレスに仕向けるだけで
OKでした。