QNAP TS412でVPN(IPsec)をやろうとして挫折した話[追記あり]
前、QNAPのNASを持っていました。やった事を、次のページにまとめています。
これ以外でも、機能を拡張しようと奮闘していましたが、諦めた事があります。
- QNAP TS-412でチャレンジした事 : プラスα空間 (2013年8月14日)
その頃(約2年前)に挑戦していた事を掘り起こしてみたいと思います。なお、以下の内容は途中で投げ出してしまったため、不完全です。
[amazonjs asin="B00VW99HM0" locale="JP"]IPSecサーバにする
QNAP TS-412には、PPTPとOpenVPNの、2種類のVPNサーバ機能を持っています。PTPはiOSでサポートされていますが、セキュリティの問題から、使用が推奨されていません。
VPNとしては、PPTP, OpenVPNの他、L2TP/IPsecが在ります。
iOSでPPTPとOpenVPNが使えないとすると、TS-412にL2TP/IPSecを載せるしかありません。
strongSwanのインストール
フリーのL2TP/IPSec機能を実現するソフトとして、OpenSwanとStrongSwanがあります。ですが、OpenSwaは、TS-412のipkgとして用意されていません。StrongSwanなら、バージョンは古い物の、用意されていました。
# ipkg list | egrep -i strongswan strongswan - 4.5.3-2 - A IPsec implementation.
理由は忘れてしまったのですが、このバージョンだと上手く行かなかった様です。そのため、当時の最新版の5.0.2をインストールしようとしました。インストールするなら、パッケージ化してインストールした方が、管理が楽です。次の様な手順です。
ソースをダウンロードして来て、ビルドします。次の方法で、strongSwanのパッケージをダウンロードして展開します。
# wget strongswan-5.0.2.tar.gz # tar xvzf strongswan-5.0.2.tar.gz # cd strongswan-5.0.2 # ./configure --prefix=/opt
なお、strongSwanのインストールの仕方は、次のウェブサイトを参考にしていました。
そして、controlファイルを修正して、ipkファイルを作ります。。
# ipkg download strongswan # tar xvzf strongswan.ipk # cd strongswan5_5.0.2-1 # mkdir CONTROL # tar xvzf ../../control.tar.gz # vi control
ipkファイルの作り方は、次の記事をご覧ください。
- QNAPでipkファイルを作る : プラスα空間 (2013年4月4日)
パッケージ化したstrongSwanのインストールが終わったら起動します。その前に、カーネルモジュールを使える様にします。
# mkdir /opt/lib/module # cd /opt/lib/modules # ln -s /lib/modules 2.6.33.2 # depmod -a
起動します。
# ipsec start Starting strongSwan 5.0.2 IPsec [starter]... modprobe: module af_key not found. modprobe: failed to load module af_key no netkey IPsec stack detected modprobe: module ipsec not found. modprobe: failed to load module ipsec no KLIPS IPsec stack detected no known IPsec stack detected, ignoring!
Kernel Modleの、"af_key"と"ipsec"が無いため、通信できないと言われてしまいました。
カーネルモジュールの追加
カーネルモジュールを追加しようとして、カーネルのビルドに挑戦しました。
次のウェブページを参考に、カーネルモジュールをビルドしました。
# /usr/bin/wget --no-check-certificate https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.2.tar.gz
証明書をチェックしないようにするために、"–no-check-certificate"オプションが必要です。
QNAPから、GNUライセンスのソース一式をコピーしてきます。QNAPのトップページから、
→ からダウンロードします。中には、カーネル以外のソース一式も含まれています。
# wget http://downloads.sourceforge.net/project/qosgpl/QNAP%20NAS%20GPL%20Source/GPL_TS-20121119-3.8.0.tar.gz?r=&ts=1365453723&use_mirror=jaist # tar xvzf ../QNAP_GPL_3.6.x_20120220.tar.gz
TS-412用の物が無かったので、TS-410Pの物をコピーしてきました。他の、TS-410U, TS-419P, TS-419Uのコンフィグレーションファイルと比べてみましたが、日付以外は一緒でした。
# cp -p ../../kernel_cfg/TS-410P/linux-2.6.33.2-arm.cfg ./.config
モジュールをリンクしておきます。リブートすると、消えてしまう様です。
# ln -s /opt/lib/libncurses.so /lib/libncurses.so # ln -s /opt/lib/libncurses.so.5 /lib/libncurses.so.5 # ln -s /opt/lib/libncurses.so.5.7 /lib/libncurses.so.5.7 # ln -s /opt/lib/libncursesw.so /lib/libncursesw.so # ln -s /opt/lib/libncursesw.so.5 /lib/libncursesw.so.5 # ln -s /opt/lib/libncursesw.so.7 /lib/libncursesw.so.7
もしくは、LD_LIBRARY_PATHを変更します。
# export LD_LIBRARY_PATH /opt/lib
.configに追加したのは、次の行です。
#
# IPSec
#
CONFIG_SECURITY_NETWORK_XFRM=y
CONFIG_NET_KEY=y
CONFIG_NET_KEY_MIGRATE=y
ビルドの手順を以下にまとめます。
次に、変更した内容を反映させます。
# make oldconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/basic/hash HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/kxgettext.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/lex.zconf.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf scripts/kconfig/conf -o arch/arm/Kconfig .config:1975:warning: override: reassigning to symbol NET_KEY
このディレクトリに、オリジナルのカーネルのコンフィグレーションファイルをコピーしてきます。
メモによると、約6時間かかった様です。
途中で、arm-none-linux-gnueabi-ldが必要とされるので、リンクしておきます。
# ln -s /opt/arm-none-linux-gnueabi/bin/ld /opt/bin/arm-none-linux-gnueabi-ld
これを設定しておかないと、ビルドの途中で、次のエラーになります。
/bin/sh: arm-none-linux-gnueabi-ld: command not found make[2]: *** [fs/autofs/autofs.o] Error 127 make[1]: *** [fs/autofs] Error 2 make: *** [fs] Error 2
いよいよ、モジュールのビルドです。
# make modules
ちなみに、GPL_TS/src/linux-2.6.33.2-armの下でビルドすると、次のエラーになりました。必要なファイルが足りないみたいです。 (追記 2015-06-10 21:13)構造体(struct)ext4_super_blockを参照している名前’s_rsved_gdt_blks_large’, 's_feature_qnap_compat’が違うというエラーです。
CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: `include/generated/mach-types.h' is up to date. CALL scripts/checksyscalls.sh CC [M] fs/ext4/resize.o fs/ext4/resize.c: In function 'verify_group_input': fs/ext4/resize.c:33: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c: In function 'setup_new_qnap_group_blocks': fs/ext4/resize.c:1197: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c: In function 'add_new_qnap_gdb': fs/ext4/resize.c:1489: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c:1493: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c: In function 'reserve_qnap_backup_gdb': fs/ext4/resize.c:1534: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c: In function 'ext4_qnap_group_add': fs/ext4/resize.c:1689: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' fs/ext4/resize.c:1720: error: 'struct ext4_super_block' has no member named 's_feature_qnap_compat' fs/ext4/resize.c:1721: error: 'struct ext4_super_block' has no member named 's_rsved_gdt_blks_large' make[2]: *** [fs/ext4/resize.o] Error 1 make[1]: *** [fs/ext4] Error 2 make: *** [fs] Error 2
ここまで頑張って、手詰まりになりました。
(追記 2015-06-10 21:13) 名前の定義を追加してあげれば良いみたいです。
OpenVPNで、いいんじゃない?
QNAPはOpenVPNサーバとしては機能します。iPhoneからでも、以下の方法でOpenVPNサーバにつなぐ事ができる様です。
(追記 2015-06-10 21:13)
nsbyさんにコメントで教えていただきました。ありがとうございます。次のウェブページ(ディスカッション)に従って、ヘッダファイルを修正すれば良いそうです。
ディスカッション
多分モジュールのコンパイルは以下を参考にするとできると思いますよ
http://www.qnapclub.jp/viewtopic.php?p=1612
の 5. fs/ext4/ext4.hをコンパイルが通らないので一部書き換え
—
#if defined(QNAP_ONLINE_RESIZE_INODE) && !defined(QNAP_SEARCH_FILENAME_CASE_INSENSITIVE)
__u32 s_reserved[158];
__le32 s_feature_qnap_compat; /* QNAP internal features */
__le32 s_rsved_gdt_blks_large; /* Use s_rsved_gdt_blks_large to replace s_reserved_gdt_blocks */
#endif
—
ファイルが足りないのではなく、ヘッダファイルにs_rsved_gdt_blks_largeと s_feature_qnap_compatがないとコンパイラが言っているので…
nsbyさんへ、いつもコメントありがとうございます。
おぉ! こんなディスカッションがあったのですね!
当時(2013年頃)の私は、ここまで知恵が回りませんでした。「ファイルが足りない」とか、記事を書いたのは先日なので、今も知恵が回っていませんね。
QNAP TS-412は、もう処分してしまったので、試せません…。
FreeBSDにいろいろソフトを載せて使っていますが、運用で手いっぱいで、有効活用までできていないかもしれません。もったいない。