◎ Server OS: Windows Server 2019
◎ OpenVPN: OpenVPN 2.4.9 (Community)
◎ AD 验证组件: Auth4OpenVPNv2.0
◎ 客户端操作系统: Windows 10
由於公司的 VPN 硬體設備老舊,最近在 survey VPN 的解決方案,想說先從開源的解決方案下手,一開始想到的就是五年前測試過的 OpenVPN,但到官網下載 VM 映像檔並建置完成後,才發現此版本僅開放兩個 client 免費連線,要更多就要訂閱。心想原來開始收費了,難怪 Server 跟 client 端 (OpenVPN Connect) 的軟體介面都變得這麼漂亮,印象以前都是要透過記事本去改設定的。
之後找到來自日本的 SoftEther VPN,花了些時間研究及建置後,原本以為這套應該可以用了,沒想到最後在做測試時,發現 SoftEther VPN 有個 drop SQL 連線的 bug,且網友已經回報 issue 兩年了,官方還是沒有修正,因此只好忍痛放弃。 SoftEther VPN 的设置方式,可参考【笔记】SoftEther VPN 服务器设置。
后来回过头找 OpenVPN 的相关授权资讯,结果才找到 Community 的版本,下载安装后,熟悉的文字档设置画面再度出现,哈。下方为本次建置的目标与设置方式:
【目标】
◎ Server 使用 Windows 系统。
◎ 使用 AD 作为账户验证方式。
◎ 客户端使用独立网段,并可自动获取 IP。
◎ 客户端仅针对特定网段的流量进行 VPN,上网 (Internet) 不会。
◎ 客户端可以连接到企业内部的其他网段。
◎ 首先,到 OpenVPN Community Downloads 页面下载最新版本。

◎ 接着参考社群的 Easy_Windows_Guide,完成 Server 與 Client 設定,以下擷錄重點設定。
【前置作業】
◎ 安裝時請自行勾選 “EasyRSA 2 Certificate Management Scripts” 元件。
◎ 以「系統管理員身分」執行 cmd,並依序執行下列指令:
cd "C:\Program Files\OpenVPN\easy-rsa" init-config notepad vars.bat
◎ 修改預設的憑證資訊,改完後存檔。
set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain
◎ 依序執行下列指令:
vars clean-all
【建置憑證與金鑰】
◎ 執行下列指令:
build-ca
◎ 输入凭证信息:
国家名称 (2 字母代码) [美国]:
州或省名称 (全名) [加拿大]:
地名 (例如, 城市) [旧金山]:
组织名称 (例如, 公司) [OpenVPN]:
组织单位名称 (例如, 部门) []:
通用名称 (例如, 您的名字或服务器的主机名) []:
电子邮件地址 [mail@host.domain]:
◎ 依序執行下列指令:
build-key-server server build-key client # Guide 上是建議用 client 端的電腦名稱,然後為每一台電腦產生一份憑證, # 但因為我主要是要用 AD 驗證,所以我這邊是只產生一份名為 client 的憑證,然後讓所有電腦一起使用。 build-dh "C:\Program Files\OpenVPN\bin\openvpn.exe" --genkey --secret "C:\Program Files\OpenVPN\easy-rsa\keys\ta.key"
【设置 Server 配置文件】
◎ 執行下列指令:
copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\easy-rsa\keys\server.ovpn" notepad "C:\Program Files\OpenVPN\easy-rsa\keys\server.ovpn"
◎ 找到以下文字。
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
◎ 替换为:
ca “C:\\Program Files\\OpenVPN\\config\\ca.crt”
cert “C:\\Program Files\\OpenVPN\\config\\server.crt”
key “C:\\Program Files\\OpenVPN\\config\\server.key”
dh “C:\\Program Files\\OpenVPN\\config\\dh2048.pem”
◎ 保存并关闭。
◎ 找到以下文字,并去掉前面的注释分号(;)。由于我打算只制作一个证书供大家共享,这样可能会导致不同客户端获取同一组 IP 的现象,因此需要开启此设置,让大家可以拿到不同的 IP。
;duplicate-cn
【设置客户端配置文件】
◎ 執行下列指令:
copy "C:\Program Files\OpenVPN\sample-config\client.ovpn" "C:\Program Files\OpenVPN\easy-rsa\keys\client.ovpn" notepad "C:\Program Files\OpenVPN\easy-rsa\keys\client.ovpn"
◎ 找到以下文字。
ca ca.crt
cert server.crt
key server.key
tls-auth ta.key 1
◎ 替换为:
ca “C:\\Program Files\\OpenVPN\\config\\ca.crt”
cert “C:\\Program Files\\OpenVPN\\config\\client.crt”
key “C:\\Program Files\\OpenVPN\\config\\client.key”
tls-auth “C:\\Program Files\\OpenVPN\\config\\ta.key” 1
# 指南没有这段,这是我在运行 client 时跳错,而进行修正的。
◎将下面的 “my-server-1” 修改为 OpenVPN 实际的 FQDN 或 IP 地址。
remote my-server-1 1194
◎ 保存并关闭。
【复制凭证、密钥到正确的目录】
◎ 執行下列指令:
robocopy "C:\Program Files\OpenVPN\easy-rsa\keys\" "C:\Program Files\OpenVPN\config\" ca.crt ta.key dh2048.pem server.crt server.key server.ovpn
◎ 在 “C:\Program Files\OpenVPN\easy-rsa\keys\”,复制以下文件:
ca.crt
ta.key
client.crt
client.key
client.ovpn
◎ 贴到 client 电脑的 “C:\Program Files\OpenVPN\config\”
PS. client 的安装文件跟 Server 一样。
【启动 OpenVPN】
◎ 在 Server 以“管理员身份”执行 OpenVPN GUI。如果不以『系统管理员身份』运行也可以,但可能部分 log 会没有写入权限。也可以在『Windows 服务』,将 “OpenVPNService” 的『启动类型』改成”自动”,并按右键『启动』。
◎ 客户端直接运行 OpenVPN GUI,并在右下角的图标上右键选择“连接”即可。客户端也可安装界面比较好看的 OpenVPN Connect,并将配置文件 (client.opvn) Drag into the window to proceed。
The above is the main tutorial content of Easy_Windows_Guide,After completing the above settings,you can use certificates to complete the connection,Next, adjust the settings to the environment I want:
◎ 客户端可以连接到企业内部的其他网段。
◎ 使用 AD 作为账户验证方式。
[Allow the Client to connect to other subnets inside the enterprise]
After setting up OpenVPN,the Server will generate a virtual network card by default,Its IP is 10.8.0.1,and the Client will get 10.8.0.6,At this time, the Client pings 10.8.0.1 应该可以通。
接下來要 ping 伺服器的實體網路卡 (示例 192.168.53.1) 會發現不通,此時除了要加入路由外,還要開啟「網際網路連線共用」功能。這邊我卡好久,後來才終於在 ViRb3 網友的「Create an OpenVPN Windows server that proxies internet traffic · GitHub」這篇找到「網際網路連線共用」這個關鍵設定。
◎ 找到 server.opvn 裡的 「;push route “192.168…」
◎ 依其格式,加入下面一筆,並存檔。
push "route 192.168.53.0 255.255.255.0" # 如果要讓 Client 連到企業內部的其他網段, # 可以在這邊加入其他網段的資訊。

◎ 進入介面卡設定,開啟實體網路卡 (192.168.53.1 這張) 的「網際網路連線共用」功能 (勾选”Allow other network users to connect through this computer's Internet connection”)。
PS. I searched through many articles before I knew I had to do this,I was stuck here for a long time。

After enabling the 'Internet Connection Sharing' feature,The IP of the OpenVPN virtual network card will be changed to 192.168.137.1,Therefore, if we want to continue using OpenVPN's default 10.8.0.1,We need to modify the registry key。
◎ Run regedit,Go to the following path:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters
◎ Change the value of ScopeAddress to 10.8.0.1。
◎ 重啟 OpenVPN Server,並讓 Client 重新連線即可。
【使用 AD 做為帳戶驗證方式】
首先,很感謝 J. Ortega. 寫的 VBScript,讓我們可以很方便讓 OpenVPN 夠過 AD 做驗證,感謝感謝再感謝。在‘Active Directory Authentication for OpenVPN For Windows Implementations – amigo4life2这个网页有很详尽的设置说明,不过因为年代久远,所以后续在 Windows 2008、2012 以后的版本,还有些动作要做,以下为整理后的设置方式:
◎ 下载 Auth4OpenVPNv2.0.zip,并将内容解压缩至 “C:/Program Files/OpenVPN/Config”
◎ 修改 Auth4OpenVPN.ini,输入 AD 的相关信息,范例如下:
Server = "192.168.53.20" Domain = "abc" DN = "dc=abc,dc=com,dc=tw" Group = "(Group)OpenVPN" Logging = "On"
接下来的动作,会与 J. Ortega. 网页上稍有不同,此为 iceh 网友在 OpenVPN 社区论坛 针对新版 Windows Server 安全性的问题所做的修正,在此也非常感谢 iceh 网友。
◎ 打开记事本,粘贴以下内容:
set LOCALAPPDATA=C:\Users\%USERNAME%\AppData\Local set CommonProgramFiles=C:\Program Files\Common Files set CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files set CommonProgramW6432=C:\Program Files\Common Files C:\Windows\System32\cscript.exe "C:\Program Files\OpenVPN\config\Auth4OpenVPN.vbs" exit %errorlevel%
◎ 将文件保存到 “C:\Program Files\OpenVPN\config”,文件名为 “Auth4OpenVPN-64bitWrapper.cmd”。
◎ 在 server.ovpn 中加入以下两行指令:
script-security 3 auth-user-pass-verify Auth4OpenVPN-64bitWrapper.cmd via-env
◎ 在客户端的 client.ovpn 中加入以下两行指令:
auth-user-pass auth-retry interact
◎ 如此一来,客户端在连接时,就会弹出账号密码窗口来登录。

【補充資訊】
◎ Auth4OpenVPN 有提供測試功能,建議可以先以下面指令測試連線 AD 沒問題後,再來進行後續動作。
auth4openvpn.vbs <user> <password>
◎ Auth4OpenVPN 會在 Windows 應用程式記錄留下驗證結果,如果依照原本網頁方式設定,可能會出現 “Auth4OpenVPN: -2147221164, 類別未登錄” 的错误信息,此時依照 iceh 網友提供的 “Auth4OpenVPN-64bitWrapper.cmd” 的修復方式,便可解決環境參數的問題。

◎ 如果要讓 client 可以透過企業的網路上網 (Internet),只需在 server.ovpn 檔找到下面字串,並將前面的註解(;)拿掉即可。
;push "redirect-gateway def1 bypass-dhcp"
◎ OpenVPN Connect 在匯入 client.ovpn 檔時,會檢查憑證與金鑰檔有沒有跟 client.ovpn 檔在同個目錄,如果沒有會跳錯。完成匯入後,後續進行連線時,OpenVPN Connect 才会按照 client.ovpn 的设置去指令路径读取证书和密钥文件;OpenVPN GUI 则没有这个问题。
◎ 如果要让 OpenVPN 与 Windows 本地的账户验证,可参考网友 smiley22 分享的 SAMAuth4OpenVPN 元件。
◎ 我后来还是没有采用这个解决方案,因为大陆有针对 OpenVPN 进行过过滤,因此连接过程中会出现一些奇奇怪怪的问题。
【参考链接】
- Community Downloads | OpenVPN
- Easy_Windows_Guide – OpenVPN Community
- Active Directory Authentication for OpenVPN For Windows Implementations – amigo4life2
- (Semi-)Fix for Auth4OpenVPN – Win2008R2 / Win2012R2 – OpenVPN Support Forum
- Create an OpenVPN Windows server that proxies internet traffic · GitHub
- OpenVPN authentication isssue – OpenVPN Support Forum
- OpenVPN Server on Windows ~ Defron.org: Technology, 安全, Privacy
- 死狐狸的單行本: 詳解-OpenVPN中的routing
- Release SAMAuth4OpenVPN v1.0.0.2 · smiley22/SAMAuth4OpenVPN · GitHub
- [教程] OPEN VPN for Windows 環境設定整理 @ 清新下午茶 :: 痞客邦 ::








Bonjour. Merci pour votre tuto mais j’avoue galérer. Je m’explique :
J’arrive à créer un fichier server sur mon Windows ( server essentials 2016) et je me connecte dessus depuis Windows 10 avec mon fichier client. La connexion se fait.
Mais arrivé à l’étape du ping, quand je ping l’adresse 10.8.0.1 depuis mon poste client, résultat négatif.
Par ailleurs, dès que j’arrive à connecter mon client et lin serveur, je n’ai plus de connexion internet sur mon poste client.
Auriez vous une piste pour m’aider à sortir de ce…..
Est ce que le fait que ce soit une version essentials peut empêcher le ping ?
您好,如果连10.8.0.1都ping失败的话,那么很有可能VPN连接建立失败,默认的情况下,10.8.0.1是可以被ping的。
或许可以参考我文章的步骤,一步一步設定看看,祝您好運,谢谢