我已经在我的 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
在路由器上启用了51820
Win 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 连接仍然可以正常工作。