记一次 Windows Nat 经历,起因是,最近老是出现 Docker 报错,类似于下面这个:
Ports are not available: listen tcp 0.0.0.0/50070: bind: An attempt was made to access a socket in a way forbidden by its access permissions
然后上网搜解决方法,就是把 nat 关闭再开启,即在 Windows 终端管理员
net stop winnat
net start winnat
然后又出现一些问题,即,我的 WSL2 访问不了网络了,WSL2 采用的是 Nat 网络模式。接着使用以下方法解决:
在 Windows defender 创建了入站出站规则,似乎没用
查看 WSL2 路由表信息,似乎是正确的
抓包,发现 WSL2 可以到达 Windows 对应的 WSL 网卡,这一步也没问题
然后确定在 winnat 问题,解决如下:
打开终端管理员
Get-Service winnat: # 查看是否正在运行,结果是在运行
Restart-Service winnat: # 尝试重启,并没用
Get-NetNat: # 查看 Nat 有哪些,结果返回空
New-NetNat -Name NAT172 -InternalIPInterfaceAddressPrefix 172.0.0.0/8: # 新建一个 Nat,这才解决问题