◎服务器操作系统: Windows Server 2019
◎OpenVPN: 开放VPN 2.4.9 (社区)
◎ AD 验证元件: Auth4OpenVPNv2.0
OS客户端OS: 窗口 10
由于公司的 VPN 硬体设备老旧,最近在 survey VPN 的解决方案,想说先从开源的解决方案下手,一开始想到的就是五年前测试过的 OpenVPN,但到官网下载 VM 映像档并建置完成后,才发现此版本仅开放两个 client 免费连线,要更多就要订阅。心想原来开始收费了,难怪 Server 跟 client 端 (OpenVPN连接) 的软体介面都变得这么漂亮,印象以前都是要透过记事本去改设定的。
之后找到来自日本的 SoftEther VPN,花了些时间研究及建置后,原本以为这套应该可以用了,没想到最后在做测试时,发现 SoftEther VPN 有个 drop SQL 连线的 bug,且网友已经回报 issue 两年了,官方还是没有修正,因此只好忍痛放弃。 SoftEther VPN 的设定方式,可参考【笔记】SoftEther VPN Server 设定。
后来回过头找 OpenVPN 的相关授权资讯,结果才找到 Community 的版本,下载安装后,熟悉的文字档设定画面再度出现,哈。下方为本次建置的目标与设定方式:
【目标】
◎ Server 使用 Windows 系统。
◎ 使用 AD 做为帐户验证方式。
◎ Client 端使用独立网段,并可自动取得 IP。
◎ Client 端仅针对特定网段的流量会流量 VPN,上网 (互联网) 不会。
◎ Client 端可以连到企业内部的其他网段。
◎ 首先,到 OpenVPN社区下载 页面下载最新版本。
◎ 接着参考社群的 Easy_Windows_Guide,完成 Server 与 Client 设定,以下撷录重点设定。
[前期工作]
◎ 安装时请自行勾选 “EasyRSA 2 证书管理脚本” 元件。
◎ 以「系统管理员身分」执行 cmd,并依序执行下列指令:
cd "C:\Program Files\OpenVPN\easy-rsa" init-config notepad vars.bat
◎ 修改预设的凭证资讯,改完后存档。
设置KEY_COUNTRY = US
设置KEY_PROVINCE = CA
设置KEY_CITY =旧金山
设置KEY_ORG = OpenVPN
设置KEY_EMAIL=mail@host.domain
◎ 依序执行下列指令:
vars clean-all
【建置凭证与金钥】
◎ 执行下列指令:
build-ca
◎ 输入凭证资讯:
国家的名字 (2 字母代码) [我们]:
州或省名称 (全名) [加利福尼亚]:
地区名称 (例如, 市) [旧金山]:
机构名称 (例如, 公司) [开放VPN]:
组织单位名称 (例如, 部分) []:
通用名 (例如, 您的名称或服务器的主机名) []:
电子邮件地址 [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 config 档】
◎ 执行下列指令:
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 cart
cert server.crt
密钥服务器
dh dh2048.pem
◎ 取代成:
那 “Ç:\\程序文件\ OpenVPN \ config \ ca.crt”
证书 “Ç:\\程序文件\ OpenVPN \ config \ server.crt”
键 “Ç:\\程序文件\ OpenVPN \ config \ server.key”
即 “Ç:\\程序文件\ OpenVPN \ config \ dh2048.pem”
◎ 存档并关闭。
◎ 找到以下文字,并拿掉前面的注解分号(;)。由于我打算只做一个凭证给大家共用,如此可能会造成不同 Client 取得同一组 IP 的现象,因此要将此设定开启,让大家可以拿到不同的 IP。
;复制cn
【设定 Client config 档】
◎ 执行下列指令:
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 cart
cert server.crt
密钥服务器
tls-auth ta.key 1
◎ 取代成:
那 “Ç:\\程序文件\ OpenVPN \ config \ ca.crt”
证书 “Ç:\\程序文件\ OpenVPN \ config \ client.crt”
键 “Ç:\\程序文件\ OpenVPN \ config \ client.key”
身份验证 “Ç:\\程序文件\ OpenVPN \ config \ ta.key” 1
# Guide 没有这段,这是我在运行 client 时跳错,而进行修正的。
◎将下面的 “我的服务器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
◎ 在 “Ç:\程序文件 OpenVPN easy-rsa keys ”,复制以下档案:
证书
ta.key
client.crt
客户端密钥
客户程序
◎ 贴到 client 电脑的 “Ç:\程序文件 OpenVPN config ”
聚苯乙烯. client 的安装档跟 Server 一样。
【启动 OpenVPN】
◎ 在 Server 以「系统管理员身分」执行 OpenVPN GUI。如果不以「系统管理员身分」运行也可以,但可能部份 log 会没有写入权限。也可以在「Windows 服务」,将 “OpenVPN服务” 的「启动类型」改成”自动”,并按右键「启动」。
◎ Client 端直接执行 OpenVPN GUI,并在右下角的图示按右键选择「连线」即可。Client 亦可安装介面比较好看得 OpenVPN Connect,并将设定档 (客户程序) 拖曳进视窗即可。
以上为 Easy_Windows_Guide 的主要教学内容,完成上面设定后,就可以凭证方式完成连线,接下来则是将设定调整为我想要的环境:
◎ Client 端可以连到企业内部的其他网段。
◎ 使用 AD 做为帐户验证方式。
【让 Client 端可以连到企业内部的其他网段】
OpenVPN 在完成建置后,预设 Server 会产生一张虚拟网卡,其 IP 为 10.8.0.1,而 Client 则是会拿到 10.8.0.6,此时 Client 去 ping 10.8.0.1 应该要通。
接下来要 ping 伺服器的实体网路卡 (例 192.168.53.1) 会发现不通,此时除了要加入路由外,还要开启「网际网路连线共用」功能。这边我卡好久,后来才终于在 ViRb3 网友的「创建代理Internet流量的OpenVPN Windows服务器·GitHub」这篇找到「网际网路连线共用」这个关键设定。
◎ 找到 server.opvn 里的 「;推入路线 “192.168…“
◎ 依其格式,加入下面一笔,并存档。
push "route 192.168.53.0 255.255.255.0" # 如果要讓 Client 連到企業內部的其他網段, # 可以在這邊加入其他網段的資訊。
◎ 进入介面卡设定,开启实体网路卡 (192.168.53.1 这张) 的「网际网路连线共用」功能 (勾選”允其他网路使用者透过这台电脑的网际网路连线来连线”)。
聚苯乙烯. 找了很多文章才知道要做这个动作,在这边卡关卡很久。
开启「网际网路连线共用」功能后,OpenVPN 虚拟网卡的 IP 将会被改成 192.168.137.1,因此我们如果要沿用 OpenVPN 预设的 10.8.0.1,需要修改机码。
◎ 执行 regedit,到下列路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters
◎ 将 ScopeAddress 的值改成 10.8.0.1。
◎ 重启 OpenVPN Server,并让 Client 重新连线即可。
【使用 AD 做为帐户验证方式】
首先,很感谢 J. 奥尔特加. 写的 VBScript,让我们可以很方便让 OpenVPN 够过 AD 做验证,谢谢再次谢谢。在「适用于Windows的OpenVPN的Active Directory身份验证 – amigo4life2」这个网页有很详尽的设定说明,不过因为年代久远,所以后续在 Windows 2008、2012 以后的版本,还有些动作要做,以下为整理后的设定方式:
◎ 下载 Auth4OpenVPNv2.0.zip,并将内容解压缩至 “Ç:/程序文件/ OpenVPN /配置”
◎ 修改 Auth4OpenVPN.ini,输入 AD 的相关资讯,范例如下:
Server = "192.168.53.20" Domain = "abc" DN = "dc=abc,dc=com,dc=tw" Group = "(Group)OpenVPN" Logging = "On"
接下来的动作,会与 J. 奥尔特加. 网页上稍有不同,此为 iceh 网友在 OpenVPN Community 论坛 针对新版 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%
◎将档案储存到 “Ç:\程序文件 OpenVPN config”,档名为 “Auth4OpenVPN-64bitWrapper.cmd”。
◎ 在 server.ovpn 加入下面两行指令:
script-security 3 auth-user-pass-verify Auth4OpenVPN-64bitWrapper.cmd via-env
◎ 在 Client 端的 client.ovpn 加入下面两行指令:
auth-user-pass auth-retry interact
◎ 如此,Client 在连线时,便会跳出帐号密码视窗来登入。
【补充资讯】
◎ Auth4OpenVPN 有提供测试功能,建议可以先以下面指令测试连线 AD 没问题后,再来进行后续动作。
auth4openvpn.vbs <user> <password>
◎ Auth4OpenVPN 会在 Windows 应用程式记录留下验证结果,如果依照原本网页方式设定,可能会出现 “Auth4OpenVPN: -2147221164, 类别未登录” 的错误讯息,此时依照 iceh 网友提供的 “Auth4OpenVPN-64bitWrapper.cmd” 的修复方式,便可解决环境参数的问题。
◎ 如果要让 client 可以透过企业的网路上网 (互联网),只需在 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 进行过滤,因此连线过程会出现一些奇奇怪怪的问题。
【參考連結】
- 社区下载 | 开放VPN
- Easy_Windows_Guide – OpenVPN社区
- 适用于Windows的OpenVPN的Active Directory身份验证 – amigo4life2
- (半-)修复Auth4OpenVPN – Win2008R2 / Win2012R2 – OpenVPN支持论坛
- 创建代理Internet流量的OpenVPN Windows服务器 ·GitHub
- OpenVPN身份验证问题 – OpenVPN支持论坛
- Windows上的OpenVPN服务器 〜Defron.org: 技术, 安全, 隐私
- 死狐狸的单行本: 详解-OpenVPN中的routing
- 发布SAMAuth4OpenVPN v1.0.0.2·smiley22 / SAMAuth4OpenVPN ·GitHub
- [教學] OPEN VPN for Windows 环境设定整理 @ 清新下午茶 :: 痞客邦 ::
[…] ◎ 修改 Auth4OpenVPN.ini,输入 AD 的相关资讯,范例如下:? […]
你好. 谢谢您的教程,但我必须承认. 让我解释 :
我可以在Windows上创建服务器文件 ( 服务器要领 2016) 我从Windows连接到它 10 与我的客户档案. 建立连接.
但是在ping阶段, 当我ping地址时 10.8.0.1 从我的客户站, 负面结果.
除此以外, 一旦我可以连接我的客户端和服务器, 我的客户端工作站上不再有Internet连接.
您有线索帮助我摆脱困境吗…..
这是基本版本可以阻止ping的事实吗 ?
您好,如果连10.8.0.1都ping失败的话,那么蛮有可能VPN连线是建立失败的,预设的情况下,10.8.0.1是可以被ping的。
或许可以参考我文章的步骤,一步一步设定看看,祝您好运,谢谢