Windows开启Hyper-V后部分应用端口被占用无法使用,记录解决过程
问题背景
本机的代理突然莫名奇妙的无法使用了,如果打开了代理就无法是上网,即使是使用全局模式或者直连模式也无法上网,国内国外的网站都无法访问。但是如果把代理关掉之后国内的网站是可以正常访问的。也就是说网络连接是没有问题的。
原因
由于安装了Hyper-V和WSL在windows环境使用Linux和Docker,没有关注到Hyper-V对端口的占用问题。
当Windows开启Hyper-V后,会在TCP 动态端口范围内随机占用一部分端口,大部分动态端口是比较靠后的,但是也可能会占用一些靠前的端口。
TCP动态端口(也称为临时端口或短暂端口)是用于客户端与服务器进行通信的端口,当一个客户端程序(如Web浏览器)需要与服务器(如Web服务器)建立连接时,操作系统会从动态端口范围内选择一个未使用的端口,用于该客户端的出站连接。
很多应用使用的端口基本在10000以内,如果Hyper-V刚好占用了靠前的端口会导致部分应用无法使用。
排查和解决
-
代理使用的本机端口是7890,首先查看7890端口有没有在使用:
netstat -ano | findstr "7890"
-
查看TCP动态端口的范围:
netsh int ipv4 show dynamicport tcp
显示
表示从1024向后的58977个端口都是TCP动态端口范围,有可能会被占用 -
查看被占用的端口号
netsh int ipv4 show excludedportrange protocol=tcp
发现7890端口在开始端口和结束端口之间,也就是端口被占用了,所以导致了代理用不了,流量转发不出去
-
修改TCP动态端口的范围
用管理员权限执行:netsh int ipv4 set dynamic tcp start=49152 num=16384
把占用的端口指定为从49152开始,避免占用靠前的端口,端口数量通过
num
指定 -
也可以将某些端口排除在TCP动态端口之外,避免被占用
netsh int ipv4 add excludedportrange protocol=tcp startport=1430 numberofports=1
-
重启电脑TCP动态端口被更新,7890端口被释放出来,代理就可以正常使用了