许多排除的端口范围如何删除-hyper-v 已禁用

许多排除的端口范围如何删除-hyper-v 已禁用

自 Windows 2004 更新以来,我一直在与许多无法绑定到某些端口的程序和工具作斗争。我偶然发现了一些研究: netsh interface ipv4 show excludedportrange protocol=tcp

就我而言,结果是(禁用 hyper-v 后,我切换到基于 WSL2 的 Docker):

Startport     Endport
----------    --------
  1131        1230
  1231        1330
  1331        1430
  1431        1530
  1735        1834
  1835        1934
  1943        2042
  2043        2142
  2143        2242
  2243        2342
  2343        2442
  2443        2542
  2543        2642
  2643        2742
  2743        2842
  2843        2942
  2943        3042
  3129        3228
  3229        3328
  3329        3428
  3429        3528
  3831        3930
  3931        4030
  4031        4130
  4131        4230
  4231        4330
  4531        4630
  4631        4730
  5241        5340
  5357        5357
  5458        5557
  5558        5657
  5658        5757
  6040        6139
  6140        6239
  6933        7032
  7033        7132
  7133        7232
  7233        7332
  7333        7432
  7633        7732
  7733        7832
  8001        8100
  8101        8200
  8201        8300
  8301        8400
  8401        8500
  8501        8600
 27972       28071
 28072       28171
 28172       28271
 28272       28371
 28572       28671
 28672       28771
 50000       50059     *

目前,范围 1431 到 1530 阻止我运行 Oracle 数据库。但每次重启后保留范围都会发生变化。

我尝试删除一些范围 netsh int ipv4 delete excludedportrange protocol=tcp startport=1431 numberofports=100但是失败了access denied(在管理员命令中)。

什么保留了这些范围以及如何控制它们?

答案1

我找到了答案此 GitHub 评论:你可以尝试

net stop winnat

释放端口。这对您在 Windows 10 2004 中有效,对我在 Windows 10 20H2 中有效。

(在早期版本的 Windows 中,我成功使用了以下方法之一,比较我如何知道是什么阻止我的套接字绑定到 localhost:50060-50959)。

net stop LanmanWorkstation
net stop WlanSvc
net stop WwanSvc

虽然这可能会断开您的网络,但不要绝望。因为,如果上述方法之一对您有用,您可以尝试以下方法一次来永久修复此问题:

netsh int ipv4 add excludedportrange protocol=tcp startport=50323 numberofports=1

(根据您的需要调整startportnumberofports-如果需要的话,还要考虑ipv6)。

这应该会net start在相应服务关闭以及重启后继续存在,你可以使用以下方法检查

netsh interface ipv4 show excludedportrange protocol=tcp

如果输出

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
[...]
     50145       50244
     50323       50323     *
     50324       50423
[...]
* - Administered port exclusions.

你应该好一会儿。

答案2

@yoshpe 的回答(与 Hyper-V 相关)是导致该问题的一个潜在原因。

但是,对我来说,问题有所不同。就我而言,这是因为 Windows 启动时将其“动态端口”配置为从端口 1025 开始,到端口 5000 结束。因此,当 Docker Desktop 启动时,它会在 1025-5000 端口范围内保留其端口,这(有时!)与我自己的程序配置为保留/使用的端口冲突。(用于从我的本地 Kubernetes 集群到本地主机的端口转发)

要查看动态端口是否设置不正确,您可以运行:

netsh int ipv4 show dynamicport tcp

如果您看到Start Port: 1025,则说明动态端口范围配置错误。要修复此问题,您需要将其设置为更合理的范围 - 避免使用 <10k 端口。(这通常是开发人员放置自己的应用程序的地方)

将其设置为推荐范围:(如果您的问题与 ipv6 有关,请ipv4ipv6iirc 替换)

netsh int ipv4 set dynamic tcp start=49152 num=16384

欲了解更多信息,请参见:https://stackoverflow.com/a/62359555/2441655

答案3

这似乎与此处描述的 Hyper-V 问题有关:

  1. https://stackoverflow.com/a/63723105/3234715
  2. https://github.com/docker/for-win/issues/3171
  3. https://gist.github.com/strayge/481a77d31a94e133a76662877b1a90ca#another-workaround

我已添加注册表项:

reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f

清除了大多数保留端口(有许多保留范围,例如 1612-2111、2180-2779 等)

相关内容