步驟一:安裝OpenVPN服務
下載最新版本的OpenVPN服務端,可以從這個地址下載:
下載的文件名為:OpenVPN-2.5.5-I602-amd64.msi
雙擊安裝,選擇“Customize”
默認情況下不會安裝的兩個特性,我們需要在安裝過程中進行選擇。
- OpenVPN Service
- OpenSSL Utilities
點擊install now
安裝完成后,點擊close。
這時會彈出一個提醒框,提示沒有找到可連接的配置文件,現在不用管它,點擊ok即可。
我們打開網絡和共享中心,點擊更改適配器設置,可以看到多了兩個網絡連接
步驟二:設置CA證書、生成服務端和客戶端的證書和私鑰等
找到目錄“C:\Program Files\OpenVPN\easy-rsa”,將文件vars.example復制一份改名為vars,“vars”文件包含內置的Easy-RSA配置設置。可以保持默認設置,也可以自定義更改。
屬性 | 默認值 | 作用 |
---|---|---|
set_var EASYRSA |
C:\Program Files\OpenVPN\easy-rsa | Defines the folder location of easy-rsa scripts |
set_var EASYRSA_OPENSSL | C:\Program Files\OpenVPN\bin\openssl.exe | Defines the OpenSSL binary path |
set_var EASYRSA_PKI | C:\Program Files\OpenVPN\easy-rsa\pki | The folder location of SSL/TLS file exists after creation |
set_var EASYRSA_DN |
cn_only |
This is used to adjust what elements are included in the Subject field as the DN |
set_var EASYRSA_REQ_COUNTRY |
“US” | Our Organisation Country |
set_var EASYRSA_REQ_PROVINCE |
“California” | Our Organisation Province |
set_var EASYRSA_REQ_CITY | “San Francisco” | Our Organisation City |
set_var EASYRSA_REQ_ORG | “Copyleft Certificate Co” | Our Organisation Name |
set_var EASYRSA_REQ_EMAIL | “me@example.net” | Our Organisation contact email |
set_var EASYRSA_REQ_OU | “My Organizational Unit” | Our Organisation Unit name |
set_var EASYRSA_KEY_SIZE |
2048 |
Define the key pair size in bits |
set_var EASYRSA_ALGO |
rsa | The default crypt mode |
set_var EASYRSA_CA_EXPIRE |
3650 | The CA key expire days |
set_var EASYRSA_CERT_EXPIRE |
825 |
The Server certificate key expire days |
set_var EASYRSA_NS_SUPPORT |
“no” | Support deprecated Netscape extension |
set_var EASYRSA_NS_COMMENT | “HAKASE-LABS CERTIFICATE AUTHORITY” | Defines NS comment |
set_var EASYRSA_EXT_DIR | "$EASYRSA/x509-types" |
Defines the x509 extension directory |
set_var EASYRSA_SSL_CONF |
"$EASYRSA/openssl-easyrsa.cnf" |
Defines the openssl config file location |
set_var EASYRSA_DIGEST |
"sha256" |
Defines the cryptographic digest to use |
如沒有特殊要求,則vars文件保持默認即可。
現在打開cmd(管理員權限),切換到“C:\Program Files\OpenVPN\easy-rsa”目錄下
cd C:\Program Files\OpenVPN\easy-rsa
EasyRSA-Start.bat
輸入EasyRSA-Start.bat回車后,我們會進入到easy-rsa3的shell會話
執行init-pki來創建pki目錄
./easyrsa init-pki
現在,使用下面的命令構建證書頒發機構(CA)密鑰。這個CA根證書文件稍后將用於簽署其他證書和密鑰。我們使用的“nopass”選項用於禁用密碼。
./easyrsa build-ca nopass
命令將被要求輸入通用名稱。這里我輸入的VPN服務器主機名是OPENVPNSERVER,這是一種常見的做法。在這里,我們可以自由使用任何名稱或值。同時創建的CA證書將被保存到文件夾“C:\Program Files\OpenVPN\easy-rsa\pki”,文件名為“ca .crt”。請參考下面的截圖。
現在使用下面的命令構建一個服務器證書和密鑰。這里將< SERVER >替換為您自己的服務器名。我還使用Option nopass來禁用密碼。
./easyrsa build-server-full <SERVER> nopass
頒發的服務器證書將在“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夾中,文件名為SERVER .crt。
這里可以使用以下命令進行驗證,返回ok就沒問題
openssl verify -CAfile pki/ca.crt pki/issued/SERVER.crt
現在,使用下面的命令構建客戶端證書和密鑰。將< CLIENT >替換為您的客戶端名稱。也使用選項nopass來禁用密碼。
./easyrsa build-client-full <CLIENT> nopass
頒發的客戶端證書也會被保存到“C:\Program Files\OpenVPN\easy-rsa\pki\issued”文件夾中,文件名為“CLIENT.crt”。
同樣這里可以使用以下命令進行驗證,返回ok就沒問題
openssl verify -CAfile pki/ca.crt pki/issued/CLIENT.crt
到這里就完成了CA證書,服務器和客戶端證書的生成和密鑰。這些密鑰將用於OpenVPN服務器和客戶端之間的身份驗證。
現在生成一個用於標准RSA證書/密鑰之外的共享密鑰。文件名為tls-auth.key。
使用這個密鑰,我們啟用TLS -auth指令,它添加一個額外的HMAC簽名到所有SSL/TLS握手包的完整性驗證。任何不帶有正確HMAC簽名的UDP包可以被丟棄而無需進一步處理。
啟用tls-auth可以保護我們免受:
- OpenVPN UDP端口上的DoS攻擊或端口泛洪。
- 端口掃描,以確定哪些服務器UDP端口處於偵聽狀態。
- SSL/TLS實現中的緩沖區溢出漏洞。
- 從未經授權的機器發起SSL/TLS握手。
首先使用GitHub鏈接https://github.com/TinCanTech/easy-tls下載Easy-TLS。它是一個Easy-RSA擴展工具,我們正在使用它來生成tls-auth密鑰。
單擊code選項卡下的Download zip選項。請參考下面的截圖。
然后解壓“easy-tls-master”文件夾,將“easytls”和“easytls-openssl.cnf”文件拷貝到“C:\Program files \OpenVPN\easy-rsa”目錄下。查看下面的截圖作為參考。
現在回到EasyRSA shell提示符並輸入下面的命令。初始化easy-tls腳本程序。
./easytls init-tls
現在,使用下面的命令生成tls-auth密鑰。
./easytls build-tls-auth
該命令將生成名為“tls-auth”的密鑰文件。在“C:\Program Files\OpenVPN\easy-rsa\pki\easytls”文件夾下。請參考下面的截圖。
現在我們需要生成Diffie Hellman參數
OpenVPN服務器必須要生成Diffie Hellman參數
這些參數定義了OpenSSL如何執行Diffie-Hellman (DH)密鑰交換。Diffie-Hellman密鑰交換是一種通過公共信道安全地交換密碼密鑰的方法
發出下面的命令,從EasyRSA shell生成Diffie Hellman參數(這個過程可能需要1分鍾左右時間)
./easyrsa gen-dh
該命令將在“C:\Program Files\OpenVPN\easy-rsa\pki”文件夾下創建dh文件,文件名為“dh .pem”。請參考下面的截圖。
這就完成了OpenVPN服務所需的SSL/TLS密鑰文件的生成。我們將能夠在下面的文件夾中找到創建的文件。
目錄 | 內容 |
---|---|
C:\Program Files\OpenVPN\easy-rsa\pki | CA file, DH file and other OpenSSL related files like config file |
C:\Program Files\OpenVPN\easy-rsa\pki\private | Include the private key files of CA, Server and Client certificates |
C:\Program Files\OpenVPN\easy-rsa\pki\easytls | Contains the tls-auth key |
C:\Program Files\OpenVPN\easy-rsa\pki\issued | Contains issued Server and Client certificates |
下面是有關文件的簡短說明
Filename | Needed By | Purpose | Secret |
---|---|---|---|
ca.crt | server + all clients | Root CA certificate | No |
ca.key | Server Only | Root CA key | YES |
dh.pem | server only | Diffie Hellman parameters | No |
SERVER.crt | server only | Server Certificate | No |
SERVER.key | server only | Server Key | Yes |
CLIENT.crt | Client only | Client Certificate | No |
CLIENT.key | Client only | Client Key | Yes |
tls-auth.key | server + all clients | Used for tls-auth directive | No |
步驟三:配置ip轉發和網絡共享
打開注冊表,win+R,輸入regedit.exe,依次找到:HKEY LOCAL MACHINESYSTEM\CurrentControlSet\Services\Tcpip\Parameters將IPEableRouter值改為1,如下圖
然后打開控制面板,找到“控制面板\網絡和 Internet\網絡連接”,右鍵點擊“以太網”,點擊“屬性”,在“共享”中鈎上“允許其他網絡用戶通過此計算機的internet連接來連接”,並選擇“OpenVPN TAP-Windows6”,點擊確定。
步驟四:創建服務端配置文件
首先打開Windows資源管理器,進入C:\Program Files\OpenVPN\sample-config文件夾,將server.ovpn文件復制一份到C:\Program Files\OpenVPN\config目錄下。
同時將以下文件一並復制到C:\Program Files\OpenVPN\config目錄下
- ca.crt
- dh.pem
- SERVER.crt
- SERVER.key
- tls-auth.key
編輯server.ovpn文件,修改以下地方,其他保持默認即可
local x.x.x.x # 這個是服務器的內網IP地址,或者保持默認
ca ca.crt
cert SERVER.crt
key SERVER.key
dh dh.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114" # 可以改成其他的DNS服務器
push "dhcp-option DNS 8.8.8.8"
tls-auth tls-auth.key 0 # This file is secret
cipher AES-256-GCM
點擊連接,圖標變綠就正常。
配置客戶端
復制以下文件到你的客戶端,並且在同一目錄下
- ca.crt
- CLIENT.crt
- CLIENT.key
- tls-auth.key
- client.ovpn(“C:\Program Files\OpenVPN\sample-config”)
編輯client.ovpn,修改以下參數,其他保持默認
remote *.*.*.* 1194 # 服務器公網IP地址
ca ca.crt
cert CLIENT.crt
key CLIENT.key
tls-auth tls-auth.key 1
cipher AES-256-GCM
下載對應系統的客戶端
OpenVPN Connect Client | Our Official VPN Client | OpenVPN
如windows系統,將client.ovpn文件拖入客戶端界面即可,如下
隨后點擊連接,出現如下界面則表示連接成功
這時ping一下10.8.0.1測試是否連通,ping下百度測試DNS是否正常。
這就成功了。
吊銷客戶端證書
當我們創建了多個用戶使用,然后某些原因,個別用戶需要禁用的時候,我們就可以使用吊銷證書的方式來處理。
首先在你的OpenVPN服務器上,打開cmd管理員權限窗口,進入目錄“C:\Program Files\OpenVPN\easy-rsa\”
cd "C:\Program Files\OpenVPN\easy-rsa"
EasyRSA-Start.bat
進入easyrsa的shell界面
輸入以下命令
./easyrsa revoke <client> # 你要吊銷的客戶端名
./easyrsa gen-crl # 生成crl.pem文件,用來記錄吊銷的證書
編輯server.ovpn(“C:\Program Files\OpenVPN\config”下),在行尾加入一行
crl-verify "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\crl.pem" # 用來告知服務端有哪些證書是被吊銷的
這一步如果不做則不會生效,添加了這行之后,服務端重連一下即可。
參考:
https://supporthost.in/how-to-setup-openvpn-on-windows-server-2019/