2016年7月11日 星期一

[文章備份-Artcle backup] OpenVPN配置&基礎應用(for Windows)


文章及所有權都歸來源作者所有,此部份僅做備份供參考,
若有侵權請告知撤下文章,謝謝。
來源[source] http://m.blog.csdn.net/article/details?id=45871043






OpenVPN配置&基礎應用(for Windows)

发表于2015/5/20 15:03:26  232人阅读
分类: Windows 网络
OpenVPN是一款開源軟件,因其支持多系統(Mac OS/Android/Windows/Linux等)、安全性較高(支持證書、密鑰、用戶名/密碼驗證)、
傳輸加密(OpenSSL庫加密)等優點,贏得了大家的喜愛。 (這個軟件性質比較敏感, 在此不做太多的介紹, 你懂的!)

本文在 Windows 環境下安裝並測試  OpenVPN 基本功能

目的:
1) 了解OpenVPN安裝/配置方法
2) 掌握證書+用戶名/密碼驗證配置方法
3)  測試 OpenVPN + NAT 組合功能

資源:
1) 安裝軟體: 
    openvpn-install-2.3.6-I601-i686.exe (用於 32bit windows vista/7/2008 或更高版本)
    openvpn-install-2.3.6-I001-i686.exe (用於 32bit windows NT/XP/2003)
2) 因OpenVPN官方網站一般情況下是無法打開的, 需要透過其它途徑獲得其安裝資料
     1) 目前為止發現的一份比較詳細的 OpenVPN 配置表
          參考網址: http://iteches.com/archives/37999
     2) CSDN的一份比較好的資料
          參考網址: http://blog.csdn.net/joyous/article/details/8034132
3) 硬體:不需要特別的硬件資料, 2台普通PC或者VM, 共中1台有雙網卡和對應網絡即可滿足基本功能測試需求

OpenVPN測試環境網絡結構:(採用內網模擬 Internet 環境)

一、OpenVPN安裝及配置
  • Server ip: 10.1.1.168
  • Client ip: 10.1.1.147
1. 安裝 OpenVPN
   執行OpenVPN安裝程序, 建議安裝時鉤選全部組件, 安裝過程省略
   安裝目錄為 C:\Program Files\OpenVPN, 64位系統默認安裝目錄為 C:\Program Files (x86)\OpenVPN, 當然, 安裝時可以修改
   

2. 配置 Server 端
1) 初始化設置
   修改文件 C:\Program Files\OpenVPN\easy-rsa\vars.bat.sample 的以下欄位, 其它欄位保持不變
   ------------------- vars.bat.sample -------------------
rem 安裝目錄
set HOME=%ProgramFiles%\OpenVPN\easy-rsa
rem 國別
set KEY_COUNTRY=CN
rem 省份
set KEY_PROVINCE=GuangDong
rem 城市
set KEY_CITY=ShenZhen
rem 組織
set KEY_ORG=OpenVPN
rem 郵箱
set KEY_EMAIL=mail@host.domain
   ------------------- vars.bat.sample -------------------
   
   打開 cmd.exe, 進入到 C:\Program Files\OpenVPN\easy-rsa 目錄, 依次執行
   > init-config
   > vars
   > clean-all
   
   
2) 制作證書,  依次執行以下命令
   > build-ca
   

   > build-dh
   

   行成服務端鑰密, 執行以下命令, 並輸入對應欄位
   > build-key-server server
   
   

   生成客戶端證書, 按同樣的方法可以生成多個客戶端證書, 執行以下命令
   > build-key client1      (表示生成客戶端帳號 client1 的證書)
   
   

   生成 ta.key 文件
   > openvpn --genkey --secret keys/ta.key
   

   新建立的證書存放在 C:\Program Files\OpenVPN\easy-rsa\keys
   將新建的證書拷貝到 C:\Program Files\OpenVPN\config,  (ta.key, ca.crt, dh1024.pem, server.key, server.crt)
   

3) 建立服務器配置文件
   進入到目錄 C:\Program Files\OpenVPN\config, 新建 server.ovpn 文件
   提醒:1)正常情況下, C:\Program Files\OpenVPN\sample-config 目錄下基本參數配置的樣本.
                2)不同版本的參數配置稍有差異,建議參考所使用版本所對應的文檔

   ------------------- server.ovpn -------------------
# 服務器本地IP
local 10.1.1.168
# OpenVPN連接端口
port 1194
# 通過tcp協議, 其它選項: proto udp-server
proto tcp-server
# 內部工作模式,其它選項 dev tun
dev tap
# 指定服務器VPN虛擬IP地址
server 172.1.1.0 255.255.255.0
# 配置CA證書
ca ca.crt
# 配置服務器證書
cert server.crt
# 配置服務器Key文件
key server.key
# 指定 Diffie Hellman參數文件
dh dh1024.pem
# 配置固定客戶端IP地址時, 指定配置文件存放目錄, 以下表示目錄為 ...\openvpn\config\ccd
#client-config-dir ccd
# 配置存活時間, 20 秒ping一次對方, 當180秒沒有得到回應後重啟
keepalive 20 180
# 在tls控制通道上另加一個認證層來防止 DoS 攻擊, 0或1控制密鑰方向
tls-auth ta.key 0
# 當需要第3方程序(exe/bat/cmd/ Linux下使用sh等)來驗證用戶名和密碼登陸時,需要加上這一行
#script-security 3 system
# 指定服務器驗證用戶名和密碼的程序為checkpsw.cmd, checkpsw.cmd 指定回 0 表示驗證通過, 1 表示驗證失敗
# via-env 表示通過環境變量來傳遞用戶名和密碼, %username% %password%, 其它選項  via-file
#auth-user-pass-verify checkpsw.cmd via-env
# 如需取消證書驗證, 就加上這一行
#client-cert-not-required
# 驗證用戶名和密碼時, 使用OS登陸的用戶名, 這一行配合 auth-user-pass-verify 使用
#username-as-common-name
# 指定vpn用戶端的DNS服務器
push "dhcp-option DNS 10.1.1.8"
# 在tls 握手階段使用 tls 並使用服務器規則
tls-server
# 配置 log 文件
status openvpn-status.log
# 用快速 lzo 壓縮, 對未壓縮的每個數據包可能增加一個字節
comp-lzo
# 指定輸出內容的級別, 其它選項 0 - 11
verb 4
   ------------------- server.ovpn -------------------
   提醒:server.ovpn 文件少數是必須配置項, 如: 服務器IP/證書等, 大部分參數可供實際需求選擇使用

   4) 安裝&配置客戶端
   客戶端的安裝程序與服務器一樣, 按照默認選項安裝即可
   將服務器上的 ta.key, ca.crt, client1.crt, client1.key 拷貝到客戶端的 openvpn\config 目錄
   提醒:也就是說, 需要連接哪一台 openvpn 就需要這台服務器的CA證書
   在 openvpn\config 目錄生成 client.ovpn 配置文件
   ------------------- client.ovpn -------------------
#  Client
client
# 工作模式, 與Server端保持一樣
dev tap
# 通訊協議, 其它選項: udp-client
proto tcp-client
# 配置服務器IP地址和端口, 也可以使用port 1194單獨指定端口
remote 10.1.1.168 1194
# 當主機DNS解析失敗後, 重新嘗試多少秒,  infinite 表示無限重試, 其它參數: 數字(單位:秒)
resolv-retry infinite
# 不綁定到本機端口
nobind
# 不輸出 replay 警告
mute-replay-warnings
# 指定CA證書(需與服務器CA證書一致)
ca ca.crt
# 指定客戶端證書
cert client1.crt
# 指定客戶端 Key 文件
key client1.key
# 啟用用戶名密碼驗證
# auth-user-pass
# cache 不保存用戶名和密碼
# auth-nocache
# 證書驗證類型:由 server 簽發
ns-cert-type server
# 在tls控制通道上另加一個認證層來防止 DoS 攻擊, 0或1控制密鑰方向
tls-auth ta.key 1
# 用快速 lzo 壓縮, 對未壓縮的每個數據包可能增加一個字節
comp-lzo
# 指定輸出內容的級別, 其它選項 0 - 11
verb 4
# 指定 log 文件
status openvpn-status.log
   ------------------- client.ovpn -------------------

   5) 在服務器端(10.1.1.168)啟動 OpenVPN 服務
   在開啟服務前先檢查, 虛擬網卡是否已正常安裝驅動 (TAP-Windows Adapter V9), 如果沒有發現這一張網卡,
   則檢查所安裝的 openvpn 版本是否與 windows 版本匹配和當前用戶是否擁有添加網卡的權限
   

   在服務器 10.1.1.168 服務器上, 雙擊桌面 <OpenVPN GUI> 圖標, 右擊任務欄圖標, 點擊<連線>按鈕
   連接成功後, 任務欄 OpenVPN 的圖標會變成綠色, 虛擬網卡連接成功 , IP地址為: 172.1.1.1
   
   
   6) 客戶端(10.1.1.147)連接 OpenVPN 服務器
   與服務器一樣, 連接前先檢查虛擬網卡 (TAP-Windows Adapter V9) , 雙擊桌面 <OpenVPN GUI> 圖標, 
   右鍵任務欄圖標, 點擊<連線>, 連線成功後, IP地址為: 172.1.1.2, 客戶端與服務器互通:
   
   
   至此,OpenVPN Server/Client 基本配置演示完成, 如果服務器啟動失敗或客戶端連接失敗, 可以查看 Log 逐步進行排查。

   7) 增加用戶名 + 密碼驗證
   如果希望在客戶端增加用戶名和密碼的驗證, 需要修改以下設置:
   (1) 修改服務器端 server.ovpn 文件, 增加以下幾行:
# 設置腳本安全等級 3, 這一行很關鍵, 網上很多文章都沒有提到
script-security 3 system
# 指定用戶名密碼驗證程序為 checkpsw.cmd
auth-user-pass-verify checkpsw.cmd via-env
# 設置用戶名為 os 通用帳號
username-as-common-name

   (2) 在 openvpn\config 目錄下新建 checkpsw.cmd, 內容如下:  (批處理內容可根據實際情況修改)
         不管是通過 exe 、bat 或者其它第三方程序 來驗證用戶名和密碼, 最終需要返回 0 表示驗證OK, 1表示失敗
@echo off 
for /f "tokens=1,2,3 delims= " %%i in (password.txt) do (
if %%i == %USERNAME% if %%j==%PASSWORD% if %%k == 1 exit /B 0 
)
exit /B 1

   (3) 在 openvpn\config 目錄下新建 password.txt, 內容如下: (此文件存放 checkpsw.cmd 所需的數據, 
         格式依據 checkpsw.cmd 而定, 第1個欄位表示用戶名, 第2個欄位表示密碼, 第3個欄位數字 1 表示帳號狀態
         可以用 0 表示停用禁止用戶登陸
client1 client1 1
client2 client2 1
user1 password1 1

   (4) 修改用戶端 client.ovpn 文件, 增加: 
# 增加用戶名&密碼驗證
auth-user-pass
# cache 中不保存輸入的用戶名和密碼
auth-nocache

   此功能調試花費了比較多的時間, 建議先單獨調試批處理, 再放入到 openvpn 中調試
   設置完成後, 在以下對話框中輸入用戶名密碼即可.
   

   8) 指定客戶端 ip 地址
   默認情況下, 客戶端 IP 地址根據服務器端配置 server 172.1.1.0 255.255.255.0 來決定, 
   即服務器分配 172.1.1.1, 客戶端從 172.1.1.2 開始檢查/分配, 如果希望固定端IP地址, 需要修改服務器配置文件 server.ovpn, 增加:
   # 指定客戶端配置目錄, 以下表示目錄為 openvpn\config\ccd
   client-config-dir ccd
   然後在 openvpn\config\ccd 目錄增加文件(不需要擴展名) client1, 內容如下:
   # 指定 ip 地址為 172.1.1.4
   ifconfig-push 172.1.1.4 255.255.255.0
   再次連接 openvpn 服務器後, 客戶端 client1 的 ip 地址固定為 172.1.1.4/255.255.255.0

   除此之外, 還有很配置選項,比如客戶間可以互相通訊、指定同一時間同一帳號只允許登陸1個等等,
   可以根據需要參考相關文檔, 在此不做一一介紹。

二、OpenVPN + NAT 組合功能測試
   如果只安裝 OpenVPN 功能只能讓 client 和 Server 相通, 沒有實際的意義, 何況它們本來就是通的
   下面分別介紹 OpenVPN 的兩種基本的網絡應用:
   (1) OpenVPN 連接到上網服務器
   
   10.1.1.168 是一台連接 Internet 的雙網卡服務器(撥號上網, 或者通過另一個局域網絡上網)
   可以在 windows 另外設置 NAT 功能使 10.1.1.168 充當一台共享上網服務器
   而這個組合實現的功能已經有現成的解決方案, 就是代理上網軟件(如 CCProxy)就可以實現, 
   不管是 OpenVPN 實現共享上網還是代理上網, 當下大多數用途都是為了避開 GFW 的管控.

   (2) OpenVPN 連接到另一個網絡
   

   通過 OpenVPN + NAT, 當客戶端10.1.1.147 登陸到 OpenVPN 服務器後, 可以直接訪問另一個網絡 172.1.1.0/24,
   這種功能適合個人用戶透過 Internet 登入到公司 OpenVPN 服務器使用公司網絡資源.
   從企業級資安角度來看, 存在一定的風險, 需要從各方面做綜合評估(比如用戶群角色,公司網絡資源的機密性等)

   以上 NAT 的功能在 Windows 下需要安裝 <路由與遠端存取> 角色 (詳細配置步驟省略,如有需要可參考網上相關文檔)


   全文完.