为什么我每次开机都要重启HNS

其实这事也没啥必要的,大家都用 clash,不过好像多数人都不会去改端口号,而我改了,改成了 1080,就多了挺多麻烦事的。

这个问题好几年前就碰到过了,之前也解决了,但就是想不起来怎么解决的了,所以每次都是重启 HNS,然后再重启 clash。

今天终于想起来了,这个问题是系统的默认动态端口范围是:1024-15000,而我把 clash 的端口改成了 1080,然后别的程序要随机分配端口的时候就会把这些端口占用了,所以我指定的 1080 就会被占用,然后 clash 就会启动失败,报错:permission denied

我们可以用 netsh int ipv4 show dynamicport tcp 来查看被占用的端口范围。

1
2
3
4
5
6
> netsh int ipv4   show dynamicport tcp

协议 tcp 动态端口范围
---------------------------------
启动端口 : 1024
端口数 : 13976

微软官方也注意到这个问题,并建议修改动态端口范围,避免和其他程序冲突。我们可以用 netsh int ipv4 set dynamicport tcp start=49152 num=16384 来修改动态端口范围。

1
2
> netsh int ipv4 set dynamicport tcp start=49162 num=16374
确定。

注意,需要在使用管理员权限的终端中执行才能生效。

参考:

https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang