OpenVPN 系列圖文教程之(一)—— Windows下搭建VPN服務端、客戶端配置
背景:公司移動APP需要使用VPN服務,就順便研究了一下各種VPN的搭建,突然發現買個阿里雲香港伺服器自己用也是不錯的選擇哈哈,廢話不說看教程!
本文測試環境
- 阿里雲香港 ECS 1 核 1GB(簡約型 t1, ecs.t1.small) 領取優惠券
- Windows server 2012 R2 Datacenter
- Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
- RAM 1.00 GB
目錄
一、安裝OpenVPN
1. OpenVPN官網
2. 下載安裝包
3. 安裝
① 注意勾選 EasyRSA 2 Certificate Management Scripts
② 同意安裝 TAP-Windows Provider V9 網路介面卡
③ 完成安裝
二、配置OpenVPN
1. 初始化
從我的電腦找到並進入OpenVPN安裝目錄,進入 easy-rsa 資料夾,導航欄直接輸入 cmd 即可開啟命令提示符介面
依次執行如下命令完成初始化工作:
> init-config
> vars
> clean-all
第一次執行clean-all時,提示”系統找不到指定的檔案”是正常的,不用管它。該命令會刪除掉之前生成的所有證書和金鑰檔案,以避免與之後全新生成的證書和金鑰發生衝突。
2. 生成CA根證書金鑰對
# 執行命令build-ca來生成CA根證書金鑰對。
> build-ca
如下圖所示,除了build-ca命令外,其他輸入主要用於設定根證書的簽名信息,包括國家、省、市、組織名稱、單位名稱、通用名、名稱、郵箱地址等,請根據個人需要自行輸入。輸入框前面”[]”中的內容表示預設值,如果你不輸入、直接按回車,則表示使用預設值;如果你輸入”.”則表示該欄位資訊留空。其中Common Name(通用名稱)比較重要,相當於我們常說的”賬號”(此處設為vpn_ca)
此時,我們就可以在證書存放目錄中看到生成的CA證書和私鑰檔案了。雙擊該證書,我們還可以看到剛才輸入的相關資訊。
3. 建立伺服器端證書
# 使用命令build-key-server server來建立伺服器端證書和私鑰
> build-key-server server
整個建立過程與前面建立CA根證書的流程比較類似,我們只需要注意Comman Name的引數值為”server”並隨後設定相應的密碼(這裡設為”server_pwd”,一般不會用到密碼),最後輸入兩次”y”進行確認即可。
Common Name 必須填,且不能與執行 build-dh 時相同,否則會報:failed to update database
TXT_DB error number 2找不到 C:\Program Files\OpenVPN\easy-rsa\keys*.old
4. 建立客戶端證書
# build-key <clientName> 建立客戶端證書和私鑰
# 例如build-key client1、build-key client2
> build-key client
建立客戶端證書的流程和建立伺服器端證書的流程完全一致,只需要注意Common Name欄位即可,我們這裡設定為client,密碼client_pwd
如果以後還想要建立新的客戶端,只需要先執行vars命令,再執行build-key clientName命令即可(每次開啟新的命令提示符視窗,都必須先執行vars命令,才能執行其他命令)。
5. 建立迪菲·赫爾曼交換金鑰
# 為OpenVPN的伺服器端建立迪菲·赫爾曼交換金鑰
# 迪菲·赫爾曼交換金鑰是一種安全協議,用以對資料進行加密
> build-dh
到這裡我們的證書和金鑰的建立操作就基本上完成了
三、開啟OpenVPN-Server
1. 拷貝證書
從easy-rsa/keys目錄中拷貝出伺服器端和客戶端所需的檔案,分別將其放在自己的OpenVPN安裝路徑/config目錄中。
其中,伺服器端需要用到的檔案有:
- ca.crt
- ca.key
- dh2048.pem (如果最初的變數KEY_SIZE設為1024,這裡就是dh1024.pem)
- server.crt
- server.key
客戶端client需要用到的檔案有:
- ca.crt
- client.crt
- client.key (名稱client根據個人設定可能有所不同)
2. 拷貝配置檔案
我們還需要在config目錄中各自放置一個配置檔案,伺服器端的配置檔名為server.ovpn,客戶端的配置檔案為client.ovpn。
這兩個配置檔案該如何編寫呢?OpenVPN已經在sample-config目錄中為我們提供了相關的示例檔案server.ovpn和client.ovpn,並且配置檔案中的每個配置選項均有詳細的英文說明(配置檔案中”#”或”;”開頭的均為註釋內容)。
實際上,將兩個模板檔案中與IP地址有關的配置修改一下,就可以直接拿來使用。
- server.ovpn的詳細配置
我們只需要改一行,把 tls-auth 這一行用分號註釋掉即可
local 192.168.1.101 #指定監聽的本機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.8.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-auth,使用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,等級越高日誌內容越詳細
- client.ovpn的詳細配置
我們也只需要改 2 行即可:
① remote my-server-1 1194 這一行把 my-server-1 換成剛剛伺服器的地址
② tls-auth 這一行用分號註釋掉
client #指定當前VPN是客戶端
dev tun #必須與伺服器端的保持一致
proto udp #必須與伺服器端的保持一致
remote 192.168.1.101 1194 #指定連線的遠端伺服器的實際IP地址和埠號
resolv-retry infinite #斷線自動重新連線,在網路不穩定的情況下(例如:膝上型電腦無線網路)非常有用。
nobind #不繫結特定的本地埠號
persist-key
persist-tun
ca ca.crt #指定CA證書的檔案路徑
cert client.crt #指定當前客戶端的證書檔案路徑
key client.key #指定當前客戶端的私鑰檔案路徑
remote-cert-tls server #指定採用伺服器校驗方式
;tls-auth ta.key 1 #如果伺服器設定了防禦DoS等攻擊的ta.key,則必須每個客戶端開啟;如果未設定,則註釋掉這一行;
comp-lzo #與伺服器保持一致
verb 3 #指定日誌檔案的記錄詳細級別,可選0-9,等級越高日誌內容越詳細
四、開啟OpenVPN
1. 服務端開啟
- 阿里雲安全策略的入規則要允許UPP 1194埠
- 最後關閉防火牆,或者為安裝目錄下bin/openvpn.exe新增防火牆例外
- 雙擊桌面的 OpenVPN GUI 啟動
- 如果報錯可以右鍵右下角小圖示 View log 檢視錯誤資訊,或者雙擊檢視狀態資訊
2. 客戶端開啟
- 拷貝服務端上生成的客戶端證書檔案(一共4個,3個證書金鑰和1個配置檔案),放到安裝目錄的config資料夾下
- 雙擊桌面的 OpenVPN GUI 啟動
- 檢視網路介面卡資訊,能訪問10.8.0.1的服務就代表成功了
五、通過VPN做路由
剛剛搭建的OpenVPN伺服器經過以上配置後,是能夠實現內網互通的,但是我們還想借助VPN伺服器實現外網訪問(你懂得)的話,還需要進行路由配置,詳情檢視本系列部落格的另外一篇 OpenVPN 系列圖文教程之(四)—— openvpn客戶端通過服務端訪問網路