1. 程式人生 > >不得不說的企業常見應用工具OpenVPN

不得不說的企業常見應用工具OpenVPN

android windows 代理服務器 network 開源軟件


OpenVPN簡介

OpenVPN是一個用於創建虛擬專用網絡(Virtual Private Network)加密通道的免費開源軟件。使用OpenVPN可以方便地在家庭、辦公場所、住宿酒店等不同網絡訪問場所之間搭建類似於局域網的專用網絡通道。OpenVPN使用方便,運行性能優秀,支持Solaris、Linux 2.2+、OpenBSD 3.0+、FreeBSD、NetBSD、Mac OS X、Android和Windows 2000+的操作系統,並且采用了高強度的數據加密,再加上其開源免費的特性,使得OpenVPN成為中小型企業及個人的VPN首選產品。


使用OpenVPN配合特定的代理服務器,可用於訪問Youtube、FaceBook、Twitter等受限網站,也可用於突破公司的網絡限制。由於OpenVPN支持UDP協議,還可以配合HTTP代理(HTTP Proxy)使用,使得只要是能夠打開網站或上QQ的地方,就可以訪問外部的任何網站或其他網絡資源。


OpenVPN下載

你可以點擊下列鏈接直接從360雲盤下載OpenVPN 2.3.0的官方正式版Windows安裝文件

(特別值得註意的是:由於Windows自身的限制

Windows版本的OpenVPN只有具備管理員權限的用戶才能成功安裝

當前最新版本的OpenVPN 2.3.0 只能在Windows XP及以上版本的操作系統上安裝)
OpenVPN 2.3.0 Windows 32位 安裝文件(1.6 MB)
OpenVPN 2.3.0 Windows 64位 安裝文件(1.6 MB)


OpenVPN安裝

在這裏筆者以同一個局域網內的兩臺電腦

A(IP:192.168.0.2,操作系統:Windows 7 SP1 64位旗艦版)和

B(IP:192.168.0.3,操作系統:Windows XP SP3 32位 專業版)為例

將電腦A作為VPN服務器、電腦B作為VPN客戶端,進行安裝、配置、連通測試

在這裏,筆者將統一安裝OpenVPN 2.3.0 Windows 32位版本的安裝文件


在安裝之前,先給讀者們介紹一下OpenVPN的大致工作原理,以便於更好地理解後面的安裝和使用操作。

在OpenVPN中,服務器端和客戶端使用的是同一個安裝文件,安裝方法也是一樣的,只是配置方法不一樣

其主要區別是,在安裝目錄的config文件夾下,服務器端配置的文件叫做server.ovpn,客戶端配置的文件叫做client.ovpn,當然,配置文件中的內容也不相同。OpenVPN通過不同的設置來決定該程序是充當服務器端還是客戶端


OpenVPN的大致工作原理就是在服務器端和客戶端之間搭建一個獨立於當前網絡環境的加密通道

將服務器端和多個客戶端組建成一個獨立的虛擬局域網,實現服務器端和客戶端、客戶端和客戶端之間相互通信


例如,我們的電腦A和電腦B的局域網網段是192.168.0.*

OpenVPN可以在它們之間搭建一個獨立的虛擬局域網,並且網段配置為10.0.0.*

(網段可以由用戶隨意配置,只要不和它們自身的網段192.168.0.*沖突即可)。此時:


電腦A在本地局域網中的IP地址是192.168.0.2,在虛擬局域網中的IP地址是10.0.0.1;
電腦B在本地局域網中的IP地址是192.168.0.3,在虛擬局域網中的IP地址是10.0.0.6


電腦B可以通過IP地址192.168.0.1訪問電腦A,也可以通過IP地址10.0.0.1訪問電腦A

虛擬局域網是獨立存在的,不會和本地其他網絡之間形成幹擾

不過虛擬局域網之間的相互訪問和操作方式與本地局域網的幾乎完全相同。


當然,筆者這裏由於條件限制,電腦A和電腦B本身就在同一個局域網中,並且可以互相訪問

可是在一些情況下,多臺計算機不在同一個局域網內,並且它們之間無法直接互相訪問

或者它們直接互相訪問沒有進行數據加密——不夠安全,這個時候就輪到OpenVPN出馬了


OpenVPN在安裝的時候會在電腦上安裝一個虛擬網卡驅動,並在網絡連接裏創建一個本地連接的圖標

(下圖的【本地連接2】)。OpenVPN就是靠它來搭建虛擬局域網的。

技術分享


接下來,我們正式開始安裝OpenVPN,在電腦A和電腦B上分別雙擊安裝程序進行安裝(安裝方式完全一致)

在安裝的時候,必須註意的是:在OpenVPN 2.3.0中,默認是不安裝easy-rsa

(一個加密證書生成程序)的,因此,我們必須手動勾選如下圖所示的兩個選項(在OpenVPN 2.2中是默認選中的)

技術分享

然後一路Next(如果詢問是否安裝TAP-Win32驅動程序時,請選擇「仍然繼續」),就安裝成功了。

OpenVPN的配置

OpenVPN的配置工作主要分為如下兩步:


  • 第一步,創建加密證書和私鑰,其中包括服務器端和客戶端都要用到的核心CA證書和私鑰

    服務器端自身的加密證書(即公鑰)和私鑰,以及每個客戶端對應的加密證書和私鑰。

  • 第二步,為服務器和客戶端編寫對應的配置文件

    然後將其與第一步中生成的相應證書、私鑰放在OpenVPN安裝目錄的config文件夾下。


OpenVPN支持基於加密證書的雙向認證。在OpenVPN中,不管是服務器還是客戶端

所有的證書和私鑰都需要由服務器端生成

客戶端要先獲得服務器端分配給它的加密證書和密鑰才能成功連接

這與使用網上銀行有些類似,大多數銀行網站都會要求你先下載並安裝一個數字證書

才允許你進行網上付款或其他操作。


下面我們開始具體配置:

第一步:創建加密證書和私鑰

1、修改OpenVPN服務器端vars.bat.sample文件(客戶端的無需做任何修改)。

使用記事本或其他文本編輯工具打開OpenVPN安裝目錄\easy-rsa\vars.bat.sample文件

如下圖所示:

技術分享


變量HOME表示easy-rsa文件夾的路徑 (筆者的OpenVPN服務器端安裝在D:\OpenVPN)
變量KEY_SIZE表示生成的私鑰大小,一般填寫為1024或2048,默認為1024位

你可以根據自己的需要進行修改,筆者這裏使用默認值


由於稍後給客戶端生成對應加密證書和私鑰時,程序會要求我們輸入一些註冊信息

如果你需要配置多個客戶端,並且許多信息都相同(比如國家、省市、地址、公司名稱等)

你還可以修改vars.bat.sample文件後面的一些相關變量的默認值

這樣在稍後生成客戶端證書的時候,如果該信息項不輸入就會采用默認值

技術分享


2、運行DOS命令,初始化執行環境。

在作為服務器端的電腦A上打開DOS命令窗口,並進入到%OpenVPN的安裝目錄%\easy-rsa目錄

筆者的服務器端安裝目錄是D:\OpenVPN,因此這裏進入D:\OpenVPN\easy-rsa

然後依次輸入並執行以下命令(括號內的是筆者附加的註釋):


init-config(初始化配置,將vars.bat.sample文件的內容復制到vars.bat

實際上,你也可以直接雙擊執行easy-rsa目錄下的init-config.bat文件來代替這一步。)
vars(設置相應的局部環境變量,就是我們在vars.bat.sample文件中設置的內容)
clean-all(相關設置和清理工作)

技術分享


3、創建CA根證書:build-ca

技術分享


如上圖所示,在build-ca的時候需要輸入一些註冊信息。在輸入信息的時候,如果你不輸入任何信息

就表示采用默認值(前面[]中的內容就是默認值);如果你輸入.,則表示當前信息項留空白

值得註意的是,上圖中紅色矩形框中的OpenVPN_CA是證書的通用名稱(Common Name)

相當於我們常說的賬號,你也可以自行輸入其他名稱。


4、創建服務器端證書:build-key-server server

技術分享


如上圖所示,命令中的參數server指的是生成的證書文件名稱,你可以按照自己的需要進行修改

不過後面的Common Name也應保持一致。第二個紅色矩形框中是輸入的密碼

你也可以根據意願自行輸入。最後程序會詢問你是否註冊並提交證書,兩次均輸入y即可


5、創建迪菲·赫爾曼密鑰:build-dh

技術分享


迪菲·赫爾曼密鑰交換(Diffie–Hellman key exchange,簡稱「D–H」) 是一種安全協議

它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰

這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容


6、創建客戶端證書:build-key client

技術分享


如上圖所示,命令中的參數client表示生成的證書文件名稱,你可以按照自己的需要進行修改

不過後面的Common Name也應保持一致。第二個紅色矩形框中是輸入的密碼

你也可以根據意願自行輸入。最後程序會詢問你是否註冊並提交證書,兩次均輸入y即可


如果你想創建多個不同的客戶端證書,只需要重復此步驟即可

切記,Common Name不要重復,這是OpenVPN用來區分不同客戶端的關鍵所在


7、生成ta.key:openvpn --genkey --secret keys/ta.key (可選操作)

技術分享


這一步其實是可選操作,生成的ta.key主要用於防禦DoS、UDP淹沒等惡意攻擊

命令中的第3個參數keys/ta.key表示生成的文件路徑(含文件名)

創建完證書後,我們會發現easy-rsa目錄下多了一個keys文件夾

現在我們將keys文件夾中對應的文件復制到OpenVPN服務器或客戶端的安裝目錄的config文件夾下


服務器端config目錄需要的文件包括:

ca.crt
ca.key(核心CA證書和私鑰)
dh1024.pem(如果最初的變量KEY_SIZE設為2048,這裏就是dh2048.pem)
server.crt
server.key(名稱server根據個人設置可能有所不同)
ta.key(名稱也可自行設置,如果不需要防禦攻擊,可以不創建或復制此文件)


客戶端config目錄需要的文件包括:

ca.crt
client.crt
client.key(名稱client根據個人設置可能有所不同)
ta.key(如果服務器端具備此文件,客戶端也應具備)


非常重要的提醒:以上命令都是在同一個DOS窗口中執行的

如果你以後需要打開新窗口來執行命令(比如創建新的客戶端證書):

你不需要再執行init-config命令,除非你再次改動了vars.bat.sample文件

每一次打開新窗口時都需要先執行vars命令,後面才能執行其他命令

第二步:編寫對應的配置文件

上面我們已經創建了OpenVPN配置所需要的各種證書和私鑰,現在我們開始為服務器和客戶端編寫對應的配置文件

對於一個剛剛接觸OpenVPN的人來說,我們應該配置些什麽呢,又該從哪裏入手呢?

別著急,OpenVPN已經考慮到了這一點,在OpenVPN的安裝目錄的sample-config文件夾中存放有3個示例模板文件:server.ovpn、client.ovpn、sample.ovpn。其中,server.ovpn是服務器的配置模板,client.ovpn是客戶端的配置模板(sample.ovpn也可用作客戶端配置模板,不過配置比較簡單,不夠全面。按照官方的說法,client.ovpn可用於連接具有多個客戶端的服務器端配置文件)。

現在,我們就復制server.ovpn到服務器的config目錄,client.ovpn到客戶端的config目錄,並在此基礎上進行修改

在OpenVPN的配置文件中,前面帶「#」或「;」的表示註釋內容。


1、 編輯服務器端配置文件。

server.ovpn的英文註釋中已經比較清楚地解釋了每一個設置的作用,筆者對配置文件的英文註釋作了全文翻譯

你可以點擊查看server.ovpn的配置內容詳解,在此不再贅述,下面只提取所有用到的命令。


local 192.168.0.2 #指定監聽的本機IP(因為有些計算機具備多個IP地址),該命令是可選的,默認監聽所有IP地址。
port 1194 #指定監聽的本機端口號
proto udp #指定采用的傳輸協議,可以選擇tcp或udp
dev tun #指定創建的通信隧道類型,可選tun或tap
ca ca.crt #指定CA證書的文件路徑
cert server.crt #指定服務器端的證書文件路徑
key server.key #指定服務器端的私鑰文件路徑
dh dh1024.pem #指定迪菲赫爾曼參數的文件路徑
server 10.0.0.0 255.255.255.0 #指定虛擬局域網占用的IP地址段和子網掩碼,此處配置的服務器自身占用10.0.0.1。
ifconfig-pool-persist ipp.txt #服務器自動給客戶端分配IP後,客戶端下次連接時
#仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
tls-auth ta.key 0 #開啟TLS,使用ta.key防禦攻擊。服務器端的第二個參數值為0,客戶端的為1。
keepalive 10 120 #每10秒ping一次,連接超時時間設為120秒。
comp-lzo #開啟VPN連接壓縮,如果服務器端開啟,客戶端也必須開啟
client-to-client #允許客戶端與客戶端相連接,默認情況下客戶端只能與服務器相連接
persist-key
persist-tun #持久化選項可以盡量避免訪問在重啟時由於用戶權限降低而無法訪問的某些資源。
status openvpn-status.log #指定記錄OpenVPN狀態的日誌文件路徑
verb 3 #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細


實際修改內容參見下面的截圖。

技術分享

技術分享

技術分享


2、 編輯客戶端配置文件。

client.ovpn中所有用到的命令如下:

client #指定當前VPN是客戶端
dev tun #必須與服務器端的保持一致
proto udp #必須與服務器端的保持一致
remote 192.168.0.2 1194 #指定連接的遠程服務器的實際IP地址和端口號
resolv-retry infinite #斷線自動重新連接,在網絡不穩定的情況下(例如:筆記本電腦無線網絡)非常有用。
nobind #不綁定特定的本地端口號
persist-key
persist-tun
ca ca.crt #指定CA證書的文件路徑
cert client.crt #指定當前客戶端的證書文件路徑
key client.key #指定當前客戶端的私鑰文件路徑
ns-cert-type server #指定采用服務器校驗方式
tls-auth ta.key 1 #如果服務器設置了防禦DoS等攻擊的ta.key,則必須每個客戶端開啟;如果未設置,則註釋掉這一行;
comp-lzo #與服務器保持一致
verb 3 #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細


修改完畢並保存之後,我們就可以看到在電腦A(服務器端)的OpenVPN安裝目錄的config文件夾下包含如下文件:

技術分享


在電腦B(客戶端)的OpenVPN安裝目錄的config文件夾下包含如下文件:

技術分享


最後,我們在電腦A(服務器端)的Windows運行框中輸入「services.msc」

進入windows服務界面,啟動服務「OpenVPN Service」:

技術分享


然後,我們進入電腦B,雙擊OpenVPN安裝時在桌面上生成的圖標

此時在任務欄的右下角將會出現如下圖所示的紅色小圖標,右鍵該圖標,點擊connect:

技術分享


緊接著,就會自動彈出如下窗口,右下角圖標變為黃色。

技術分享


連接成功後,窗口自動關閉,右下角的圖標變為綠色

技術分享


至此,OpenVPN就已經安裝成功了

你可以像局域網一樣地使用OpenVPN客戶端訪問服務器或其他客戶端了

必須說明的是,上面的有些操作並不是絕對的

比如:啟動OpenVPN服務器,並不一定只有「啟動OpenVPN Service服務」這一種方式

客戶端的證書也不一定非得在服務器端生成……不過這些情況相對比較復雜,再次就不多作討論了


不得不說的企業常見應用工具OpenVPN