2005年06月15日

使用 OpenVPN

之前有玩了一下 OpenVPN,不過沒搞定,就沒再摸了
昨天(6/14)在台大有場 Arne OpenVPN 的心得分享
回家後再給它試一次,終於試成功了
其實 OpenVPN 的應用方式有很多種,也要慢慢去試出來

安裝 OpenVPN


不管是 Linux Windows 或是 Mac OS X,都有現成的 Binary 套件可以使用
請到 OpenVPN 網站 下載合適的版本回去安裝
OpenVPN GUI for Mac 請到 這裡 下載 Tunnelblick 回去安裝
OpenVPN GUI for Windows 請到 這裡 下載 Install Packages 回去安裝


我的 Server 系統用的是 FC3,因此,去抓 DAG 的 binary RPM
下載回來後執行下列指令安裝:
$ rpm -ivh openvpn-2.0-1.1.fc3.rf.i386.rpm

建立 CA certificate 及 Server/Client keys


我是在 FC3 Server 下來建立所有相關的 CA certificate 及 keys
$ cd /usr/share/doc/openvpn-2.0/easy-rsa
ease-rsa 底下的一些 scripts (clean-all build-* 等等) 記得到先 chmod 755 讓它們可以執行
編輯 vars 檔案

主要是設定最後面的 KEY_COUNTRY KEY_PROVINCE KEY_CITY KEY_ORG KEY_EMAIL 等參數
$ vi vars
$ . vars
$ ./clean-all

產生 CA certificate

$ ./build-ca
會產生 keys/ca.*

產生 Server 的 key

$ ./build-key-server server
會產生 keys/server.*

產生 Diffie Hellman parameters

$ ./build-dh
會產生 keys/dh1024.pem

產生 tls-auth key

$ openvpn --genkey --secret ta.key
會產生 ta.key
$ mv ta.key keys/

產生 Client 的 key

$ ./build-key ibook
會產生 keys/ibook.*

$ ./build-key macmini
會產生 keys/macmini.*

$ ./build-key fujitsu
會產生 keys/fujitsu.*

$ ./build-key ns
會產生 keys/ns.*

$ ./build-key fedora
會產生 keys/fedora.*

我總共產生了五台 Clients 機器的 keys (ibook macmini fujitsu ns fedora)

所有的 CA certificate 及 keys 都建好後,接下來就是根據不同的狀況來設立不同的設定檔
底下為目前我個人成功在使用的例子:

狀況一


在 NAT Server 上架 OpenVPN Server(家裡的 NAT Server),然後 OpenVPN Client 則是架設在外面的任一台電腦上(我的 ibook)
這樣,我在公司或者是在外面的網咖上網時,就可以利用 OpenVPN 連上家裡的 Server 以及家裡 NAT 底下的其他機器(192.168.1.x/24)


Server 端:
eth0: a.b.c.d (Real IP)
eth1: 192.168.1.254/24
tap0: 192.168.2.1/24


Client 端:
eth0: e.f.g.h (Real IP or Virtual IP)
tap0: 192.168.2.x/24


Server 端的設定

我的 Server 是 FC3
首先,要把 Server 端相關的 CA certificate 及 keys 複製到 Server 機器的 /etc/openvpn/ 目錄底下
主要有 ca.crt ta.key dh1024.pem 及 server.*
$ cd /usr/share/doc/openvpn-2.0/easy-rsa/keys
$ cp ca.crt ta.key dh1024.pem server.* /etc/openvpn/

接下來就是設定檔部份了,先複製一份範例檔來修改
$ cd /usr/share/doc/openvpn-2.0/sample-config-files
$ cp server.conf /etc/openvpn/
$ vi /etc/openvpn/server.conf
----------------------------------------
local a.b.c.d ; Server 的 Real IP
port 1194
proto tcp ; 使用 tcp or udp
dev tap ; 使用 tap or tun
ca ca.crt ; 底下幾行指定 ca.crt 及各 key 的位置
cert server.crt
key server.key
dh dh1024.pem
server 192.168.2.0 255.255.255.0 ; OpenVPN 所使用的網段
ifconfig-pool-persist ipp.txt ; client Virtual IP 的對照表
push "route 192.168.1.0 255.255.255.0" ; 讓 OpenVPN client 也可以連 192.168.1.x 網段
client-to-client ; 讓各個 OpenVPN client 也可以互連
keepalive 10 120
tls-auth ta.key 0 ; Server 要設 0 Client 設 1
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
----------------------------------------
都設定好後,就可以啟動 OpenVPN 了
$ /etc/init.d/openvpn start
成功啟動後,你就會看到系統多了一個 tap0 的裝置,IP 為 192.168.2.1


Client 端的設定

先為我的 ibook (Mac OS X) 做設定
首先,還是要先從 Server 上把 ca.crt ta.key 及 ibook.* 這幾個檔案都複製到 ibook 上
預設是放在 ~/Library/openvpn/ 底下
然後編輯 ibook client 端的設定檔
$ vi ~/Library/openvpn/openvpn.conf
或是直接執行應用程式裡的 Tunnelblick,然後會在選單列上看到圖示,選擇 "Edit Config File..."

----------------------------------------
client ; 表示這是 client 端的設定
dev tap
proto tcp
remote a.b.c.d 1194 ; a.b.c.d 為 Server 的 IP
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert ibook.crt
key ibook.key
tls-auth ta.key 1 ; client 端要設成 1
comp-lzo
verb 3
----------------------------------------
編輯好後儲存
然後再選取選單列上的 Tunnelblick 裡的 "Connect"
這樣就連上了
執行 ifconfig 來看,會多了一個 tap0 IP 為 192.168.2.2
接著來測試看看
$ ping 192.168.2.1
$ ping 192.168.1.254
$ ping 192.168.1.x
都 ping 的到,那恭喜了

同樣的方式,我可以在公司的 Server 上再架一個 OpenVPN 的 Server
這樣我的 ibook 就可以同時連上家裡及公司內的各台機器了
不過,Mac OS X 上的這個 Tunnelblick 程式,目前只支援連一台 Server
若是想一次連到多個 OpenVPN server,可以不要用 GUI,直接用 command line
同樣先複製所需的 CA certificate 及 keys 到 ~/Library/openvpn/ 底下
然後,同樣在 ~/Library/openvpn/ 底下建立各個設定檔,如 client1.conf client2.conf
然後手動執行:
$ sudo openvpn --config client1.conf &
要連線到第二個 OpenVPN Server,再執行:
$ sudo openvpn --config client2.conf &
依此類推,或是乾脆直接寫個 script 來啟動多個設定檔:
startOpenVPN.sh
------------------------------------------
#!/bin/bash
sudo pwd
cd ~/Library/openvpn/
for i in *.conf
do
sudo /usr/local/sbin/openvpn --config $i &
done
------------------------------------------
然後在終端機下直接執行 sh startOpenVPN.sh 即可


再來設定我的 Fujitsu Notebook (Windows XP)
設定檔放在 C:\Program Files\OpenVPN\config\ 目錄底下
相關的 CA certificate 及 keys 一樣是複製到 C:\Program Files\OpenVPN\config\ 目錄底下
(包含 ca.crt ta.key fujitsu.*)
設定檔可以直接複製 C:\Program Files\OpenVPN\sample-config\ 裡的 client 再來修改即可
----------------------------------------
client
dev tap
proto tcp
remote a.b.c.d 1194 ; a.b.c.d 為 Server 的 IP
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert fujitsu.crt
key fujitsu.key
tls-auth ta.key 1
comp-lzo
verb 3
----------------------------------------
再來就是點選狀態列裡的 “OpenVPn GUI” 選擇 “Connect”



狀況二


在家裡及公司的 Server 上各架一台 OpenVPN Server
同時,兩台 OpenVPN Server 也各自再跑一個 OpenVPN Client,互相連對方
這樣,在公司內的任何一台機器,就可以利用 OpenVPN 連上家裡的 Server 以及家裡 NAT 底下的其他機器(192.168.1.x/24)
同樣的,在家裡的任何一台機器,也可以連上公司內部網路裡的任一台機器(10.0.0.x/24)


家裡 Server 端:
eth0: a.b.c.d (Real IP)
eth1: 192.168.1.254/24
tap0: 192.168.2.1/24
tap1: 192.168.3.x/24


公司 Server 端:
eth0: e.f.g.h (Real IP)
eth1: 10.0.0.254/24
tap0: 192.168.3.1/24
tap1: 192.168.2.x/24


產生 CA certificate 及 kyes 並複製到各個 Servers 及 Clinets (請參考之前的做法)
設定檔的部份如下:
家裡 Server 端的設定

$ vi /etc/openvpn/server.conf
----------------------------------------
local a.b.c.d ; 家裡 Server 的 Real IP
port 1194
proto tcp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 192.168.2.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
----------------------------------------


家裡 Client 端的設定

$ vi /etc/openvpn/client.conf
----------------------------------------
client
dev tap
proto tcp
remote a.b.c.d 1194 ; a.b.c.d 為公司 Server 的 IP
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert ns.crt
key ns.key
tls-auth ta.key 1
comp-lzo
verb 3
----------------------------------------


公司 Server 端的設定

$ vi /etc/openvpn/server.conf
----------------------------------------
local a.b.c.d ; 公司 Server 的 Real IP
port 1194
proto tcp
dev tap
ca ca.crt
cert server_office.crt
key server_office.key
dh dh1024.pem
server 192.168.3.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
max-clients 10
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
----------------------------------------


公司 Client 端的設定

$ vi /etc/openvpn/client.conf
----------------------------------------
client
dev tap
proto tcp
remote a.b.c.d 1194 ; a.b.c.d 為家裡 Server 的 IP
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert fedora.crt
key fedora.key
tls-auth ta.key 1
comp-lzo
verb 3
----------------------------------------




Posted by candyz0416 at 樂多Roodo! │11:21 │回應(1)引用(0)軟體
樂多分類:網路/3C 共同主題:伺服器安裝與設定 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/283944
回應文章
各位前輩:
我的vpn server與client端的連線一直無法成功
小弟我的linux版本為fedora core 5 open vpn 版本為2.0.7-1
我的client端config設定(WIN XP安裝openvpn-2.0.7-gui-1.0.3) (以下為client端設定檔 client.ovpn)

client
proto udp
remote 61.222.0.100 1194
persist-key
persist-tun
tls-client
ca ca.crt
cert winsons666.crt
key winsons666.key
tls-auth ta.key 0
comp-lzo
ns-cert-type server



我的SERVER 設定檔(/etc/openvpn/server.conf)
local 61.222.0.100
port 1194
proto udp
ca ca.crt
cert winson.crt
key winson.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
user nobody
group nobody


我的client端設定 ca.crt ta.key winson.*(我client端的key)
都複製到c:\program files\openvpn\config下了
但我的windows xp client按下connet卻出現connect to client fail
client 的log檔的訊息如下

Tue Sep 05 12:06:06 2006 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Tue Sep 05 12:06:06 2006 TLS Error: TLS handshake failed
Tue Sep 05 12:06:06 2006 TCP/UDP: Closing socket
Tue Sep 05 12:06:06 2006 SIGUSR1[soft,tls-error] received, process restarting
Tue Sep 05 12:06:06 2006 Restart pause, 2 second(s)
Tue Sep 05 12:06:08 2006 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Sep 05 12:06:08 2006 Re-using SSL/TLS context
Tue Sep 05 12:06:08 2006 LZO compression initialized
Tue Sep 05 12:06:08 2006 Control Channel MTU parms [ L:1574 D:166 EF:66 EB:0 ET:0 EL:0 ]
Tue Sep 05 12:06:08 2006 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
Tue Sep 05 12:06:08 2006 Local Options hash (VER=V4): 'acd6f765'
Tue Sep 05 12:06:08 2006 Expected Remote Options hash (VER=V4): '11b9bef8'
Tue Sep 05 12:06:08 2006 UDPv4 link local: [undef]
Tue Sep 05 12:06:08 2006 UDPv4 link remote: 61.222.0.100:1194
Posted by winson at 2006年09月5日 15:33