歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> 在Ubuntu 15.04上配置OpenVPN服務器和客戶端

在Ubuntu 15.04上配置OpenVPN服務器和客戶端

日期:2017/3/6 11:34:38   编辑:Unix資訊

虛擬專用網(VPN)常指幾種通過其它網絡建立連接技術。它之所以被稱為“虛擬”,是因為各個節點間的連接不是通過物理線路實現的,而“專用”是指如果沒有網絡所有者的正確授權是不能被公開訪問到。

OpenVPN軟件借助TUN/TAP驅動使用TCP和UDP協議來傳輸數據。UDP協議和TUN驅動允許NAT後的用戶建立到OpenVPN服務器的連接。此外,OpenVPN允許指定自定義端口。它提供了更多的靈活配置,可以幫助你避免防火牆限制。

OpenVPN中,由OpenSSL庫和傳輸層安全協議(TLS)提供了安全和加密。TLS是SSL協議的一個改進版本。

OpenSSL提供了兩種加密方法:對稱和非對稱。下面,我們展示了如何配置OpenVPN的服務器端,以及如何配置使用帶有公共密鑰基礎結構(PKI)的非對稱加密和TLS協議。

服務器端配置

首先,我們必須安裝OpenVPN軟件。在Ubuntu 15.04和其它帶有‘apt’包管理器的Unix系統中,可以通過如下命令安裝:

  1. sudo apt-get install openvpn

然後,我們必須配置一個密鑰對,這可以通過默認的“openssl”工具完成。但是,這種方式十分難。這也是我們使用“easy-rsa”來實現此目的的原因。接下來的命令會將“easy-rsa”安裝到系統中。

  1. sudo apt-get unstall easy-rsa

注意: 所有接下來的命令要以超級用戶權限執行,如在使用sudo -i命令後執行,或者你可以使用sudo -E作為接下來所有命令的前綴。

開始之前,我們需要拷貝“easy-rsa”到openvpn文件夾。

  1. mkdir /etc/openvpn/easy-rsa
  2. cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa
  3. mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0

然後進入到該目錄:

  1. cd /etc/openvpn/easy-rsa/2.0

這裡,我們開始密鑰生成進程。

首先,我們編輯一個“vars”文件。為了簡化生成過程,我們需要在裡面指定數據。這裡是“vars”文件的一個樣例:

  1. export KEY_COUNTRY="CN"
  2. export KEY_PROVINCE="BJ"
  3. export KEY_CITY="Beijing"
  4. export KEY_ORG="Linux.CN"
  5. export KEY_EMAIL="[email protected]"
  6. export KEY_OU=server

希望這些字段名稱對你而言已經很清楚,不需要進一步說明了。

其次,我們需要拷貝openssl配置。另外一個版本已經有現成的配置文件,如果你沒有特定要求,你可以使用它的上一個版本。這裡是1.0.0版本。

  1. cp openssl-1.0.0.cnf openssl.cnf

第三,我們需要加載環境變量,這些變量已經在前面一步中編輯好了。

  1. source ./vars

生成密鑰的最後一步准備工作是清空舊的證書和密鑰,以及生成新密鑰的序列號和索引文件。可以通過以下命令完成。

  1. ./clean-all

現在,我們完成了准備工作,准備好啟動生成進程了。讓我們先來生成證書。

  1. ./build-ca

在對話中,我們可以看到默認的變量,這些變量是我們先前在“vars”中指定的。我們可以檢查一下,如有必要進行編輯,然後按回車幾次。對話如下:

  1. Generating a 2048 bit RSA private key
  2. .............................................+++
  3. ...................................................................................................+++
  4. writing new private key to 'ca.key'
  5. -----
  6. You are about to be asked to enter information that will be incorporated
  7. into your certificate request.
  8. What you are about to enter is what is called a Distinguished Name or a DN.
  9. There are quite a few fields but you can leave some blank
  10. For some fields there will be a default value,
  11. If you enter '.', the field will be left blank.
  12. -----
  13. Country Name (2 letter code) [CN]:
  14. State or Province Name (full name) [BJ]:
  15. Locality Name (eg, city) [Beijing]:
  16. Organization Name (eg, company) [Linux.CN]:
  17. Organizational Unit Name (eg, section) [Tech]:
  18. Common Name (eg, your name or your server's hostname) [Linux.CN CA]:
  19. Name [EasyRSA]:
  20. Email Address [[email protected]]:

接下來,我們需要生成一個服務器密鑰。

  1. ./build-key-server server

該命令的對話如下:

  1. Generating a 2048 bit RSA private key
  2. ........................................................................+++
  3. ............................+++
  4. writing new private key to 'server.key'
  5. -----
  6. You are about to be asked to enter information that will be incorporated
  7. into your certificate request.
  8. What you are about to enter is what is called a Distinguished Name or a DN.
  9. There are quite a few fields but you can leave some blank
  10. For some fields there will be a default value,
  11. If you enter '.', the field will be left blank.
  12. -----
  13. Country Name (2 letter code) [CN]:
  14. State or Province Name (full name) [BJ]:
  15. Locality Name (eg, city) [Beijing]:
  16. Organization Name (eg, company) [Linux.CN]:
  17. Organizational Unit Name (eg, section) [Tech]:
  18. Common Name (eg, your name or your server's hostname) [Linux.CN server]:
  19. Name [EasyRSA]:
  20. Email Address [[email protected]]:
  21. Please enter the following 'extra' attributes
  22. to be sent with your certificate request
  23. A challenge password []:
  24. An optional company name []:
  25. Using configuration from /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
  26. Check that the request matches the signature
  27. Signature ok
  28. The Subject's Distinguished Name is as follows
  29. countryName :PRINTABLE:'CN'
  30. stateOrProvinceName :PRINTABLE:'BJ'
  31. localityName :PRINTABLE:'Beijing'
  32. organizationName :PRINTABLE:'Linux.CN'
  33. organizationalUnitName:PRINTABLE:'Tech'
  34. commonName :PRINTABLE:'Linux.CN server'
  35. name :PRINTABLE:'EasyRSA'
  36. emailAddress :IA5STRING:'[email protected]'
  37. Certificate is to be certified until May 22 19:00:25 2025 GMT (3650 days)
  38. Sign the certificate? [y/n]:y
  39. 1 out of 1 certificate requests certified, commit? [y/n]y
  40. Write out database with 1 new entries
  41. Data Base Updated

這裡,最後兩個關於“簽署證書”和“提交”的問題,我們必須回答“yes”。

現在,我們已經有了證書和服務器密鑰。下一步,就是去生成Diffie-Hellman密鑰。執行以下命令,耐心等待。在接下來的幾分鐘內,我們將看到許多點和加號。

  1. ./build-dh

該命令的輸出樣例如下:

  1. Generating DH parameters, 2048 bit long safe prime, generator 2
  2. This is going to take a long time
  3. ................................+................<許多的點>

在漫長的等待之後,我們可以繼續生成最後的密鑰了,該密鑰用於TLS驗證。命令如下:

  1. openvpn --genkey --secret keys/ta.key

現在,生成完畢,我們可以移動所有生成的文件到最後的位置中。

  1. cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/

最後,我們來創建OpenVPN配置文件。讓我們從樣例中拷貝過來吧:

  1. cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
  2. cd /etc/openvpn
  3. gunzip -d /etc/openvpn/server.conf.gz

然後編輯:

  1. vim /etc/openvpn/server.conf

我們需要指定密鑰的自定義路徑

  1. ca /etc/openvpn/keys/ca.crt
  2. cert /etc/openvpn/keys/server.crt
  3. key /etc/openvpn/keys/server.key # This file should be kept secret
  4. dh /etc/openvpn/keys/dh2048.pem

一切就緒。在重啟OpenVPN後,服務器端配置就完成了。

  1. service openvpn restart

Unix的客戶端配置

假定我們有一台裝有類Unix操作系統的設備,比如Ubuntu 15.04,並安裝有OpenVPN。我們想要連接到前面建立的OpenVPN服務器。首先,我們需要為客戶端生成密鑰。為了生成該密鑰,請轉到服務器上的對應目錄中:

  1. cd /etc/openvpn/easy-rsa/2.0

加載環境變量:

  1. source vars

然後創建客戶端密鑰:

./build-key client 

我們將看到一個與先前關於服務器密鑰生成部分的章節描述一樣的對話,填入客戶端的實際信息。

如果需要密碼保護密鑰,你需要運行另外一個命令,命令如下:

  1. ./build-key-pass client

在此種情況下,在建立VPN連接時,會提示你輸入密碼。

現在,我們需要將以下文件從服務器拷貝到客戶端/etc/openvpn/keys/文件夾。

服務器文件列表:

  • ca.crt,
  • dh2048.pem,
  • client.crt,
  • client.key,
  • ta.key.

在此之後,我們轉到客戶端,准備配置文件。配置文件位於/etc/openvpn/client.conf,內容如下:

  1. dev tun
  2. proto udp
  3. # 遠程 OpenVPN 服務器的 IP 和 端口號
  4. remote 111.222.333.444 1194
  5. resolv-retry infinite
  6. ca /etc/openvpn/keys/ca.crt
  7. cert /etc/openvpn/keys/client.crt
  8. key /etc/openvpn/keys/client.key
  9. tls-client
  10. tls-auth /etc/openvpn/keys/ta.key 1
  11. auth SHA1
  12. cipher BF-CBC
  13. remote-cert-tls server
  14. comp-lzo
  15. persist-key
  16. persist-tun
  17. status openvpn-status.log
  18. log /var/log/openvpn.log
  19. verb 3
  20. mute 20

在此之後,我們需要重啟OpenVPN以接受新配置。

  1. service openvpn restart

好了,客戶端配置完成。

安卓客戶端配置

安卓設備上的OpenVPN配置和Unix系統上的十分類似,我們需要一個含有配置文件、密鑰和證書的包。文件列表如下:

  • 配置文件 (擴展名 .ovpn),
  • ca.crt,
  • dh2048.pem,
  • client.crt,
  • client.key.

客戶端密鑰生成方式和先前章節所述的一樣。

配置文件內容如下:

  1. client tls-client
  2. dev tun
  3. proto udp
  4. # 遠程 OpenVPN 服務器的 IP 和 端口號
  5. remote 111.222.333.444 1194
  6. resolv-retry infinite
  7. nobind
  8. ca ca.crt
  9. cert client.crt
  10. key client.key
  11. dh dh2048.pem
  12. persist-tun
  13. persist-key
  14. verb 3
  15. mute 20

所有這些文件我們必須移動我們設備的SD卡上。

然後,我們需要安裝一個OpenVPN Connect 應用。

接下來,配置過程很是簡單:

  • 打開 OpenVPN 並選擇“Import”選項
  • 選擇“Import Profile from SD card”
  • 在打開的窗口中導航到我們放置好文件的目錄,並選擇那個 .ovpn 文件
  • 應用會要求我們創建一個新的配置文件
  • 點擊“Connect”按鈕並稍等一下

搞定。現在,我們的安卓設備已經通過安全的VPN連接連接到我們的專用網。

尾聲

雖然OpenVPN初始配置花費不少時間,但是簡易的客戶端配置為我們彌補了時間上的損失,也提供了從任何設備連接的能力。此外,OpenVPN提 供了一個很高的安全等級,以及從不同地方連接的能力,包括位於NAT後面的客戶端。因此,OpenVPN可以同時在家和企業中使用。

Copyright © Linux教程網 All Rights Reserved