向 Windows 8(及更高版本)上的 DHCP 接口添加静态 IP 别名

War*_*ung 23 windows alias dhcp static-ip ip

我有一台只有一个以太网端口的 Windows 8 机器。它需要使用 DHCP 还需要一个静态 IP。每个 IP 都在不同的子网中,每个 IP 都有不同的、不兼容的用途。

这台机器必须使用 DHCP,因为站点网络管理员说这是获取192.168.x.y地址的唯一支持方式。要么他的网络方案在该子网中没有静态 IP 块,要么他不会将其中一个分配给这台机器。

我不能冒险静态地使用 DHCP 分配的 IP,打赌它不会在租约到期后重新分配。这将使我能够使用 Windows 为接口分配多个静态 IP 的能力,但这是一个生产服务器,而不是我可以在数小时或数天后冒着从网络反弹的风险。

我意识到有些 DHCP 服务器允许您设置静态 MAC 到 IP 分配,这样我机器的 DHCP IP 就不会被重新分配,但是因为我知道没有 DHCP 服务器会发出两个不同的 IP 地址,每个地址都在不同的子网中,所以没有在这里帮助。(如果有这样的 DHCP 服务器,我的客户端可能不会使用它,如果我问,也不会改用它。)

由于我无法完全使用 DHCP 完成此操作,因此我需要一个静态 IP,因为这台机器还充当10.x.y.z子网的服务器。本地网络管理员已经给了我在计划一个静态IP,但它是不够的,因为我也需要跟在192.168.x.y网络侧。

我知道这里有一个类似的问题。我再次询问是因为:

  1. 另一个问题是在 Windows 7 发布时提出的。也许微软用那两年多的时间来修复 Windows 8 网络堆栈实现中的这个弱点?

    (是的,弱点:Linux 允许同时使用 DHCP 和静态 IP 的网络接口。没有任何关于 TCP/IP 的内容阻止 Microsoft 允许这样做。他们只需要编写代码来允许它。)

  2. 似乎 Windows 8 中的网络配置 GUI 具有与 Windows 7 相同的限制,但也许有一些低级黑客可以让我们为 DHCP 接口分配静态 IP 别名?

小智 22

以下是Cecil基于 Windows 10 新dhcpstaticipcoexistence功能的建议所需的确切命令:

  1. 找出接口名称:

    netsh interface ipv4 show interface
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启用 dhcpstaticipcoexistence:

    netsh interface ipv4 set interface interface="interface name" dhcpstaticipcoexistence=enabled
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将静态 IP 地址添加到您的接口

    netsh interface ipv4 add address "interface name" 192.168.x.xxx 255.255.255.0
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用命令 'ipconfig /all' 来验证是否添加了静态 ip 地址。您不能从 GUI 执行此操作。


小智 19

最后,DHCP 和静态 IP 可以配置为在一个 NIC 上共存。此功能已在 Windows 10 创意者更新 (1703) 中登陆。

命令中调用dhcpstaticipcoexistence了一个新属性netsh interface ipv4 set interface,可以将其设置为,enabled并且该接口可以配置多个静态 IP 以及一个 DHCP 配置的 IP。然而,这必须通过netsh add address命令来完成,还不能通过 GUI 来完成。

关于更新的文档很少发布netsh,整个互联网上也几乎没有关于它的讨论(谷歌搜索在这个答案时dhcpstaticipcoexistence只给出了5 个结果)。但这个功能是真实的。

  • 这个答案对我非常有用,因为它可以在重新启动时工作,并且似乎是一个很好的第一方解决方案。包括要使用的命令的示例会很好。这个答案非常接近给出示例命令,但我不得不去谷歌找出确切的语法。我最后的命令是`netsh interface ipv4 set interface interface="Ethernet" dhcpstaticipcoexistence=enabled`和`netsh interface ipv4 add address "Ethernet" 192.168.1.200 255.255.255.0`。 (7认同)

Rik*_*Rik 9

我写了一个小的批处理文件。您可以进行测试,看看它是否适用于您的情况。(这里工作正常)

  • 它会将您的接口设置回 DHCP。
  • 之后它将提取 IP、子网掩码、默认网关和第一个 DNS 服务器。这是困难的一点。特别是如果您有多个接口。如果它不起作用,我们需要在这里摆弄一下以使其工作。
  • 如果你也想要第二个 DNS,它应该添加在这里(但我没有看那么远,因为现在一个 DNS 应该没问题)。
  • 它将在界面上将这些设置设置为“静态”。
  • 之后,您可以10.x.y.z毫无问题地将地址添加到您的界面中。

这是脚本:

@回声关闭
设置接口=“以太网2”
设置 extra_ip=10.0.0.33
设置 extra_mask=255.255.248.0

echo 将 %interface% 设置回 DHCP
netsh int ipv4 设置地址名称=%interface% 源=dhcp
netsh int ipv4 set dnsservers name=%interface% source=dhcp

echo 正在等待 IP 稳定...
超时/t 5

echo 获取 %interface% 的当前 IP
ipconfig > %temp%\ipconfig.txt
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "IPv4" ^| find /v "127.0"') do set _IP=%%a
设置 IP=%_IP:~1%
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "Subnet" ^| find /v "127.0"') do set _IP=%%a
设置 MASK=%_IP:~1%
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "Default" ^| find /v "127.0" ^| find /v "::" ')设置 _IP=%%a
设置 GATE=%_IP:~1%
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "DNS Servers" ^| find /v "127.0"') do set _IP=%%a
设置 DNS1=%_IP:~1%

echo 设置 IP 地址、子网掩码和默认网关...
回声(IP %IP%,掩码 %MASK%,gw %GATE%)
netsh int ipv4 设置地址名称=%interface% static %IP% %MASK% %GATE% gwmetric=1

超时/t 5
echo 设置主 DNS (%DNS1%)...
netsh int ipv4 set dnsserver name=%interface% static %DNS1% primary

echo 添加辅助 IP...
netsh int ipv4 添加地址 %interface% %extra_ip% %extra_mask%

超时/t 5
回声。
echo 新 IP 配置:
ipconfig /全部

删除 %temp\ipconfig.txt

您只需在租用期间(或重新启动后)运行一次。因此,如果您的租期为 10 天,您可以在周日凌晨 3 点和每次重新启动后在任务计划程序中进行设置。如果您的计算机在晚上总是关闭,则只有在重新启动后才需要它。