Skip to content

利用 SoftEther 以及 QNAP NAS 架設 L2TP/IPSec VPN 服務器(上)

Published: 9 分鐘

對於已經有 QNAP NAS 裝置的人,雖然可以使用內建的 PPTP 或者 OpenVPN, 但不喜歡另外裝客戶端軟體或需要更彈性的人,何不試試使用 SoftEther 來架 L2TP/IPSec VPN 服務器? 本篇文章,山姆鍋將示範如何在 QNAP NAS 裝置上編譯安裝 SoftEther 軟體,並設定成適合自己使用。

工具介紹

本文是以山姆鍋自己有的 QNAP TS-419P II 的 NAS 服務器為標的,在上面使用 SoftEther 軟體架設 VPN 服務。

  1. QNAP NAS 裝置: 主要是當作存儲裝置,山姆鍋就是使用它來做資料備份並與遠端存儲服務同步,但本質上還是一台通用主機,在上面是很容易安裝其它軟體的。
  2. SoftEther Server 2.0: 一套支援多種協定的 VPN 服務軟體,L2TP/IPSec, OpenVPN, MS-SSTP 等,但本文只針對 L2TP/IPSec 的支援。Linux 上另一個支援 L2TP 的 VPN 軟體是 OpenSWAN,山姆鍋曾經在 VPS 上安裝過,不過沒成功。
  3. GCC/Make 等工具:由於 SoftEther 需要編譯,因此需要在 QNAP 上先安裝好這些基本工具。

已知限制

Linux Kernel 有個限制,導致 SoftEther VPN 服務無法存取 SoftEther 所在的那台主機。 雖然存取其它主機沒有問題,但如果您同山姆鍋一樣需要存取 NAS 的話,就需要兩張網卡。 幸運的是,QNAP TS-419P II 就有兩張網卡,如果您的 QNAP 沒有的話, 那您要看這個限制是不是不符合您的需要再決定要不要繼續。

安裝基本工具

在 QNAP 上安裝應用程式有簡單的用戶界面可以使用,不過我們要做的比較低階, 需要我們從命令列執行。假設您已經有安裝 ipkg 軟體,沒有的話可以從 App Center 安裝。 下列是已知需要安裝的軟體:

  1. gcc
  2. make
  3. gconv-modules
  4. nano: 不是必要啦,只是山姆鍋習慣用這個編輯器。

其它可能還有 SoftEther 需要的套件,像是 OpenSSL,但應該都已經有預先安裝了。

# ipkg install gcc
# ipkg install make
# ipkg install gconv-module
# ipkg nano

下載安裝 SoftEther 服務軟體

到 SoftEther 的 軟體下載頁面 ,根據項目來選擇:

  • 組件:選擇 “SoftEther VPN Server”
  • 系統(system): 選擇 “Linux”。
  • CPU: 需要根據您的 QNAP 而定,山姆鍋的是 ARM EABI (32-bit)。

SoftEther download

都選好後,下方就會出現下載聯結,找到您要的那個聯結後,複製它(您知道的,按右鍵?)。 使用 SSH 客戶端連到 NAS 服務器後,使用 wget 下載:

# cd /opt
# wget http://www.softether-download.com/files/softether/v2.00-9387-rtm-2013.09.16-tree/Linux/SoftEther%20VPN%20Server/32bit%20-%20ARM%20EABI/softether-vpnserver-v2.00-9387-rtm-2013.09.16-linux-arm_eabi-32bit.tar.gz

不要在 /root 下載,那個區隔(partition) 空間太小。使用 tar 指令解開下載完成的 SoftEther:

# tar zxvf softether-vpnserver-v2.00-9387-rtm-2013.09.16-linux-arm_eabi-32bit.tar.gz

解開後,在/opt/vpnserver 目錄就是 SoftEther 的原始碼?其實是預先編譯過的程式庫, 只是需要做一些聯結(link)產生最終執行檔。執行 make 來產生需要的執行檔:

# make
.
.
.

Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read 'ReadMeFirst_License.txt'
file with any text editor.)

1. Yes
2. No

Please choose one of above number:
1


Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
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
ranlib code/vpncmd.a
gcc code/vpncmd.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 vpncmd
./vpncmd /tool /cmd:Check
-- Alert: SoftEther VPN Kernel --
String Library Init Failed.
Please check your locale settings and iconv() libraries.

\--------------------------------------------------------------

The preparation of SoftEther VPN Server is completed !


*** How to switch the display language of the SoftEther VPN Server Service ***
SoftEther VPN Server supports the following languages:
    - Japanese
    - English
    - Simplified Chinese

You can choose your prefered language of SoftEther VPN Server at any time.
To switch the current language, open and edit the 'lang.config' file.

其中,有問題的訊息在於:

基本上是說 iconv 相關的錯誤。這篇文章 有提供解法,設定一個環境變數再重新編譯:

# export GCONV_PATH=/opt/lib/gconv
# make

終於到這邊了,您應該有一個編譯好的 SoftEther 服務軟體了。其中,主要的執行檔為:

  1. /opt/vpnserver/vpnserver : SoftEther 服務器程序。
  2. /opt/vpnserver/vpncmd:服務器命令列管理工具。

讓 SoftEther 在開機時自動執行

SoftEther 既然要提供服務,自然希望 QNAP 開機時可以自動執行。 這裡您會發現 QNAP 系統跟其它主流 Linux 發行版本其中一個很不一樣的地方: 它沒有完整支援 upstart 或者 init.d 來啟動服務。根據 QNAPedia 的這篇文章 , 山姆鍋節錄相關步驟:

編輯 /etc/config/qpkg.conf 這個檔案:

# nano /etc/config/qpkg.conf

宣告一個 autorun 套件來利用 ipkg 自動啟動機制:

[autorun]
Name = autorun
Version = 0.1
Author = neomilium
Date = 2013-05-06
Shell = /share/MD0_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/MD0_DATA/.qpkg/autorun
QPKG_File = autorun.qpkg
Enable = TRUE

其中, ‘Shell’就是要被自動執行的 shell 腳本。每次 QNAP 啟動時,那個腳本就會被執行, 所以,我們可以將要自動被執行的程式碼寫在那個檔案內。請按照下列步驟建立 autorun.sh 檔案:

# mkdir -p /share/MD0_DATA/.qpkg/autorun
# nano /share/MD0_DATA/.qpkg/autorun/autorun.sh
# chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh

autorun.sh 的內容會隨後續設定而修改,一個基本可以執行 vpnserver 的腳本:

#!/bin/sh

# GCONV_PATH is necessary otherwise SoftEther won't start due to locale issue.
export PATH=/opt/bin:/opt/sbin:$PATH
export GCONV_PATH=/opt/lib/gconv

# starts the VPN server
/opt/vpnserver/vpnserver start

結語

本文先針對 SoftEther 服務軟體在 QNAP 上的編譯安裝加以解說, 下篇文章將說明如何利用 SoftEther 提供的 SoftEther Server Manager for Windows 程式來設定。 安裝 SoftEther 又讓山姆鍋覺得回到使用 tar ball 來安裝程式的年代,希望 SoftEther 開源後, 會提供比較好的套件包裝方式。

郭信義 (Sam Kuo)

奔騰網路科技技術長,專長分散式系統、Web 應用與雲端服務架構、設計、開發、部署與維運。工作之餘,喜歡關注自由軟體的發展與應用,偶爾寫一下部落格文章。

你可能會有興趣的文章