成功建立 OpenVPN 连接和 VPN 的 DHCP 协商后,如何更新 WinXP 客户端的 Web 代理和默认打印机设置?(断开 VPN 连接后,如何删除这些设置?)
我确信这是一个已经解决的问题——从概念上讲,这与自动完成笔记本电脑从一个网络到另一个网络的非 VPN 转换并没有太大区别——但是我对 XP 的了解相当浅薄,我找不到做到这一点的方法。
答案1
是的,您可以在 OpenVPN 连接的客户端或服务器端(在 Windows 或任何其他操作系统上)在连接的各个阶段执行任意命令。有多个选项(可在命令行或配置文件中使用)定义在连接过程的各个阶段要执行哪些脚本以及使用哪些参数。
例如,如果您在 OpenVPN 客户端配置文件中包含行“up "C:\my-up-script.bat"”,则在成功打开与服务器的 VPN 连接后,客户端将执行位于“C:\my-up-script.bat”的任何批处理脚本。行“down "C:\my-down-script.bat"”表示在终止连接后执行脚本“C:\my-down-script.bat”。
OpenVPN 手册(完整版可访问http://openvpn.net/index.php/open-source/documentation/manuals/69-openvpn-21.html)列出了所有各种脚本以及每个脚本的执行时间:
SCRIPTING AND ENVIRONMENTAL VARIABLES
OpenVPN exports a series of environmental variables for use by user-defined scripts.
Script Order of Execution
--up
Executed after TCP/UDP socket bind and TUN/TAP open.
--tls-verify
Executed when we have a still untrusted remote peer.
--ipchange
Executed after connection authentication, or remote IP address change.
--client-connect
Executed in --mode server mode immediately after client authentication.
--route-up
Executed after connection authentication, either immediately after, or some number of seconds after as defined by the --route-delay option.
--client-disconnect
Executed in --mode server mode on client instance shutdown.
--down
Executed after TCP/UDP and TUN/TAP close.
--learn-address
Executed in --mode server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table.
--auth-user-pass-verify
Executed in --mode server mode on new client connections, when the client is still untrusted.
如果你使用的是 Windows 版 OpenVPN GUI,你可能还需要阅读该程序的安装指南(http://openvpn.se/install.txt),特别是标题为“运行连接/断开连接/预连接脚本”的部分。OpenVPN GUI 将 OpenVPN 守护程序作为 Win32 服务运行,并具有动态定义的命令行选项,因此您只需编写自己的脚本并将其保存在服务包装器将查找它们的位置。
如果你使用 NullSoft NSIS 安装程序构建说明 (http://openvpn.se/files/howto/openvpn-howto_roll_your_own_installation_package.html),您可以在创建包时将脚本放入其中。(我不想详细讨论这个话题,因为它相当复杂,官方文档比我在这里解释得更好。)
如果您不熟悉添加打印机和设置代理配置所需的 Windows 脚本命令,我建议您编写几个简短的 Visual Basic 脚本。您可以在 Google 上找到更多示例,但这里有一个入门示例,灵感来自我在 Petri 论坛上找到的内容(http://www.petri.co.il/forums/showthread.php?t=6486),设置新打印机并将其设为默认打印机:
Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.RemovePrinterConnection "\\MyGroupName\MyPrinterName"
WshNetwork.AddWindowsPrinterConnection "\\MyGroupName\MyPrinterName"
WshNetwork.SetDefaultPrinter "\\MyGroupName\MyPrinterName"
将其保存为 .vbs 文件,然后您应该能够执行它并从任何可以看到打印机的机器上查看更改。另外,显然,您必须在最后三行中将工作组和打印机名称替换为您自己的名称。
如果您使用 OpenVPN GUI 的预定义批处理脚本路径,则可以通过创建具有正确名称的批处理文件来运行 .vbs 脚本(如我上面链接的文档中所述),该文件仅包含以下行:
START C:\add_printer.vbs
您也可以直接从 OpenVPN 配置文件中调用 .vbs 脚本,方法是添加以下行:
up "C:\add_printer.vbs"
(无论哪种方式,您都需要用实际 .vbs 脚本的位置替换该路径。)
“down”脚本可以以相同的方式工作 - 可能,您只需要它包含一行“WshNetwork.RemovePrinterConnection“\MyGroupName\MyPrinterName””。