You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过NSG限制RDP访问时,如何自动获取VPN提供商的公网IP?

通过NSG限制RDP访问时,如何自动获取VPN提供商的公网IP?

我太懂你这种烦恼了——用公司VPN的时候,本地网卡拿到的IP都是内网段的,根本不是对外访问的公网出口IP,手动去查复制又麻烦,就想让脚本自动搞定对吧?

其实解决思路很简单:不要从本地网卡拿IP,而是通过调用外部公网API来获取当前你的对外出口IP,因为当你挂着VPN的时候,所有对外的网络请求都是走VPN通道的,这些API返回的就是VPN提供商给你的公网IP,正好是Azure NSG需要的源地址。

给你调整下脚本里获取IP的部分,替换成下面的代码就行:

# 调用HTTPS的API获取当前公网IP(推荐用HTTPS更安全)
$MyPublicIP = (Invoke-WebRequest -Uri "https://api.ipify.org" -UseBasicParsing).Content.Trim()

或者如果你习惯用其他可靠的API,也可以换成这些:

  • http://icanhazip.com
  • https://ifconfig.me/ip

为啥这个方法能行?因为当你通过VPN访问这些外部API时,请求会经过公司的VPN服务器出去,API那边看到的是VPN提供商的出口IP,也就是你实际对外的公网地址,把这个IP配置到NSG的RDP规则里,就能确保只有你当前VPN环境下能访问VM的3389端口了。

另外给你提几个小建议:

  • 加上-UseBasicParsing参数,避免有些环境因为IE设置问题导致Invoke-WebRequest报错
  • 可以加个简单的错误处理,比如如果API调用失败,脚本能提示你手动输入IP:
try {
    $MyPublicIP = (Invoke-WebRequest -Uri "https://api.ipify.org" -UseBasicParsing).Content.Trim()
} catch {
    Write-Warning "自动获取公网IP失败,请手动输入你的VPN公网IP:"
    $MyPublicIP = Read-Host
}
  • 确保你的公司防火墙没有拦截这些API的请求,不然脚本会获取失败哦~

备注:内容来源于stack exchange,提问作者scorpion35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:24:40