起因

突然SSR自启报错,如下图

SSR端口不能绑定错误

排查

起先以为是某个程序占用了1080端口

1
netstat -aon | findstr 1080

发现没有任何程序占用端口

于是更换原先端口1080,改成1088测试也不可以,基本可以排除掉自身程序和其他程序原因,应该是操作系统造成的。

后来网上搜索资料发现,这是win10的 KB4074588 补丁已知问题,系统预留了一些段,可以用命令查看系统保留了哪些端口段:

1
netsh interface ipv4 show excludedportrange protocol=tcp

显示一排被预留的端口,里面就有1080端口。

1
netsh interface ipv4 delete excludedportrange protocol=tcp startport=1080 numberofports=1

结果提示access is denied。。。

通过继续谷歌搜索,终于在github上shadowsocks-windows里找到个issue描述了这个情景,底下有人提出是Hyper-V预留端口导致的

解决方案

根据github上外国友人留言comment
由于hyper-v保留了这些端口,所以需要先关闭hyper-v,保留想要保留的端口,再开启hyper-v功能

  1. Disable hyper-v (which will required a couple of restarts)
    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

  2. When you finish all the required restarts, reserve the port you want so hyper-v doesn’t reserve it back
    netsh int ipv4 add excludedportrange protocol=tcp startport=1080 numberofports=1

  3. Re-Enable hyper-V (which will require a couple of restart)
    dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

重启就搞定了。。

感悟

没事多看看github上issue,兴许可以学到不少