Main Page | 最近更改 | 編輯本頁 | 頁面歷史

可列印版 | 免責聲明 | 隱私政策

未登入
登入 | 幫助
 

OpenVPN

出自DebianWiki

OpenVPN 2.0

架設 vpn server 有幾個功用:


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

root@debian:~# apt-get install openvpn

Lack of perfect forward secrecy -- key compromise results in total disclosure of previous sessions 金鑰必須以明碼的方式存於各個 vpn 端 金鑰必須使用預先存在的加密通道來傳送

產生金鑰:

root@debian:~# 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 啟動:

root@debian:~# /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
group 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 目錄,執行: 設定環境變數

root@debian:~# . ./vars

以下東西產生出來會放到 ./keys/ 目錄下,可修改 vars 來改變位置

root@debian:~# ./clean-all
root@debian:~# ./build-ca

會產生

ca.crt
ca.key

建立給 server 用的 certificate & key

root@debian:~# ./build-key-server server

當中問到 "Common Name" 設成 "server" 會產生

01.pem
server.crt
server.csr
server.key

產生給多個 client 用的 certificates & keys 當中問到 "Common Name" 設成 "client1",以此類推

root@debian:~# ./build-key client1

產生

client1.crt
client1.csr
client1.key
root@debian:~# ./build-key client2
root@debian:~# ./build-key client3

Generate Diffie Hellman parameters

root@debian:~# ./build-dh

Hardening OpenVPN Security

root@debian:~# openvpn --genkey --secret ta.key

接著將 key 利用加密通道拷貝到 server 及 client 機器上(和設定檔放在同一目錄)


在 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。

取自"http://wiki.debian.org.tw/index.php/OpenVPN"

本頁面已經被瀏覽10,693次。 這頁的最後修訂在 2007年6月28日 (星期四) 15:52。 本站的全部文本內容在GNU Free Documentation License 1.2之條款下提供。


[Main Page]
Main Page
社區
近期活動
最近更改
隨機頁面
幫助
贊助

編輯本頁
討論本頁
頁面歷史
鏈入頁面
鏈出更改

特殊頁面
錯誤報告