OpenVPN 是一個著重於加密型態的 VPN,基於 OpenSSL 的加密形式,可以相容於 Windows、OSX、Linux、Android、iOS 等裝置上,溝通於單一個連接埠,預設為 UDP 1194
對於企業來說 OpenVPN 更適用於 site to site 不中斷連接,OpenVPN 的穩定性以及加密都有頗高的水準,因為是採用 OpenSSL 所以可以進行憑證加密通道
然而他的跨平台相容性非常高,拿來作為一般使用者使用也是頗穩定,不過缺點是必須在安裝相對應的軟體,如 Tunnelblick (Mac)、OpenVPN (Windows)
CentOS 6 安裝 OpenVPN Server
Step.1 安裝 OpenVPN 套件
$ rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
$ yum install openvpn easy-rsa -y
Step.2 從範例複製一份 server.conf 設定檔,並設定以下參數
$ cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
$ vim /etc/openvpn/server.conf
#OpenVPN的通道
port 1194
proto udp
#使用 tun mode
dev tun
#伺服器和 ca 憑證
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
#指派給 Client 的網段
server 10.8.0.0 255.255.255.0
#提供DHCP並且指派DNS
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#建立一個 SSL/TLS "HMAC" 來加密封包
tls-auth shazi.info.key
#基於安全設定
user nobody
group nobody
主要以上設定必須要了解其作用,其他就採預設值。
Step.3 利用 easy-rsa 工具,來建立 OpenVPN 所須的認證 key
複製 easy-rsa 工具到 /etc/openvpn
$ cp -r /usr/share/easy-rsa /etc/openvpn/
$ cd /etc/openvpn/easy-rsa/2.0/
設定 easy-rsa 的環境參數
設定憑證參數
$ vim vars
export KEY_COUNTRY="TW"
export KEY_PROVINCE="TW"
export KEY_CITY="Taipei"
export KEY_ORG="Mr.shazi"
export KEY_EMAIL="system@gmail.com"
export KEY_OU="shazi.info"
複製 openssl 範例參數
$ cp /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/2.0/openssl.cnf
建立 ca.crt、ca.key
$ source ./vars
$ ./clean-all
$ ./build-ca
建立伺服器憑證 server.crt、server.csr、server.key,當出現詢問是否註冊時請輸入 y
$ ./build-key-server server
Certificate is to be certified until Oct 13 19:01:26 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
建立 Diffie Hellman key:dh2048.pem
$ ./build-dh
建立 HMAC 加密憑證:tls.key
$ openvpn --genkey --secret keys/tls.key
建立 Client 憑證:client.crt、client.csr、client.key,當出現詢問是否註冊時請輸入 y
$ ./build-key client
Certificate is to be certified until Oct 13 19:01:26 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Step.4 將所有憑證都建立好之後,把 ca.crt、server.crt、server.key、dh2048.pem、tls.key 都丟到 /etc/openvpn 好讓 server.conf 可以抓的到。
$ cd /etc/openvpn/easy-rsa/2.0/keys
$ cp ca.crt server.crt server.key dh2048.pem tls.key /etc/openvpn
Step.5 設定 iptables 允許 10.8.0.0/24 允許 NAT,並開啟 udp 1194
$ vim /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state NEW -p udp --dport 1194 -j ACCEPT
COMMIT
$ service iptables restart
Step.6 開啟 IP packet forwarding
$ vim /etc/sysctl.conf
$ net.ipv4.ip_forward = 1
立即讓 sysctl 生效
$ sysctl -p
Step.7 啟動 OpenVPN,並確認 listen 1194
$ service openvpn start
$ netstat -tunpl | grep 1194
udp 0 0 0.0.0.0:1194 0.0.0.0:* 21798/openvpn
OpenVPN Server 的部分到此就搞定了,再來就是要提供 Client 設定檔
OpenVPN Client Config ovpn
OpenVPN 的設定檔統一都是 .ovpn,必須提供使用者伺服器憑證以及TLS認證
你可以提供 ovpn 和憑證檔打包給使用者安裝,但有更簡單的方式是直接把憑證用 tag 的方式將憑證資訊包在 ovpn
以下就是將憑證資訊包在 ovpn 的作法,設定參數主要參考 server.conf
$ vim shazi.info.ovpn
client
dev tun
proto udp
remote shazi.info 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIEzTCCA7WgAwIBAgIJAN2YabKaLEZgMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYD
...
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIFDjCCA/agAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBnzELMAkGA1UEBhMCVFcx
...
...
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDG8h4ISOnfQXIm
...
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
6f4fd8cd0eb29f94db31e67379917dbf
...
...
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
remote 為 OpenVPN Server 的位置和端口。
<ca> 包的是 ca.crt 憑證資訊
<cert> 包的是 client.crt 憑證資訊
<key> 包的是 client.key 憑證資訊
<tls-auth> 包的是 tls.key 憑證資訊,在最後務必加上 key-direction 1 判別為 client
對於一般的桌面裝置,只要你有安裝 OpenVPN,直接點選 .ovpn 就可以安裝
行動裝置安裝 ovpn 以 iPhone 為例
那如果是 iOS / Android 裝置呢?小弟是上傳到雲端硬碟給行動裝置下載
上傳到 ownCloud 雲端後讓 iPhone 去打開,並且點選 Open with
然後選擇 Open in OpenVPN
就會將 .ovpn 設定檔匯入 OpenVPN 囉,這裡點選綠色的 + 就可以進行匯入
打開連線的開關,連上 VPN 囉!!而且速度優於 PPTP 很多唷!
OpenVPN 相較於 PPTP 或 L2TP/IPsec 來說相對穩定,速度在 OpenSSL 的硬體加速加持下實際使用也非常快,如果使用者對於另外安裝一套 OpenVPN 軟體不排斥的話,相信 OpenVPN 會是穩定與速度上的首選!
註1. 此篇採用的是 TUN Mode,TUN 必須於 OpenVPN Server 使用 NAT 的方式轉發封包,而 TAP 是允許 VPN Client 和 Server 同網段。
TAP 的方式可能會造成 IP 浪費並且目前也暫不支援 Android 系統。
參考資料:
iPhone OpenVPN Setup
How to Setup and Configure an OpenVPN Server on CentOS 6
Orignal From: CentOS 6 建立私有 OpenVPN,想要穩定又快速的 VPN 不求人
沒有留言:
張貼留言