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

在 Windows 8(及更高版本)上向 DHCP 接口添加静态 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 别名?

答案1

最后,DHCP 和静态 IP 可以配置为在一个 NIC 上共存。此功能已在 Windows 10 Creators Update (1703) 中推出。

dhcpstaticipcoexistence命令中有一个新属性netsh interface ipv4 set interface,可以设置为enabled,并且此接口可以配置多个静态 IP 以及 DHCP 配置的 IP。但是,这必须使用命令来完成netsh add address,目前还不能通过 GUI 来完成。

关于此更新的文档很少netsh,而且整个互联网上对此的讨论也很少(谷歌搜索dhcpstaticipcoexistence只给出5结果与回答时的结果相同)。 但这个功能是真实存在的。

答案2

以下是所需的确切命令塞西尔的建议基于 Windows 10 的新dhcpstaticipcoexistence特征:

  1. 找出接口名称:

    netsh interface ipv4 show interface
    
  2. 启用 dhcpstaticipcoexistence:

    netsh interface ipv4 set interface interface="interface name" dhcpstaticipcoexistence=enabled
    
  3. 向您的接口添加静态 IP 地址

    netsh interface ipv4 add address "interface name" 192.168.x.xxx 255.255.255.0
    
  4. 使用命令“ipconfig /all”验证是否已添加静态 IP 地址。您无法从 GUI 执行此操作。

答案3

我写了一个小的批处理文件。你可以测试一下它是否适合你的情况。(这里它运行良好)

  • 它会将您的接口设置回 DHCP。
  • 之后,它将提取 IP、子网掩码、默认网关和第一个 DNS 服务器。这是最难的部分。特别是如果您有多个接口。如果它不起作用,我们需要在这里稍微调整一下才能让它工作。
  • 如果您也想要第二个 DNS,则应该在这里添加(但我没有看那么远,因为目前一个 DNS 就应该足够了)。
  • 它会在界面上将这些设置设为“静态”。
  • 此后,您可以10.x.y.z毫无问题地将地址添加到您的界面。

脚本如下:

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

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

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

echo 获取 %interface% 的当前 IP
ipconfig > %temp%\ipconfig.txt
对于 /f "tokens=2 delims=:" %%a 在 ('type %temp%\ipconfig.txt ^| find "IPv4" ^| find /v "127.0"') 中设置 _IP=%%a
设置 IP=%_IP:~1%
对于 /f "tokens=2 delims=:" %%a 在 ('type %temp%\ipconfig.txt ^| find "Subnet" ^| find /v "127.0"') 中设置 _IP=%%a
设置 MASK=%_IP:~1%
对于 /f "tokens=2 delims=:" %%a 在 ('类型 %temp%\ipconfig.txt ^| 查找 "Default" ^| 查找 /v "127.0" ^| 查找 /v "::" ') 中设置 _IP=%%a
设置 GATE=%_IP:~1%
对于 /f "tokens=2 delims=:" %%a 在 ('类型 %temp%\ipconfig.txt ^| 查找 "DNS 服务器" ^| 查找 /v "127.0"') 中设置 _IP=%%a
设置 DNS1=%_IP:~1%

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

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

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

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

删除%temp \ ipconfig.txt

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

答案4

如何在启动后安排一个脚本来添加 IP 地址:

netsh interface ipv4 add address “Local Area Connection” 10.x.y.z 255.255.255.0

相关内容