有时开机后,ssr 直接报端口被占,如图:
查找占用程序
大多情况下,首先能想到的就是查找网络服务:
netstat -ano | findstr 1081
如果结果里面有结果,那直接按照 PID 找到对应内容,直接关闭它就可以。
# 关闭
taskkill /pid 12345 /f
另外,像我就经常给 ssr 切换一个端口,比如 1082、1080 这样的。但是有些时候连续切几个也不好使,而且也查不到被占端口。这个时候就需要考虑默认预留的情况。
系统保留端口机制(Windows动态端口保留)
Hyper-V/容器化技术影响
Windows启用Hyper-V或安装Docker/WSL后,系统会动态保留端口范围。即使netstat未显示占用,这些端口仍被系统锁定无法使用。
netsh int ipv4 show excludedportrange protocol=tcp
通过排查可以看到系统预留端口:
像我这样,此时可以看到 1081 在它预留范围内。这时候,只需要把 ssr 端口设为像 1078 这样在它范围之外的值即可。
动态端口范围调整
Windows默认动态端口范围为49152-65535,但系统更新或安全策略可能导致范围扩展至1081。
如果我们想给 windows 配置范围,可以:
# 重置动态端口范围(需管理员权限)
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
强制排除
还有时候,我们仅仅想预留一些固定的端口给我们自己用,此时可以强制排除:
netsh int ipv4 add excludedportrange protocol=tcp startport=1081 numberofports=1
这样,1081 端口就永远排除在保留列表之外了。
文章评论