「博客搬家」 原地址: CSDN 原發(fā)表時(shí)間: 2016-07-04
1. OpenVPN 簡(jiǎn)介
OpenVPN 是一個(gè)用于創(chuàng)建虛擬專(zhuān)用網(wǎng)絡(luò)加密通道的軟件包,最早由 James Yonan 編寫(xiě)。OpenVPN 允許創(chuàng)建的 VPN 使用公開(kāi)密鑰嚣崭、電子證書(shū)湿镀、或者用戶(hù)名/密碼來(lái)進(jìn)行身份驗(yàn)證贡歧。它大量使用了 OpenSSL 加密庫(kù)中的 SSLv3 / TLSv1 協(xié)議函數(shù)庫(kù)。目前 OpenVPN 能在 Solaris、Linux捧灰、OpenBSD、FreeBSD统锤、NetBSD毛俏、Mac OS X 與 Microsoft Windows 以及 Android 和 iOS 上運(yùn)行,并包含了許多安全性的功能饲窿。它并不是一個(gè)基于 Web 的 VPN 軟件煌寇,也不與 IPsec 及其他 VPN 軟件包兼容。
1.1 OpenVPN 的配置原理
OpenVPN 的配置工作主要分為如下兩步:
第一步逾雄,創(chuàng)建加密證書(shū)和私鑰阀溶,其中包括服務(wù)器端和客戶(hù)端都要用到的核心 CA 證書(shū)和私鑰,服務(wù)器端自身的加密證書(shū)(即公鑰)和私鑰鸦泳,以及每個(gè)客戶(hù)端對(duì)應(yīng)的加密證書(shū)和私鑰银锻。
第二步,為服務(wù)器和客戶(hù)端編寫(xiě)對(duì)應(yīng)的配置文件做鹰,然后將其與第一步中生成的相應(yīng)證書(shū)击纬、私鑰放在 OpenVPN 安裝目錄的 config 文件夾下。
OpenVPN 支持基于加密證書(shū)的雙向認(rèn)證钾麸。在 OpenVPN 中更振,不管是服務(wù)器還是客戶(hù)端,所有的證書(shū)和私鑰都需要由服務(wù)器端生成饭尝,客戶(hù)端要先獲得服務(wù)器端分配給它的加密證書(shū)和密鑰才能成功連接肯腕。這與使用網(wǎng)上銀行有些類(lèi)似,大多數(shù)銀行網(wǎng)站都會(huì)要求你先下載并安裝一個(gè)數(shù)字證書(shū)钥平,才允許你進(jìn)行網(wǎng)上付款或其他操作实撒。
1.2 OpenVPN 的下載
在 OpenVPN 的官網(wǎng)上,打開(kāi)如下網(wǎng)頁(yè):
https://openvpn.net/index.php/download/community-downloads.html
使用圖片所示內(nèi)容最后的下載鏈接,可下載到適用于 Windows Vista 及之后版本 Windows 系統(tǒng)的安裝文件奈惑。本文以 OpenVPN 2.3.11 版本為例簡(jiǎn)要介紹 OpenVPN 的安裝吭净、配置、使用方法肴甸。
2. OpenVPN 服務(wù)器端的配置
2.1 OpenVPN 的安裝
打開(kāi) OpenVPN 的安裝程序進(jìn)行安裝寂殉。在安裝的過(guò)程中,要求選擇安裝內(nèi)容原在,默認(rèn)未選中 easy-rsa 「加密證書(shū)生成程序」友扰,因此,我們必須手動(dòng)勾選未選中的兩個(gè)選項(xiàng)庶柿,之后如若詢(xún)問(wèn)是否安裝 TAP-Win32 驅(qū)動(dòng)程序村怪,確認(rèn)安裝即可。
2.2 創(chuàng)建加密證書(shū)和私鑰
1浮庐、使用文本編輯器 以管理員權(quán)限 打開(kāi)并修改 OpenVPN 服務(wù)器端的 vars.bat.sample 文件「客戶(hù)端的無(wú)需做任何修改」甚负。vars.bat.sample 文件位于:
OpenVPN\easy-rsa\vars.bat.sample
文本內(nèi)容部分摘錄如下:
set HOME=%ProgramFiles%\OpenVPN\easy-rsa
//變量HOME表示easy-rsa文件夾的路徑
set KEY_CONFIG=openssl-1.0.0.cnf
//變量KEY_SIZE表示生成的私鑰大小,一般填寫(xiě)為1024或2048审残,默認(rèn)為1024位梭域,可根據(jù)自己的需要進(jìn)行修改。
//由于稍后給客戶(hù)端生成對(duì)應(yīng)加密證書(shū)和私鑰時(shí)搅轿,程序會(huì)要求我們輸入一些注冊(cè)信息病涨。建議修改相關(guān)變量的默認(rèn)值,這樣在稍后生成客戶(hù)端證書(shū)的時(shí)候璧坟,如果該信息項(xiàng)不輸入就會(huì)采用默認(rèn)值既穆。
set KEY_COUNTRY=CN //國(guó)家(注:必須為兩位字符)
set KEY_PROVINCE=GuangXi //省份
set KEY_CITY=GuiLin //城市
set KEY_ORG=GUET //機(jī)構(gòu)
set KEY_EMAIL=***@126.com //郵箱
set KEY_CN=changeme //證書(shū)的通用名稱(chēng)(Common Name),相當(dāng)于帳戶(hù)名 (eg, your name or your server's hostname)
set KEY_NAME=changeme //用戶(hù)姓名
set KEY_OU=changeme //部門(mén)名 Organizational Unit Name (eg, section)
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234
按照如上所述進(jìn)行修改,修改完畢后雀鹃,保存幻工,接下來(lái)進(jìn)行配置操作
2.3 使用控制臺(tái)創(chuàng)建服務(wù)端和客戶(hù)端證書(shū)
在作為服務(wù)器端的電腦上,以管理員權(quán)限 打開(kāi) cmd , 并進(jìn)入到
OpenVPN\easy-rsa
然后依次執(zhí)行如下命令:
1. init-config「初始化配置褐澎,將 vars.bat.sample 文件的內(nèi)容復(fù)制到 vars.bat会钝。實(shí)際上,你也可以直接雙擊執(zhí)行 easy-rsa 目錄下的 init-config.bat 文件來(lái)代替這一步工三∏ㄋ幔」
2. vars「設(shè)置相應(yīng)的局部環(huán)境變量,就是我們?cè)?vars.bat.sample 文件中設(shè)置的內(nèi)容」
3. clean-all「相關(guān)設(shè)置和清理工作」
命令執(zhí)行結(jié)果如下所示:
Microsoft Windows [版本 10.0.10586]
(c) 2015 Microsoft Corporation俭正。保留所有權(quán)利奸鬓。
C:\Windows\system32>cd C:\Program Files\OpenVPN\easy-rsa
C:\Program Files\OpenVPN\easy-rsa>init-config
C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
已復(fù)制 1 個(gè)文件。
C:\Program Files\OpenVPN\easy-rsa>vars
C:\Program Files\OpenVPN\easy-rsa>clean-all
系統(tǒng)找不到指定的文件掸读。 //有時(shí)候會(huì)出現(xiàn)此句提示串远,可以被忽略
已復(fù)制 1 個(gè)文件宏多。
已復(fù)制 1 個(gè)文件。
接下來(lái)執(zhí)行如下命令:
4. build-ca「創(chuàng)建 CA 根證書(shū)及 key」
此處可修改此前預(yù)先設(shè)置的注冊(cè)信息澡罚。
5. build-key-server server「創(chuàng)建服務(wù)端證書(shū)及 key伸但,其中『server』可以自由設(shè)定」
命令執(zhí)行結(jié)果如下所示:
C:\Program Files\OpenVPN\easy-rsa>build-key-server server
Common Name (eg, your name or your server's hostname) [changeme]:此處輸入賬戶(hù)名
A challenge password []:此處輸入密碼
Certificate is to be certified until Jul 2 12:07:01 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
命令中的參數(shù) server
指的是生成的證書(shū)文件名稱(chēng),你可以按照自己的需要進(jìn)行修改留搔,不過(guò)后面的 Common Name
也應(yīng)保持一致更胖。最后程序會(huì)詢(xún)問(wèn)你是否注冊(cè)并提交證書(shū),兩次均輸入 y 即可隔显。
6. build-dh「創(chuàng)建迪菲·赫爾曼密鑰却妨,生成 1024 bit 的key」
迪菲·赫爾曼密鑰交換「Diffie–Hellman key exchange , 簡(jiǎn)稱(chēng)『D–H』」是一種安全協(xié)議。它可以讓雙方在完全沒(méi)有對(duì)方任何預(yù)先信息的條件下通過(guò)不安全信道創(chuàng)建起一個(gè)密鑰括眠。這個(gè)密鑰可以在后續(xù)的通訊中作為對(duì)稱(chēng)密鑰來(lái)加密通訊內(nèi)容彪标。
7. build-key client「創(chuàng)建客戶(hù)端證書(shū)及 key , 其中 `client` 可以自由設(shè)定」
此處如同第 5 步服務(wù)器部分的設(shè)置。
8. openvpn --genkey --secret keys/ta.key「可選操作掷豺,生成 ta.key」
這一步是可選操作捞烟,生成的 ta.key 主要用于防御 DoS、UDP 淹沒(méi)等惡意攻擊萌业。命令中的第 3 個(gè)參數(shù) keys / ta.key 表示生成的文件路徑「含文件名」坷襟。
創(chuàng)建完證書(shū)后奸柬,我們會(huì)發(fā)現(xiàn) easy-rsa 目錄下多了一個(gè) keys 文件夾生年。但如果參數(shù)填寫(xiě)不恰當(dāng),可能生成一些 0 字節(jié)的 crt 文件廓奕,那么就得重新生成證書(shū)抱婉。生成結(jié)束后,可按照如下表格分別將文件拷貝到客戶(hù)端和服務(wù)端的 config 目錄中桌粉。
服務(wù)器端 config 目錄需要的文件包括:
文件名 | 位置 | 用途 | 保密 | 備注 |
---|---|---|---|---|
ca.crt | server + all clients | Root CA certificate | NO | 核心 CA 證書(shū) |
ca.key | key signing machine only | Root CA key | YES | 核心 CA 私鑰 |
dh1024.pem | server only | Diffie Hellman parameters | NO | 如果最初的變量 KEY_SIZE 設(shè)為 2048蒸绩,這里就是 dh2048.pem |
server.crt | server only | Server Certificate | NO | 名稱(chēng) server 根據(jù)個(gè)人設(shè)置有所不同 |
server.key | server only | Server Key | YES | 名稱(chēng) server 根據(jù)個(gè)人設(shè)置有所不同 |
ta.key | server + all clients | 防御 DoS、UDP 淹沒(méi)等惡意攻擊 | YES | 名稱(chēng)也可自行設(shè)置铃肯,如果不需要防御攻擊患亿,可以不創(chuàng)建或復(fù)制此文件 |
客戶(hù)端 config 目錄需要的文件包括:
文件名 | 位置 | 用途 | 保密 | 備注 |
---|---|---|---|---|
ca.crt | server + all clients | Root CA certificate | NO | 核心 CA 證書(shū) |
client.crt | client only | Client Certificate | NO | 名稱(chēng) client 根據(jù)個(gè)人設(shè)置有所不同 |
client1.key | client only | Client Key | YES | 名稱(chēng) client 根據(jù)個(gè)人設(shè)置有所不同 |
ta.key | server + all clients | 防御 DoS、UDP 淹沒(méi)等惡意攻擊 | YES | 名稱(chēng)也可自行設(shè)置押逼,如果不需要防御攻擊步藕,可以不創(chuàng)建或復(fù)制此文件 |
重要提醒:以上命令都在同一 cmd 中執(zhí)行,如果你以后需要打開(kāi)新窗口來(lái)執(zhí)行命令(比如創(chuàng)建新的客戶(hù)端證書(shū)):你不需要再執(zhí)行 init-config 命令挑格,除非你再次改動(dòng)了 vars.bat.sample 文件咙冗;每一次打開(kāi)新窗口時(shí)都需要先執(zhí)行 vars 命令,后面才能執(zhí)行其他命令漂彤。
附:若要撤銷(xiāo) client2 證書(shū)雾消,則執(zhí)行以下命令:
vars
revoke-full client2
此時(shí)得到 crl.pem 文件灾搏,之后在服務(wù)端執(zhí)行如下命令:
crl-verify crl.pem
3. 配置文件的修改與部署
上面已創(chuàng)建 OpenVPN 配置所需要的各種證書(shū)和私鑰,現(xiàn)在可以為服務(wù)器和客戶(hù)端設(shè)置對(duì)應(yīng)的配置文件立润。
在 OpenVPN 的安裝目錄的 sample-config 文件夾中存放有 3 個(gè)示例模板文件 : server.ovpn蓝谨、client.ovpn、sample.ovpn 咳焚。其中:
- server.ovpn 是服務(wù)器的配置模板
- client.ovpn 是客戶(hù)端的配置模板
- sample.ovpn 也可用作客戶(hù)端配置模板脓杉,不過(guò)配置比較簡(jiǎn)單,不夠全面到旦。
按照官方的說(shuō)法 , client.ovpn 可用于連接具有多個(gè)客戶(hù)端的服務(wù)器端旨巷。
復(fù)制 server.ovpn 到服務(wù)器的 config 目錄 , client.ovpn 到客戶(hù)端的 config 目錄,并在此基礎(chǔ)上進(jìn)行修改添忘。在 OpenVPN 的配置文件中采呐,前面帶「#」或「;」的表示注釋內(nèi)容。
3.1 配置文件的簡(jiǎn)單使用
- 修改客戶(hù)端的 client.ovpn 的 remote 項(xiàng)搁骑,讓它指向服務(wù)端外部 IP 地址斧吐,格式例如 : remote x.x.x.x 1194 , 1194 是服務(wù)端定義的端口,這個(gè)可以通過(guò)服務(wù)端的配置文件修改仲器,服務(wù)端和客戶(hù)端端口必須匹配煤率。
- 證書(shū):在第 92, 93 行的「大概」位置,修改指定的 crt 和 key 文件乏冀,與之生成的證書(shū)文件名匹配蝶糯。
3.2 編輯服務(wù)器端配置文件
server.ovpn 中所有用到的命令如下 :
local 192.168.0.2 #指定監(jiān)聽(tīng)的本機(jī) IP「因?yàn)橛行┯?jì)算機(jī)具備多個(gè)IP地址」,該命令是可選的辆沦,默認(rèn)監(jiān)聽(tīng)所有 IP 地址昼捍。
port 1194 #指定監(jiān)聽(tīng)的本機(jī)端口號(hào)
proto udp #指定采用的傳輸協(xié)議,可以選擇 tcp 或 udp
dev tun #指定創(chuàng)建的通信隧道類(lèi)型肢扯,可選 tun 或 tap
ca ca.crt #指定 CA 證書(shū)的文件路徑
cert server.crt #指定服務(wù)器端的證書(shū)文件路徑
key server.key #指定服務(wù)器端的私鑰文件路徑
dh dh1024.pem #指定迪菲赫爾曼參數(shù)的文件路徑
server 10.0.0.0 255.255.255.0 #指定虛擬局域網(wǎng)占用的 IP 地址段和子網(wǎng)掩碼妒茬,此處配置的服務(wù)器自身占用 10.0.0.1。
ifconfig-pool-persist ipp.txt #服務(wù)器自動(dòng)給客戶(hù)端分配 IP 后蔚晨,客戶(hù)端下次連接時(shí)乍钻,仍然采用上次的 IP 地址(第一次分配的IP保存在 ipp.txt中,下一次分配其中保存的 IP)铭腕。
tls-auth ta.key 0 #開(kāi)啟 TLS银择,使用 ta.key 防御攻擊。服務(wù)器端的第二個(gè)參數(shù)值為 0谨履,客戶(hù)端的為 1欢摄。
keepalive 10 120 #每 10 秒 ping 一次,連接超時(shí)時(shí)間設(shè)為 120 秒笋粟。
comp-lzo #開(kāi)啟 VPN 連接壓縮怀挠,如果服務(wù)器端開(kāi)啟析蝴,客戶(hù)端也必須開(kāi)啟
client-to-client #允許客戶(hù)端與客戶(hù)端相連接,默認(rèn)情況下客戶(hù)端只能與服務(wù)器相連接
persist-key
persist-tun #持久化選項(xiàng)可以盡量避免訪(fǎng)問(wèn)在重啟時(shí)由于用戶(hù)權(quán)限降低而無(wú)法訪(fǎng)問(wèn)的某些資源绿淋。
status openvpn-status.log #指定記錄 OpenVPN 狀態(tài)的日志文件路徑
verb 3 #指定日志文件的記錄詳細(xì)級(jí)別闷畸,可選 0 - 9,等級(jí)越高日志內(nèi)容越詳細(xì)
3.3 編輯客戶(hù)端配置文件
client.ovpn 中所有用到的命令如下 :
client #指定當(dāng)前 VPN 是客戶(hù)端
dev tun #必須與服務(wù)器端的保持一致
proto udp #必須與服務(wù)器端的保持一致
remote 192.168.0.2 1194 //指定連接的遠(yuǎn)程服務(wù)器的實(shí)際 IP 地址和端口號(hào)
resolv-retry infinite #斷線(xiàn)自動(dòng)重新連接吞滞,在網(wǎng)絡(luò)不穩(wěn)定的情況下「例如:筆記本電腦無(wú)線(xiàn)網(wǎng)絡(luò)」非常有用佑菩。
nobind #不綁定特定的本地端口號(hào)
persist-key
persist-tun
ca ca.crt #指定 CA 證書(shū)的文件路徑
cert client.crt //指定當(dāng)前客戶(hù)端的證書(shū)文件路徑
key client.key //指定當(dāng)前客戶(hù)端的私鑰文件路徑
ns-cert-type server #指定采用服務(wù)器校驗(yàn)方式
tls-auth ta.key 1 //如果服務(wù)器設(shè)置了防御 DoS 等攻擊的 ta.key,則必須每個(gè)客戶(hù)端開(kāi)啟裁赠;如果未設(shè)置殿漠,則注釋掉這一行;
comp-lzo #與服務(wù)器保持一致
verb 3 #指定日志文件的記錄詳細(xì)級(jí)別佩捞,可選 0 - 9绞幌,等級(jí)越高日志內(nèi)容越詳細(xì)
4. OpenVPN 的啟用
生成、修改一忱、保存完畢后莲蜘,我們可以在服務(wù)器端及客戶(hù)端分別配置如下內(nèi)容:
在服務(wù)器端 OpenVPN 安裝目錄的 config 文件夾下應(yīng)包含如下文件:
在客戶(hù)端 OpenVPN 安裝目錄的 config 文件夾下應(yīng)包含如下文件: