原本想用 SoftEther V1.x 版的,因為 V1.x 版的有英文,後來比較新的版本似乎都只有日文的。

後來試了一下 SoftEther V1.x 版的。我在一台 Debian 上 compile 好,執行都沒問題。但是,只要第二個連線要連上去時,就會發生 segmentation Fault。

所以,只好作罷,不用 SoftEther 了。

上網找了一些資料,決定試試 OpenVPN

我的環境是:
1. Debian (OpenVPN Server)
2. Windows (Client)

在 Debian 上安裝 OpenVPN 有狠簡單:
apt-get install openvpn

安裝好後就準備來設定啦:
1. 先把資料複製到 /etc/openvpn,一來方便設定,二來避免自己疏失把檔案怎麼了,隨時保有原本的可以再複製。
cp -R /usr/share/doc/openvpn/examples /etc/openvpn


2. 將 vars 裡的 KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, 及 KEY_EMAIL 預設值改成自己的資訊:
cd /etc/openvpn/examples/easy-rsa/
vi ./vars


我的 vars 檔案如下(比較重要的部份):
export KEY_SIZE=2048
export KEY_COUNTRY=TW
export KEY_PROVINCE=TW
export KEY_CITY=Taipei
export KEY_ORG="Copy-Left"
export KEY_EMAIL="my@email-address"


3. 接下來設定 sever:
將 vars 的設定值 load 到環境中,並將舊的 key 或設定清除,最後建立 root certificate。
. ./vars
./clean-all
./build-ca


建立 server key:
./build-key-server server


建立使用者的 keys:
#需要輸入密碼的
./build-key-pass username
#不需要輸入密碼的
./build-key username


建立 Diffie Hellman parameters:
./build-dh
#generate server id key
openvpn --genkey --secret ta.key


這 table 是由 OpenVPN 的網站拷貝過來的。這裡說明了我們建出來的 key 及 cert 的作用。
FilenameNeeded ByPurposeSecret
ca.crtserver + all clientsRoot CA certificateNO
ca.keykey signing machine onlyRoot CA keyYES
dh{n}.pemserver onlyDiffie Hellman parametersNO
server.crtserver onlyServer CertificateNO
server.keyserver onlyServer KeyYES
client1.crtclient1 onlyClient1 CertificateNO
client1.keyclient1 onlyClient1 KeyYES
client2.crtclient2 onlyClient2 CertificateNO
client2.keyclient2 onlyClient2 KeyYES
client3.crtclient3 onlyClient3 CertificateNO
client3.keyclient3 onlyClient3 KeyYES


以下就是我的 server.conf 設定:
# Which local IP address should OpenVPN
# listen on? (optional)
local 192.168.x.x
port 1194
proto udp
dev tun

ca /etc/openvpn/openvpn/examples/easy-rsa/keys/ca.crt
cert /etc/openvpn/openvpn/examples/easy-rsa/keys/server.crt
key /etc/openvpn/openvpn/examples/easy-rsa/keys/server.key
dh /etc/openvpn/openvpn/examples/easy-rsa/keys/dh1024.pem

server 10.0.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "route 192.168.x.0 255.255.255.0"
client-to-client

keepalive 10 120

tls-auth ta.key 0 # This file is secret

cipher DES-EDE3-CBC # Triple-DES
comp-lzo

user nobody
group nogroup

persist-key
persist-tun

status /var/log/openvpn-status.log

;log openvpn.log
log-append openvpn.log

verb 3



如果 VPN 的 server 上有用 iptables 開防火牆,還要記得把防火牆打開喔!
iptables -A INPUT -p udp --dport 1194 -m state --state NEW -i ethx -j ACCEPT



Client 的設定可就簡單一些:

client
dev tun
proto udp

remote 192.168.x.x 1194

resolv-retry infinite

nobind

persist-key
persist-tun

ca ca.crt
cert user1.crt
key user1.key

ns-cert-type server

tls-auth ta.key 1
cipher DES-EDE3-CBC

comp-lzo

verb 3


書,其實不一定需要買,網路上找到的資料其實就蠻足夠了。只是,有書還是比較方便。

對我來說,設定其實不是太難。難的是要了解環境架構及需要。
我這裡只是很粗略的記下我的設置方式。

參考資料:
How to Install Openvpn
OpenVPN 2.0 HowTo

參考書籍:
OpenVPN: Building and Integrating Virtual Private Networks