利用 SoftEther 以及 QNAP NAS 架設 L2TP/IPSec VPN 服務器 (上)
對於已經有 QNAP NAS 裝置的人,雖然可以使用內建的 PPTP 或者 OpenVPN, 但不喜歡另外裝客戶端軟體或需要更彈性的人,何不試試使用 SoftEther 來架 L2TP/IPSec VPN 服務器? 本篇文章,山姆鍋將示範如何在 QNAP NAS 裝置上編譯安裝 SoftEther 軟體,並設定成適合自己使用。
工具介紹
本文是以山姆鍋自己有的 QNAP TS-419P
II 的 NAS 服務器為標的,在上面使用 SoftEther 軟體架設 VPN 服務。
- QNAP NAS 裝置:
主要是當作存儲裝置,山姆鍋就是使用它來做資料備份並與遠端存儲服務同步,但本質上還是一台通用主機,在上面是很容易安裝其它軟體的。 - SoftEther Server 2.0: 一套支援多種協定的 VPN 服務軟體,L2TP/IPSec,
OpenVPN,
MS-SSTP 等,但本文只針對 L2TP/IPSec 的支援。Linux 上另一個支援 L2TP 的 VPN 軟體是 OpenSWAN,山姆鍋曾經在 VPS 上安裝過,不過沒成功。 - GCC/Make 等工具:由於 SoftEther 需要編譯,因此需要在 QNAP 上先安裝好這些基本工具。
- 關聯文章: 微型企業之雲端資料備援服務 -
Symform
已知限制
Linux Kernel 有個限制,導致 SoftEther
VPN 服務無法存取 SoftEther 所在的那台主機。
雖然存取其它主機沒有問題,但如果您同山姆鍋一樣需要存取 NAS 的話,就需要兩張網卡。
幸運的是,QNAP TS-419P II 就有兩張網卡,如果您的 QNAP 沒有的話,
那您要看這個限制是不是不符合您的需要再決定要不要繼續。
安裝基本工具
在 QNAP 上安裝應用程式有簡單的用戶界面可以使用,不過我們要做的比較低階,
需要我們從命令列執行。假設您已經有安裝 ipkg 軟體,沒有的話可以從 App
Center 安裝。 下列是已知需要安裝的軟體:
- gcc
- make
- gconv-modules
- nano: 不是必要啦,只是山姆鍋習慣用這個編輯器。
其它可能還有 SoftEther 需要的套件,像是 OpenSSL,但應該都已經有預先安裝了。
1 | # ipkg install gcc |
下載安裝 SoftEther 服務軟體
到 SoftEther 的
軟體下載頁面
,根據項目來選擇:
- 組件:選擇 “SoftEther VPN Server”
- 系統 (system): 選擇 “Linux”。
- CPU: 需要根據您的 QNAP 而定,山姆鍋的是 ARM EABI (32-bit)。
都選好後,下方就會出現下載聯結,找到您要的那個聯結後,複製它(您知道的,按右鍵?)。
使用 SSH 客戶端連到 NAS 服務器後,使用 wget 下載:
1 | # cd /opt |
不要在 /root 下載,那個區隔 (partition)
空間太小。使用 tar 指令解開下載完成的 SoftEther:
1 | # tar zxvf softether-vpnserver-v2.00-9387-rtm-2013.09.16-linux-arm_eabi-32bit.tar.gz |
解開後,在 /opt/vpnserver 目錄就是 SoftEther 的原始碼?其實是預先編譯過的程式庫,
只是需要做一些聯結 (link) 產生最終執行檔。執行 make 來產生需要的執行檔:
1 | # make |
編譯到最後的部分,可能會看到下列的錯誤:
1 | gcc code/vpnserver.a -O2 -fsigned-char -lm -ldl -lrt -Wl,--no-warn-mismatch -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a -o vpnserver |
其中,有問題的訊息在於:
基本上是說
iconv 相關的錯誤。這篇文章
有提供解法,設定一個環境變數再重新編譯:
1 | # export GCONV_PATH=/opt/lib/gconv |
終於到這邊了,您應該有一個編譯好的 SoftEther 服務軟體了。其中,主要的執行檔為:
- /opt/vpnserver/vpnserver : SoftEther 服務器程序。
- /opt/vpnserver/vpncmd:服務器命令列管理工具。
讓 SoftEther 在開機時自動執行
SoftEther 既然要提供服務,自然希望 QNAP 開機時可以自動執行。
這裡您會發現 QNAP 系統跟其它主流 Linux 發行版本其中一個很不一樣的地方:
它沒有完整支援 upstart 或者 init.d 來啟動服務。根據 QNAPedia
的這篇文章
, 山姆鍋節錄相關步驟:
編輯 /etc/config/qpkg.conf 這個檔案:
1 | # nano /etc/config/qpkg.conf |
宣告一個 autorun 套件來利用 ipkg 自動啟動機制:
1 | [autorun] |
其中,
'Shell’就是要被自動執行的 shell 腳本。每次 QNAP 啟動時,那個腳本就會被執行,
所以,我們可以將要自動被執行的程式碼寫在那個檔案內。請按照下列步驟建立 autorun.sh 檔案:
1 | # mkdir -p /share/MD0_DATA/.qpkg/autorun |
autorun.sh 的內容會隨後續設定而修改,一個基本可以執行 vpnserver 的腳本:
1 |
|
結語
本文先針對 SoftEther 服務軟體在 QNAP 上的編譯安裝加以解說,
下篇文章將說明如何利用 SoftEther 提供的 SoftEther Server Manager for
Windows 程式來設定。 安裝 SoftEther 又讓山姆鍋覺得回到使用 tar
ball 來安裝程式的年代,希望 SoftEther 開源後, 會提供比較好的套件包裝方式。