Windows 10 的启动方式似乎很奇怪,或者至少是新的。许多程序无法像以前版本那样自动启动,很多人都在问如何让程序自动启动。我知道,因为我一直在寻找让常用的程序自动启动的方法。
如何让 OpenVPN 在启动时启动、在连接之前阻止 Internet 访问并自动登录到 OVPN 配置文件?
我已经将凭据保存在文本文件中,因此 OpenVPN 只需要加载该文件、处理它并连接。
我以前在 Windows 7 上用过这个,但是我好像忘了怎么做了,
答案1
最好的方法是使用服务:
- 安装客户端时安装OpenVPN服务;
- 将您的 OpenVPN 配置文件(扩展名为 .ovpn,而不是 Linux 上常见的 .conf)放在 OpenVPN 安装目录的 config 子目录中,可能是
C:\Program Files\OpenVPN\config
。 - 打开服务控制台(
services.msc
); - 找到 OpenVPNService,右键单击它,属性,然后将启动类型从“手动”更改为“自动”。
- 启动服务,OpenVPN 将查找并连接到任何 .ovpn 文件中的配置文件。请记住,在大多数情况下,每个连接文件需要一个 TUN/TAP 接口。在 Windows 中,我强烈建议使用配置文件将接口与其连接永久关联:
dev-node TAP_Serv
强制 OpenVPN 将连接绑定到名为“Tap_Serv”的网络接口。阅读一些评论后添加:每个连接需要一个接口。在 Linux 中这很简单,但在 Windows 中可能会有问题。拥有两个可以单独成功测试的配置并不意味着它们会一起运行,因为它们可能在争夺同一个接口。OpenVPN 是一个移植程序,而 Windows 驱动程序子系统一直很麻烦。
您可能想要调查是否有办法详细制定白名单,以强制服务仅连接到特定文件,而不是所有文件。过去,我遇到过一些问题,有人需要在同一台机器上拥有 VPN 服务器作为服务,以及几个偶尔连接的 VPN 客户端文件。在这些情况下,如果我希望 OpenVPN GUI 向他们显示可用连接的漂亮列表,则意味着服务看到了这些文件并尝试自动连接到它们。在这些情况下,我决定根本不使用服务:
如果无法使用服务,您可以将额外的命令行参数传递给 OpenVPN GUI 调用,以使其在启动时自动连接(以及像往常一样显示托盘图标):
openvpn-gui.exe --connect myprofile.ovpn
要在登录时运行该程序,请将此类快捷方式放在常用的启动文件夹中。(对于所有用户,%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
;或者仅适用于当前用户,%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
。)
我不知道如何避免用户在设置 VPN 之前连接到 Internet。我能想到的唯一方法是通过 Windows 防火墙,但我不是这方面的专家。如果您想避免高级用户访问 Internet,您需要在网关中安装防火墙以避免这种情况发生,或者使用强大的组策略来避免特权扩展。
对于普通用户,您可以配置没有默认网关的 Windows 客户端计算机。使用以下命令在 Windows 客户端上设置到 VPN 服务器的持久静态路由(-P 使其持久):
route -P add <target> mask <netmask> <gateway IP> metric <metric cost> if <interface>
Windows 中的路由存储在以下注册表项下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes
此时,断开连接的客户端只能访问 VPN 服务器。然后,您可以在 VPN 服务器配置文件中添加以下几行,以便在客户端连接时添加路由:
要将 VPN 服务器配置为默认网关:
push "redirect-gateway def1 bypass-dhcp"
要通过 VPN 服务器添加特定路由:
push "route 192.168.1.0 255.255.255.0"
有时路由推送在 Windows 上不起作用。当这种情况发生在我身上时,我会从 Windows 中完全卸载 OpenVPN 及其接口,重新启动系统并安装最新版本的软件。然后,在建立第一个连接之前,我会重新启动 Windows。这总能解决问题。但是,Windows 10 周年更新 (1607) 与 OpenVPN 存在错误。OpenVPN 论坛中有一个更深入的讨论链接:
设置 Windows 10 OpenVPN 客户端时请记住这一点。
如果您是想为客户提供建议的顾问,请考虑使用一些特定的 NATIVE Windows 解决方案(如果客户的预算允许)。我不会说出任何名称以避免被标记,但大多数知名的网络硬件公司都提供与其设备兼容的解决方案,这些解决方案为您可能想到的任何边缘操作系统提供原生驱动程序。免责声明:我不为这些公司工作。在我自己日常生活中,我使用 OpenVPN,但为了远程连接到我的公司,他们在计算机上捆绑了一个商业解决方案:我从来没有遇到过任何连接问题,而 OpenVPN 通常更微妙。不要误会我的意思,我已经将 OpenVPN 交付给客户的生产环境,完全成功,但您需要格外小心(并设置看门狗和恢复措施,或者只是培训用户在出现问题时“单击重新连接”)。
答案2
不知道这是否仍然相关,但从 OpenVPN 2.5.0 开始,您只需将配置放在“config-auto”下而不是“config”下,服务启动时将自动建立连接。无需额外的脚本或自动启动。
答案3
如果你不想将其作为服务运行,你可以复制DGoikos 的第二个答案并在批处理文件中运行它(例如 openVPNautostart.bat)。如果你想把它发送给别人并让他们手动运行脚本,这很简单作为管理员我从这里并将其改编为 openVPN。如果您使用常规安装设置,它应该可以工作。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET LinkName=OpenVPN
SET Esc_LinkDest=%%ProgramData%%\Microsoft\Windows\Start Menu\Programs\Startup\openvpn-gui.lnk
SET Esc_LinkTarget=%%ProgramFiles%%\OpenVPN\bin\openvpn-gui.exe
SET cSctVBS=CreateShortcut.vbs
SET LOG=".\%~N0_runtime.log"
((
echo Set oWS = WScript.CreateObject^("WScript.Shell"^)
echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)
echo Set oLink = oWS.CreateShortcut^(sLinkFile^)
echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)
echo oLink.Save
)1>!cSctVBS!
cscript //nologo .\!cSctVBS!
DEL !cSctVBS! /f /q
)1>>!LOG! 2>>&1
要编辑快捷方式位置(针对所有用户/仅当前用户),您可以将%%ProgramData%%\Microsoft\Windows\Start Menu\Programs\Startup\openvpn-gui.lnk
(所有用户)编辑为%%APPDATA%%\Microsoft\Windows\Start Menu\Programs\Startup\openvpn-gui.lnk
(当前用户)。