为每位 Windows 用户编写 Azure P2S VPN 配置文件脚本
Add-VpnConnection 在开关收到布尔值时会抛出 EapConfigXmlStream 错误。在部署到整个机群之前,先修正作用域和缺失的路由。
手动分发 Azure 点到站点包在五台笔记本上还行,到五十台就会崩掉。脚本化路径有两个陷阱,每个都要耗掉一个下午:一个看起来像证书失败的参数错误,以及一条连接始终不会安装的路由,即使其他一切都正确。这两个问题都不是重新下载客户端包能解决的。请按下文顺序逐项检查,遇到第一个失败就停下。
我把顺序固定下来,因为每一步都以上一步成立为前提。
1. 在第一台设备之前修正配置文件作用域
面向所有用户的 配置文件 存在于本机,并出现在每个会话中。每用户配置文件跟随一个账户,并把凭据保存在该账户的上下文中。选定一种并坚持下去,因为同时存在两者的机器会显示两个同名条目,用户会连接到先出现的那个。以后更改作用域意味着先删除旧配置文件,而不是就地编辑。
面向所有用户的配置文件适合共享设备和自助终端,那里没人用个人账户登录。当证书按人签发时,这是错误的默认值,因为机器范围的配置文件无法出示属于他人的凭据。在第二台笔记本出现之前,把这个选择写进部署记录。
2. 把开关当作开关传递
Add-VpnConnection 接受的开关参数只有存在与不存在两种状态。给它们传 $true 会抛出 EapConfigXmlStream 错误,这就是为什么许多相关讨论最后都在检查从未出过问题的证书链。
Add-VpnConnection -Name "Contoso P2S" `
-ServerAddress "azuregateway-00000000-0000-0000-0000-000000000000.cloudapp.net" `
-AllUserConnection -UseWinLogonCredential -RememberCredential `
-TunnelType Automatic -EncryptionLevel Required -AuthenticationMethod MSChapv2上面的网关地址只是示意;请从下载的包中取真实地址,并保持加引号。 -AllUserConnection 需要提升的会话,而且它创建的配置文件是机器范围的,即使你以管理员身份执行命令。在添加更多开关之前,先用 Get-Help Add-VpnConnection -Parameter * 读一遍参数集。
3. 添加适配器不会添加的路由
点到站点适配器只为客户端地址池安装一条路由,别的什么都不做。
该池之外的虚拟网络前缀仍然不可达,而隧道仍报告 Connected,这是整个流程中最令人困惑的失败。连接成功后要显式添加这条路由,并把它指向适配器获得的接口地址,而不是公共网关名称。这个地址在连接后来自 ipconfig,并且会随会话变化。
route add 10.0.0.0 mask 255.255.0.0 10.0.1.5
route print -4 | findstr /c:"10.0.0.0"断开时删除该路由,以免过期的下一跳日后把流量送进黑洞。把这条命令当作有记录的本地偏离:如果将来的客户端版本自己添加了这条路由,你的那一行就会变成与包自带下一跳竞争的重复项。
4. 以标准用户身份验证
管理员会话会掩盖作用域错误,因为提权有时会提供真实用户并不拥有的凭据。
以非管理员身份登录,通过配置文件连接,并测试一个私有服务而不是公网。确认配置文件出现在 Get-VpnConnection -AllUserConnection 中,状态达到 Connected,且你添加的路由指向当前适配器地址。然后让机器睡眠、唤醒,再对比一次 ipconfig。
5. 干净地移除一次糟糕的部署
带 -AllUserConnection 和 -Force 的 Remove-VpnConnection 会删除机器范围的配置文件。Force 很关键,否则已连接的配置文件会拒绝删除,而只删了一半的配置文件比干净重装更难诊断。
把配置文件名称、网关地址和添加的路由记在部署笔记里。这三个值就是有人开单之前帮助台电话所需要的东西,也是网关地址变化时下一个脚本所需要的东西。把客户端包版本加到同一条笔记里,因为路由行为属于那个包,而不属于 Windows。