在 Ubuntu 15.04 上配置 OpenV*N 服務器和客戶端
虛擬專用網(V*N)常指幾種通過其它網絡建立連接技術。它之所以被稱為“虛擬”,是因為各個節點間的連接不是通過物理線路實現的,而“專用”是指如果沒有網絡所有者的正確授權是不能被公開訪問到。
OpenV*N軟件借助TUN/TAP驅動使用TCP和UDP協議來傳輸數據。UDP協議和TUN驅動允許NAT后的用戶建立到OpenV*N服務器的連接。此外,OpenV*N允許指定自定義端口。它提供了更多的靈活配置,可以幫助你避免防火墻限制。
OpenV*N中,由OpenSSL庫和傳輸層安全協議(TLS)提供了安全和加密。TLS是SSL協議的一個改進版本。
OpenSSL提供了兩種加密方法:對稱和非對稱。下面,我們展示了如何配置OpenV*N的服務器端,以及如何配置使用帶有公共密鑰基礎結構(PKI)的非對稱加密和TLS協議。
服務器端配置
首先,我們必須安裝OpenV*N軟件。在Ubuntu 15.04和其它帶有‘apt’包管理器的Unix系統中,可以通過如下命令安裝:
sudo apt-get install openV*N
然后,我們必須配置一個密鑰對,這可以通過默認的“openssl”工具完成。但是,這種方式十分難。這也是我們使用“easy-rsa”來實現此目的的原因。接下來的命令會將“easy-rsa”安裝到系統中。
sudo apt-get unstall easy-rsa
注意: 所有接下來的命令要以超級用戶權限執行,如在使用sudo -i命令后執行,或者你可以使用sudo -E作為接下來所有命令的前綴。
開始之前,我們需要拷貝“easy-rsa”到openV*N文件夾。
mkdir /etc/openV*N/easy-rsa cp -r /usr/share/easy-rsa /etc/openV*N/easy-rsa mv /etc/openV*N/easy-rsa/easy-rsa /etc/openV*N/easy-rsa/2.0
然后進入到該目錄
cd /etc/openV*N/easy-rsa/2.0
這里,我們開始密鑰生成進程。
首先,我們編輯一個“vars”文件。為了簡化生成過程,我們需要在里面指定數據。這里是“vars”文件的一個樣例:
export KEY_COUNTRY="CN" export KEY_PROVINCE="BJ" export KEY_CITY="Beijing" export KEY_ORG="Linux.CN" export KEY_EMAIL="open@V*N.linux.cn" export KEY_OU=server
希望這些字段名稱對你而言已經很清楚,不需要進一步說明了。
其次,我們需要拷貝openssl配置。另外一個版本已經有現成的配置文件,如果你沒有特定要求,你可以使用它的上一個版本。這里是1.0.0版本。
cp openssl-1.0.0.cnf openssl.cnf
第三,我們需要加載環境變量,這些變量已經在前面一步中編輯好了。
source ./vars
生成密鑰的最后一步準備工作是清空舊的證書和密鑰,以及生成新密鑰的序列號和索引文件。可以通過以下命令完成。
./clean-all
現在,我們完成了準備工作,準備好啟動生成進程了。讓我們先來生成證書。
./build-ca
在對話中,我們可以看到默認的變量,這些變量是我們先前在“vars”中指定的。我們可以檢查一下,如有必要進行編輯,然后按回車幾次。對話如下
Generating a 2048 bit RSA private key .............................................+++ ...................................................................................................+++writing new private key to 'ca.key'
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [CN]: State or Province Name (full name) [BJ]: Locality Name (eg, city) [Beijing]: Organization Name (eg, company) [Linux.CN]: Organizational Unit Name (eg, section) [Tech]: Common Name (eg, your name or your server's hostname) [Linux.CN CA]: Name [EasyRSA]: Email Address [open@V*N.linux.cn]:</pre>
接下來,我們需要生成一個服務器密鑰
./build-key-server server該命令的對話如下:
Generating a 2048 bit RSA private key ........................................................................+++ ............................+++writing new private key to 'server.key'
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [CN]: State or Province Name (full name) [BJ]: Locality Name (eg, city) [Beijing]: Organization Name (eg, company) [Linux.CN]: Organizational Unit Name (eg, section) [Tech]: Common Name (eg, your name or your server's hostname) [Linux.CN server]: Name [EasyRSA]: Email Address [open@V*N.linux.cn]:
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openVN/easy-rsa/2.0/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CN' stateOrProvinceName :PRINTABLE:'BJ' localityName :PRINTABLE:'Beijing' organizationName :PRINTABLE:'Linux.CN' organizationalUnitName:PRINTABLE:'Tech' commonName :PRINTABLE:'Linux.CN server' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'open@VN.linux.cn' Certificate is to be certified until May 22 19:00:25 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</pre>
這里,最后兩個關于“簽署證書”和“提交”的問題,我們必須回答“yes”。
現在,我們已經有了證書和服務器密鑰。下一步,就是去省城Diffie-Hellman密鑰。執行以下命令,耐心等待。在接下來的幾分鐘內,我們將看到許多點和加號。
./build-dh該命令的輸出樣例如下
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ................................+................<許多的點>在漫長的等待之后,我們可以繼續生成最后的密鑰了,該密鑰用于TLS驗證。命令如下:
openV*N --genkey --secret keys/ta.key現在,生成完畢,我們可以移動所有生成的文件到最后的位置中。
cp -r /etc/openV*N/easy-rsa/2.0/keys/ /etc/openV*N/最后,我們來創建OpenV*N配置文件。讓我們從樣例中拷貝過來吧:
cp /usr/share/doc/openV*N/examples/sample-config-files/server.conf.gz /etc/openV*N/ cd /etc/openV*N gunzip -d /etc/openV*N/server.conf.gz然后編輯
vim /etc/openV*N/server.conf我們需要指定密鑰的自定義路徑
ca /etc/openV*N/keys/ca.crt cert /etc/openV*N/keys/server.crt key /etc/openV*N/keys/server.key # This file should be kept secret dh /etc/openV*N/keys/dh2048.pem一切就緒。在重啟OpenV*N后,服務器端配置就完成了。
service openV*N restartUnix的客戶端配置
假定我們有一臺裝有類Unix操作系統的設備,比如Ubuntu 15.04,并安裝有OpenV*N。我們想要連接到前面建立的OpenV*N服務器。首先,我們需要為客戶端生成密鑰。為了生成該密鑰,請轉到服務器上的對應目錄中:
cd /etc/openV*N/easy-rsa/2.0加載環境變量
source vars然后創建客戶端密鑰
./build-key client我們將看到一個與先前關于服務器密鑰生成部分的章節描述一樣的對話,填入客戶端的實際信息。
如果需要密碼保護密鑰,你需要運行另外一個命令,命令如下
./build-key-pass client在此種情況下,在建立V*N連接時,會提示你輸入密碼。
現在,我們需要將以下文件從服務器拷貝到客戶端/etc/openV*N/keys/文件夾。
服務器文件列表:
- ca.crt,
- dh2048.pem,
- client.crt,
- client.key,
- ta.key. </ul>
在此之后,我們轉到客戶端,準備配置文件。配置文件位于/etc/openV*N/client.conf,內容如下
dev tun proto udp遠程 OpenV*N 服務器的 IP 和 端口號
remote 111.222.333.444 1194
resolv-retry infinite
ca /etc/openVN/keys/ca.crt cert /etc/openVN/keys/client.crt key /etc/openVN/keys/client.key tls-client tls-auth /etc/openVN/keys/ta.key 1 auth SHA1 cipher BF-CBC remote-cert-tls server comp-lzo persist-key persist-tun
status openVN-status.log log /var/log/openVN.log verb 3 mute 20</pre>
在此之后,我們需要重啟OpenV*N以接受新配置。
service openV*N restart好了,客戶端配置完成。
安卓客戶端配置
安卓設備上的OpenV*N配置和Unix系統上的十分類似,我們需要一個含有配置文件、密鑰和證書的包。文件列表如下:
- 配置文件 (擴展名 .oV*N),
- ca.crt,
- dh2048.pem,
- client.crt,
- client.key. </ul>
客戶端密鑰生成方式和先前章節所述的一樣。
配置文件內容如下
client tls-client dev tun proto udp遠程 OpenV*N 服務器的 IP 和 端口號
remote 111.222.333.444 1194
resolv-retry infinite nobind ca ca.crt cert client.crt key client.key dh dh2048.pem persist-tun persist-key
verb 3 mute 20</pre>
所有這些文件我們必須移動我們設備的SD卡上。
然后,我們需要安裝一個OpenV*N Connect 應用。
接下來,配置過程很是簡單:
- 打開 OpenV*N 并選擇“Import”選項
- 選擇“Import Profile from SD card”
- 在打開的窗口中導航到我們放置好文件的目錄,并選擇那個 .oV*N 文件
- 應用會要求我們創建一個新的配置文件
- 點擊“Connect”按鈕并稍等一下 </ul>
搞定。現在,我們的安卓設備已經通過安全的V*N連接連接到我們的專用網。
尾聲
雖然OpenV*N初始配置花費不少時間,但是簡易的客戶端配置為我們彌補了時間上的損失,也提供了從任何設備連接的能力。此外,OpenV*N提供了一個很高的安全等級,以及從不同地方連接的能力,包括位于NAT后面的客戶端。因此,OpenV*N可以同時在家和企業中使用。
via: http://linoxide.com/ubuntu-how-to/configure-openV*N-server-client-ubuntu-15-04/
作者:Ivan Zabrovskiy 譯者:GOLinux 校對:wxy
來源: https://linux.cn/article-5938-1.html