通过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.comhttps://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
相关产品推荐
相关产品推荐

