我的公司使用一些在终端服务器上运行的软件,这些软件会连接回我本地连接到客户端笔记本电脑的外围设备。该软件在我的终端服务器配置文件中定义了一个 HKEY_CURRENT_USER 注册表项,其中包含使用 %CLIENTNAME% 定义的通过 HTTP 连接到外围设备的 URL。
不幸的是,当我使用会话 IP 10.101.20.15 连接到 VPN 时,我看到的问题在于终端服务器上的 %CLIENTNAME% 变量被我们的公司 DNS 解析为我前一天在办公室连接到硬以太网连接时仍使用的 IP 地址,例如 172.28.3.55。
即使我在客户端笔记本电脑上执行“ipconfig /flushdns”和“ipconfig /registerdns”,DNS 服务器仍然停留在解析为办公室的 172.28.3.55 地址。
如果我修改 HKCU 注册表项中的 URL 以指向我的 VPN 会话 IP 10.101.20.15 而不是 %CLIENTNAME%,则外围设备可以正常通信,直到我关闭 VPN 会话。下次连接到 VPN 时,我将获得不同的 IP。让我们以 10.101.31.21 为例。
我该怎么做才能在终端服务器上设置登录脚本或类似的东西,以便每次我或其他需要使用相同类型外围设备的用户登录终端服务器时,将我当前的 VPN 会话 IP 定义为 CLIENTIPADDRESS 的用户环境变量?在我的示例中,下次登录终端服务器时应将 CLIENTIPADDRESS 定义为 10.101.31.21。
最好在终端服务器 HKCU 注册表项中定义连接 URL 以指向 %CLIENTIPADDRESS% 变量而不是 %CLIENTNAME% 变量或硬编码的 IP 地址,并且不需要在每次 VPN IP 更改时进行修改。
提前致谢,
David Carter | 技术支持专家 | Millennium Technology Group | 佛罗里达州奥兰多
答案1
尝试一下这个脚本,在我的测试中,它将“公共 IP”保存在 %clientName% 变量中,但可能与您不同,因为您使用的是企业 VPN,而我在测试中使用了 OpenVPN。将脚本复制到记事本,并使用您想要的名称保存它,但扩展名为 *.bat。该脚本必须在服务器端运行...
@echo off
:: set The RDP port here usually 3389:
set RDPort=3389
for /f "tokens=3" %%a in ('netstat -n ^| find /i "%RDPort%" ^| find /i "established"') do set IP=%%a
IF "%IP%"=="" goto :Cancela
for /f "delims=:" %%a in ("%IP%") do set IP=%%a
reg add "HKCU\Environment" /v "CLIENTNAME" /d "%IP%" /t reg_sz /f
exit
:Cancela
exit
在任务计划程序中使用以下选项进行设置:
- 常规:无论用户是否连接,都运行
- 触发器:当用户会话开始时
- 操作:批处理脚本的路径
- 设置:丢失则尽快逃跑……