Add a static IP alias to a DHCP interface on Windows 8 (and above)

Finally DHCP and static IPs can be configured to co-exist on one NIC. This feature has landed in the Windows 10 Creators Update (1703).

There is a new property called dhcpstaticipcoexistence in the netsh interface ipv4 set interface command, which can be set to enabled and this interface can be configured with multiple static IPs along with a DHCP-configured IP. However this has to be done with the netsh add address command, not yet possible via the GUI.

Little documentation has been published about the update to netsh and there is little discussion about it on the entire Internet (Google search dhcpstaticipcoexistence gives only 5 results at the time of this answer). But this feature is real.


Here are the exact commands required for Cecil's suggestion based on Windows 10's new dhcpstaticipcoexistence feature:

  1. Find out the interface name:

    netsh interface ipv4 show interface
    
  2. Enable dhcpstaticipcoexistence:

    netsh interface ipv4 set interface interface="interface name" dhcpstaticipcoexistence=enabled
    
  3. Add a static ip address to your interface

    netsh interface ipv4 add address "interface name" 192.168.x.xxx 255.255.255.0
    
  4. Use command 'ipconfig /all' to verify the static ip address is added. You can not do it from GUI.


I wrote a small batch-file. You can test to see if it works in your situation. (here it works fine)

  • It will set your interface back to DHCP.
  • After that it will extract IP, Subnet Mask, Default Gateway and the first DNS-server. This is the difficult bit. Especially if you have multiple interfaces. If it doesn't work we need to fiddle here a bit to get it to work.
  • If you want the second DNS too it should be added here (but i didn't look that far because one DNS should be fine for now).
  • It will set these settings "static" on the interface.
  • After that you can add the 10.x.y.z address to your interface without a problem.

Here is the script:

@echo off
set interface="Ethernet 2"
set extra_ip=10.0.0.33
set extra_mask=255.255.248.0

echo Setting %interface% back to DHCP
netsh int ipv4 set address name=%interface% source=dhcp
netsh int ipv4 set dnsservers name=%interface% source=dhcp

echo Waiting for IP to stabilize...
timeout /t 5

echo Getting current IP of %interface%
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
set IP=%_IP:~1%
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "Subnet" ^| find /v "127.0"') do set _IP=%%a
set MASK=%_IP:~1%
for /f "tokens=2 delims=:" %%a in ('type %temp%\ipconfig.txt ^| find "Default" ^| find /v "127.0" ^| find /v "::" ') do set _IP=%%a
set 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
set DNS1=%_IP:~1%

echo Setting IP Address, Subnet Mask and Default Gateway...
echo (IP %IP%, mask %MASK%, gw %GATE%)
netsh int ipv4 set address name=%interface% static %IP% %MASK% %GATE% gwmetric=1

timeout /t 5
echo Setting Primary DNS (%DNS1%)...
netsh int ipv4 set dnsserver name=%interface% static %DNS1% primary

echo Adding secondary IP...
netsh int ipv4 add address %interface% %extra_ip% %extra_mask%

timeout /t 5
echo.
echo New IP configuration:
ipconfig /all

del %temp\ipconfig.txt

You only need to run this once a period of your lease (or after a restart). So if your lease is 10 days you could set this in the task scheduler for 3 AM on Sunday and after every restart. If your computer is always off at night it would only be needed after restart.