openvpn 2.0

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

openvpn 2.0

文章louie » 週六 4月 09, 2005 7:15 pm

OpenVPN 2.0

架設 vpn server 有幾個功用:
client 端並沒有真實 ip 時,某些服務無法使用,例如公司的 intranet,只允許公司內部的 ip 才能開啟,從家裡就無法連上,或是 ip 並沒有對應的 hostname,smtp 不給寄信,這時透過 vpn server 的 ip 及 hostname 即可使用。

想隱藏 client 端的 ip,不給別人知道。

或是某些裝備並不支援 ssh,僅提供 telnet,但又怕連線被中途 sniffer,就可使用 vpn。

另外還可做到存取 vpn server 內部的虛擬 ip 的機器,免除要在 vpn server 上將 port forward 到虛擬 ip 機器,或是要先 ssh 至 vpn server 那台,再 ssh 至虛擬機器的麻煩。

現在要設定的是 debian(sarge) 中的 openvpn 2.0 的版本。

# apt-get install openvpn

首先先從簡單的 static key 方式講起,等到這部份完成,再進一步到更複雜的。
static key 方式的優點:
簡單易設定
No X509 PKI (Public Key Infrastructure) to maintain

缺點:
規模受到限制,僅能一台 server,一台 client
Lack of perfect forward secrecy -- key compromise results in total disclosure of previous sessions
金鑰必須以明碼的方式存於各個 vpn 端
金鑰必須使用預先存在的加密通道來傳送

產生金鑰:
# openvpn --genkey --secret static.key

將此金鑰利用原本已存在的加密通道(如 ssh)傳送到另一台電腦,二端都用同一個金鑰

server 端設定:
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key

client 端設定: (請將 your_vpn_server_ip_address 改成您的 ip)
remote your_vpn_server_ip_address
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key

防火牆的設定:
server 端必須開啟 UDP 1194 port,並且二端都要允許TUN interface(tun0) 封包通過

接著將二端的 openvpn daemon 啟動:
# /etc/init.d/openvpn start

這時應該可以從 client(10.8.0.2) 去 ping 到 server(10.8.0.1) 了,或是從 server (10.8.0.1) ping 到 client (10.8.0.2)。

另外可將 vpn 連線壓縮,在二邊設定檔中加入:
comp-lzo

要保持 NAT 的 firewall 或 router 連線,可加上:
keepalive 10 60
ping-timer-rem
persist-tun
persist-key

將 openvpn 改成以 daemon 方式運作,並以 nobody 及 nogroup 來啟動:
daemon
user nobody
user nogroup

要允許 client 端存取整個 server 的 subnet:
route 192.168.4.0 255.255.255.0

以上就完成 static key 的方式


接下來要做是另一種較複雜且安全的方式,建立自己的 Certificate Authority (CA) 並產生 certificates 及金鑰供 openvpn server 及多個 client 使用。

第一步是建立 PKI (public key infrastructure).
切換到 /usr/share/doc/openvpn/examples/easy-rsa 目錄,執行:
設定環境變數
. ./vars
以下東西產生出來會放到 ./keys/ 目錄下,可修改 vars 來改變位置

./clean-all
./build-ca

會產生
ca.crt
ca.key

建立給 server 用的 certificate & key
./build-key-server server
當中問到 "Common Name" 設成 "server"
會產生
01.pem
server.crt
server.csr
server.key

產生給多個 client 用的 certificates & keys
當中問到 "Common Name" 設成 "client1",以此列推
./build-key client1
產生
client1.crt
client1.csr
client1.key

./build-key client2
./build-key client3

Generate Diffie Hellman parameters
./build-dh

Hardening OpenVPN Security
openvpn --genkey --secret ta.key

接著將 key 利用加密通道拷貝到 server 及 client 機器上(和設定檔放在同一目錄)
代碼: 選擇全部
Filename    Needed By                   Purpose                     Secret
--------------------------------------------------------------------------
ca.crt      server + all clients        Root CA certificate         NO
ca.key      key signing machine only    Root CA key                 YES
dh{n}.pem   server only                 Diffie Hellman parameters   NO
server.crt  server only                 Server Certificate          NO
server.key  server only                 Server Key                  YES
client1.crt client1 only                Client1 Certificate         NO
client1.key client1 only                Client1 Key                 YES
client2.crt client2 only                Client2 Certificate         NO
client2.key client2 only                Client2 Key                 YES
client3.crt client3 only                Client3 Certificate         NO
client3.key client3 only                Client3 Key                 YES
ta.key      server + all clients                                    YES
--------------------------------------------------------------------------


在 server 端機器上修改 /etc/openvpn/server.conf,可從 /usr/share/doc/openvpn/examples/sample-config- files/ 拿來當範本
----------------------------------
# openvpn server 的 ip
local your_vpn_server_ip_address

# vpn server 的 port
port 1194

# protocol
proto udp

# device
dev tun

tls-server
ca ca.crt
cert server.crt
key server.key

tls-auth ta.key 0

dh dh1024.pem

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# 自動將 client 的 default gateway 設成經由 VPN server 出去
push "redirect-gateway"

# 保持連線,每 10 秒 ping 一次,若是 120 秒未收到封包,即認定 client 斷線
keepalive 10 120

comp-lzo

# 最多同時只能有十個 client
max-clients 10

# vpn daemon 執行時的身份(在非 Windows 平台中使用)
user nobody
group nogroup

persist-key
persist-tun
daemon

# 以下二行是將 vpn server 內部的虛擬 ip 機器開放給 client 使用
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"

----------------------------------


在 client1 端機器上修改 client.conf
----------------------------------
# 本台是當 client
client

dev tun
proto udp

# vpn server 的 ip 及 port
remote your_vpn_server_ip_address 1194

# 執行時的身份
user nobody
group nogroup

persist-key
persist-tun

tls-client
ca ca.crt
cert client1.crt
key client1.key

tls-auth ta.key 1

ns-cert-type server
comp-lzo
daemon
----------------------------------

client2 及 client3 設定檔和 client1 差不多,只有 cert 及 key 不同:
cert client2.crt
key client2.key
以此列推

啟動 openvpn server 及 client,這時 client 端的 default gateway 會被修改過,經由 vpn server 那台出去,因此從外面查詢到的 ip 為 vpn server 的 ip。

由於啟動 openvpn 後,身份切換到 nobody,導致要結束 openvpn 時有錯誤訊息,無法執行 route 指令,將 default gateway 恢復到未啟動 vpn 前的狀況,因此在此寫個
shell script 來結束 openvpn

stop-openvpn
----------------------
/etc/init.d/openvpn stop
route del your_vpn_server_ip_address
route add default gw your_original_default_gateway

用 root 執行即可結束 openvpn daemon

--------------------------------------------------

若是在 Windows 下要安裝 openvpn
請到 http://openvpn.net/download.html
不管是 linux 或 Windows 版,server 或 client 都是同一套程式,僅是設定檔不同,抓 openvpn-2.0_rc20-install.exe

安裝後會多出一個 TAP-Win32 Adapter 的區域連線
將 c:/Program Files/OpenVPN/sample-config 中的 server.ovpn(當 server) 或 client.ovpn(當 client) 複製一份到 c:/Program Files/OpenVPN/config 中,修改成符合我們需求即可,接著將從 server 產生的 key(ca.crt client1.crt client1.key)也放到 c:/Program Files/OpenVPN/config 中。

底下以 client 當範例:
--------------------------------------
client

dev tun
proto udp

# vpn server 的 ip 及 port
remote your_vpn_server_ip_address 1194

nobind
persist-key
persist-tun

tls-client
ca ca.crt
cert client1.crt
key client1.key

tls-auth ta.key 1

ns-cert-type server
comp-lzo
---------------------------------------

接著到 "服務" 中去啟動 openvpn service 即可,TAP-Win32 Adapter 會自動從 openvpn server 取得 ip 和 gateway。
louie
快樂的大學生
快樂的大學生
 
文章: 593
註冊時間: 週一 9月 09, 2002 7:58 pm

文章訪客 » 週四 11月 03, 2005 5:21 pm

感激
訪客
 


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客