重启 Win10 wireguard 服务器后 Wireguard 客户端无法连接到互联网

重启 Win10 wireguard 服务器后 Wireguard 客户端无法连接到互联网

我已经在我的 Win 10 PC 上设置了一个 Wireguard 服务器,以便按照这个 YouTube 视频访问我的家庭网络教程

服务器配置

[Interface]
PrivateKey = server-private
ListenPort = 51820
Address = 192.168.200.1/24

[Peer]
PublicKey = client-public
AllowedIPs = 192.168.200.2/32

我尝试通过 Android Wireguard 客户端连接到服务器

客户端配置

[Interface]
PrivateKey = client-private
Address = 192.168.200.2/24
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = server-public
AllowedIPs = 0.0.0.0/0
Endpoint = server.public.ip:51820

我已port-forwarding在路由器上启用了51820Win 10 PC 内部静态 IP 端口 51820

(Wireguard_Server)我还通过右键单击 wifi 适配器 --> 属性 --> 共享 --> 选中两个复选框以允许我的Wireguard_Server家庭网络连接,将我的家用 wifi 适配器连接到 wireguard 接口适配器。

客户端能够连接到我的服务器并成功地从公共互联网访问家庭网络,并且能够通过我的家庭网络浏览互联网。

问题始于我家的 PC 重新启动时。我能够建立从客户端到服务器的 wireguard 连接,但我无法访问家庭网络上的任何其他资源,也无法连接到互联网。

如何解决这个问题?

从技术上讲,WireGuard 接口中连接的设备是同级的。但服务器-客户端对我来说很容易理解,所以我选择了它

答案1

浏览了很多文章后,偶然发现了这个文章作者:亨利。

事实证明,窗户有点禁用重启时完成 ICS 设置在。

按照文章所述,添加了注册表项并修改了 ICS 服务,但是它不起作用,我仍然必须在服务器上手动禁用和启用 ICS,以便 Wireguard 上的 Internet 正常工作。

创建了文章中提到的以下 powershell 脚本

Function Set-NetConnectionSharing
{
    Param
    (
        [Parameter(Mandatory=$true)]
        [string]
        $LocalConnection,

        [Parameter(Mandatory=$true)]
        [bool]
        $Enabled        
    )

    Begin
    {
        $netShare = $null

        try
        {
            # Create a NetSharingManager object
            $netShare = New-Object -ComObject HNetCfg.HNetShare
        }
        catch
        {
            # Register the HNetCfg library (once)
            regsvr32 /s hnetcfg.dll

            # Create a NetSharingManager object
            $netShare = New-Object -ComObject HNetCfg.HNetShare
        }
    }

    Process
    {
        #Clear Existing Share          
        $oldConnections = $netShare.EnumEveryConnection |? { $netShare.INetSharingConfigurationForINetConnection.Invoke($_).SharingEnabled -eq $true}           
        foreach($oldShared in $oldConnections)
        {
            $oldConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($oldShared)
            $oldConfig.DisableSharing()                        
        }        
    
        # Find connections
        $InternetConnection = Get-NetRoute | ? DestinationPrefix -eq '0.0.0.0/0' | Get-NetIPInterface | Where ConnectionState -eq 'Connected'        
        $publicConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $InternetConnection.InterfaceAlias }
        $privateConnection = $netShare.EnumEveryConnection |? { $netShare.NetConnectionProps.Invoke($_).Name -eq $LocalConnection }

        # Get sharing configuration
        $publicConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($publicConnection)
        $privateConfig = $netShare.INetSharingConfigurationForINetConnection.Invoke($privateConnection)

        if ($Enabled)
        {           
            $publicConfig.EnableSharing(0)
            $privateConfig.EnableSharing(1)
        }
        else
        {
            $publicConfig.DisableSharing()
            $privateConfig.DisableSharing()
        }
    }
}

并将其设置为计划任务

任务批处理文件

@echo off
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" Set-NetConnectionSharing "Wireguard_Server" $true
  • 启动时自动运行
  • 用户是否已登录

我还必须在组策略中启用运行本地 powershell 脚本。Execution Policy : RemoteSigned

任务设置完成后,即使 wireguard 服务器重启后,wireguard 连接仍然可以正常工作。

相关内容