网站搜索

在 Windows 中使用 PowerShell 管理 VPN 连接


在 Windows 10/11 GUI 中,仅提供用于配置 VPN 连接的轻量级界面,该界面不允许您配置某些 VPN 设置。您可以使用控制面板中的经典 VPN 连接设置界面和设置面板中的现代网络配置应用程序(

ms-settings:network-vpn

用于快速访问设置的 URI 命令)来设置您的 VPN 连接设置。在这篇文章中,我们将了解如何使用 PowerShell 在 Windows 中管理 VPN 连接:如何创建/更改/删除 VPN 连接以及如何连接到 VPN 服务器/从 VPN 服务器断开连接。

要在 Windows 中创建新的 VPN 连接,请使用 Add-VpnConnection cmdlet。在最简单的情况下,您需要输入连接名称和 VPN 服务器地址。

Add-VpnConnection -Name VPNname1 -ServerAddress "vpn.a-d.site” -PassThru

要配置 VPN 连接的自定义设置,请使用以下选项(最常用的选项):

  • TunnelType -VPN 隧道类型。有以下类型可供选择:

    • Automatic

      - Windows 尝试自行检测 VPN 隧道类型

    • IKEv2

      — 互联网密钥交换

    • PPTP

      - 点对点隧道协议

    • L2TP

      - 具有证书或预共享密钥的第 2 层隧道协议/IPsec

    • SSTP

      - 安全套接字隧道协议

  • L2TPPsk — 用于身份验证的预共享密钥(仅限 L2TP)。如果不设置该选项,则使用证书进行L2TP认证

  • AuthenticationMethod - 身份验证类型。您可以使用:

    Pap

    ,

    Chap

    ,

    MSChapv2

    ,

    Eap

    ,

    MachineCertificate
  • 加密级别 - 加密设置(

    NoEncryption

    ,

    Optional

    ,

    Required

    ,

    Maximum

    ,

    Custom 

    )

  • SplitTunneling - 设置计算机的所有流量是否必须通过 VPN 隧道发送(例如 VPN 适配器设置中的在远程网络上使用默认网关选项)

  • UseWinlogonCredential - 使用当前用户凭据在 VPN 服务器上进行身份验证

  • AllUserConnection - 允许所有计算机用户使用 VPN 连接

  • RememberCredential - 允许使用保存的 VPN 凭据(首次成功连接后,用户名和密码将保存在 Windows 凭据管理器中)

  • PassThru - 允许显示命令输出(建议对所有命令使用)

以下是创建不同类型 VPN 连接的 PowerShell 命令的一些示例。

  • L2TP/IPsec:

    Add-VpnConnection -Name "VPN_L2TP" -ServerAddress "vpn.a-d.site" -TunnelType L2TP -L2tpPsk "My1pre-SharedKey2" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -UseWinlogonCredential -RememberCredential -AllUserConnection -PassThru
  • PPTP:

    Add-VpnConnection -Name "VPN_PPTP" -ServerAddress "vpn.a-d.site" TunnelType "PPTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -PassThru
  • SSTP:首先,您需要将VPN服务器的根CA导入到计算机证书存储中,并使用证书中指定的VPN服务器的FQDN(CN - Common Name,或Subject Alternative Name)作为其地址:

    Add-VpnConnection -Name "VPN_SSTP" -ServerAddress "vpn.a-d.site" -TunnelType "SSTP" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -RememberCredential -SplitTunneling -PassThru 

    使用自签名证书时,您可以使用 PowerShell 将多个名称 (SAN) 添加到证书。

  • IKEv2:必须先将根CA导入到Windows受信任的根证书存储中,并将计算机证书导入到个人证书存储中:

    Import-PfxCertificate -FilePath $comp_certificate -CertStoreLocation Cert:\LocalMachine\My\ -Password $password
    Import-Certificate -FilePath $ca_cert -CertStoreLocation Cert:\LocalMachine\Root\
    Add-VpnConnection -Name "VPN_IKEv2" -ServerAddress "vpn.a-d.site" -TunnelType Ikev2 -EncryptionLevel "Maximum" -AuthenticationMethod MachineCertificate -SplitTunneling $True -PassThru

所有用户可用的 VPN 连接(使用 AllUserConnection 选项创建)显示在网络中心,系统作为所有者。用户的连接将在此处列出域\用户名。

共享 VPN 连接保存到文本文件中:

%ProgramData%\Microsoft\Network\connections\Pbk\rasphone.pbk

。

要更改现有 VPN 连接的设置,请使用 Set-VpnConnection 命令:

Set-VpnConnection -Name "VPN_SSTP" -splittunneling $false -PassThru

如果要更改现有 VPN 连接的 IPsec 选项,请使用 Set-VpnConnectionIpsecConfiguration cmdlet(仅适用于 IKEv2 或 L2TP VPN):

Set-VpnConnectionIPsecConfiguration -ConnectionName "VPN_IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -PassThru

您可以使用VPNCredentialsHelper模块来保存VPN连接的凭据。

从 PowerShell 库在您的计算机上安装模块(您也可以离线安装 PowerShell 模块):

Install-Module -Name VPNCredentialsHelper

然后,您将能够在 Windows 凭据管理器中保存 VPN 连接的用户名和密码:

$user = "vpn_username1"
$plainpass = "vpn_password1"
Set-VpnConnectionUsernamePassword -connectionname "VPN_SSTP" -username $user -password $plainpass

在现代 Windows 版本中,您可以在连接到 VPN 时动态地将静态路由添加到路由表中。

Add-VpnConnectionRoute -ConnectionName "VPN" -DestinationPrefix 192.168.31.0/24 -PassThru

只有成功连接到 VPN 服务器后,该路由才会启用。

要显示用户可用的所有 VPN 连接的列表:

Get-VpnConnection

要删除 VPN 连接:

Remove-VpnConnection -Name "VPN_SSTP"

要使用之前配置的 VPN 配置文件连接到 VPN 服务器:

rasdial "VPN_SSTP"

要获取所有 VPN 连接的状态:

Get-Vpnconnection | Select Name, Connectionstatus

以下是一些有用的文章,可解决 Windows 中 VPN 连接的典型问题:

  • VPN 错误:您可能需要更改网络设置

  • VPN 处于活动状态时无法访问互联网

  • 无法连接到 NAT-T 设备后面的 L2TP/IPsec 服务器

  • 通过 VPN 连接的 Windows DNS 解析不起作用

相关文章