Windows 10 网络连接共享重启失效的临时解决方案

文章介绍了如何通过修改Windows注册表来实现网络连接共享的持久化,特别是针对Windows101709及以上版本,需要KB4054517更新。作者购买了无线网卡以提升网络速度并隐藏设备,但在Linux中缺少驱动,因此选择在Windows上设置路由。由于Windows的网络共享重启后会失效,作者编写了一个PowerShell脚本来自动修复这个问题,确保每次开机都能正常共享网络。
摘要由CSDN通过智能技术生成

直接修改注册表让 Windows 启用持续化的网络连接共享,具体来说就是创建一个注册表项:

Path: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedAccess
Type: DWORD
Setting: EnableRebootPersistConnection
Value: 1
值得注意的是,这个方法只可以在 Windows 10 1709 以上,且安装了 KB 4054517 更新的计算机上生效,具体可以查看微软的文档:ICS doesn’t work after computer or service restart on Windows 10

在上海租的房子只提供了无线接入(802.11n)的方式来访问互联网,而我个人又比较希望自己能获得一个更快的无线内网,并把自己的网络设备对外部隐藏,所以我就购入了一个 NETGEAR A6210 的无线网卡,支持 802.11AC,USB 3.0 界面,准备做一个这样的网络连接:

±-------------------+ ±----------------------+
| LAN(802.11AC + GbE)| CAT5E | HP ProLiant MS Gen8 |
| (PS4, Kindle, etc) ±------+ eth0: 192.168.137.1 |
| 192.168.137.0/24 | | wlan0: 192.168.0.x/24 |
±-------------------+ ±–±------------------+
| 802.11n
±–±-----------+
| TP-LINK Router |
±---------------+
这种结构对于 Linux PC 来说十分简单,只需要开启 ip_forward 并执行 iptables -t nat -A POSTROUTING -j MASQUERADE 就能做到,但是可惜这块 USB3.0 的无线网卡主线内核里并没有驱动,MTK 开源的驱动在 OpenWrt 下性能又非常糟糕,无奈只能选择使用 Windows 来做路由。

本来呢对于 Windows 来说配置这样的网络也很简单,右击无线网卡的适配器选择共享网络连接就好了,然而万恶的微软在网络共享的实现上埋了个 bug:重启电脑后网络共享会失效,表现为被共享的接口仍然能提供 DHCP 服务,但是 IP Forward 却完全不可用。进入网络连接,取消共享后再执行一次共享,问题就能解决。

那么我们只需要准备一个计划任务让系统每次开机都重复一遍这个操作就 OK 了,写一段 PowerShell 脚本即可:

$NetShare = New-Object -ComObject HNetCfg.HNetShare
$wlan = $null
$ethernet = $null

foreach ($int in $NetShare.EnumEveryConnection) {
$props = N e t S h a r e . N e t C o n n e c t i o n P r o p s . I n v o k e ( NetShare.NetConnectionProps.Invoke( NetShare.NetConnectionProps.Invoke(int)
if ($props.Name -eq “WLAN”) {
$wlan = KaTeX parse error: Expected 'EOF', got '}' at position 8: int; }̲ if (props.Name -eq “网桥”) {
$ethernet = $int;
}
}

$wlanConfig = N e t S h a r e . I N e t S h a r i n g C o n f i g u r a t i o n F o r I N e t C o n n e c t i o n . I n v o k e ( NetShare.INetSharingConfigurationForINetConnection.Invoke( NetShare.INetSharingConfigurationForINetConnection.Invoke(wlan);
$ethernetConfig = N e t S h a r e . I N e t S h a r i n g C o n f i g u r a t i o n F o r I N e t C o n n e c t i o n . I n v o k e ( NetShare.INetSharingConfigurationForINetConnection.Invoke( NetShare.INetSharingConfigurationForINetConnection.Invoke(ethernet);

$wlanConfig.DisableSharing();
$ethernetConfig.DisableSharing();

$wlanConfig.EnableSharing(0);
$ethernetConfig.EnableSharing(1);
参考资料
NetConnectionSharing (PowerShell Module)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值