Adicionar um alias de IP estático a uma interface DHCP no Windows 8 (e superior)

16

Eu tenho uma máquina Windows 8 que possui apenas uma única porta Ethernet. Ele precisa usar DHCP e também precisa de um IP estático. Cada IP está em uma sub-rede diferente e cada um serve a um propósito diferente e incompatível.

Esta máquina deve usar o DHCP porque o administrador da rede do site diz que esta é a única maneira suportada de obter um 192.168.x.yendereço. O esquema de rede dele não tem um bloco IP estático nessa sub-rede ou ele não atribui um deles a esta máquina.

Não posso arriscar usar um IP atribuído por DHCP estaticamente, apostando que ele não será reatribuído após o término da concessão. Isso me permitiria usar a capacidade do Windows de atribuir vários IPs estáticos à interface, mas este é um servidor de produção, não algo que eu possa me arriscar a perder na rede horas ou dias depois.

Percebo que alguns servidores DHCP permitem configurar atribuições estáticas de MAC para IP, para que o IP DHCP da minha máquina nunca seja reatribuído, mas como não conheço nenhum servidor DHCP que emita dois endereços IP diferentes, cada um em uma sub-rede diferente, isso não é possível. ajuda aqui. (E se houver um servidor DHCP, meu cliente provavelmente não o usará e não mudaria para ele se eu perguntasse.)

Como não posso fazer isso totalmente com o DHCP, preciso de um IP estático, porque esta máquina também atua como servidor de uma 10.x.y.zsub - rede. Os administradores de rede locais têm me dado um IP estático nesse esquema, mas é insuficiente porque eu também preciso falar com o 192.168.x.ylado da rede.

Estou ciente de uma pergunta semelhante aqui . Estou perguntando novamente porque:

  1. Essa outra questão foi colocada quando o Windows 7 estava atualizado. Talvez a Microsoft tenha usado esses dois anos ou mais para corrigir essa fraqueza na implementação da pilha de rede do Windows 8?

    (Sim, fraqueza : o Linux permite uma interface de rede com um DHCP e um IP estático. Não há nada sobre o TCP / IP que impeça a Microsoft de permitir isso. Eles apenas precisam escrever o código para permitir isso.)

  2. Parece que a GUI de configuração de rede no Windows 8 tem a mesma limitação que a do Windows 7, mas talvez haja algum hack de baixo nível que nos permita atribuir um alias de IP estático à interface DHCP?

Warren Young
fonte

Respostas:

13

Finalmente, o DHCP e os IPs estáticos podem ser configurados para coexistir em uma NIC. Este recurso chegou à Atualização de Criadores do Windows 10 (1703).

Há uma nova propriedade chamada dhcpstaticipcoexistenceno netsh interface ipv4 set interfacecomando, que pode ser definida como enablede essa interface pode ser configurada com vários IPs estáticos, juntamente com um IP configurado por DHCP. No entanto, isso precisa ser feito com o netsh add addresscomando, ainda não é possível via GUI.

Pouca documentação foi publicada sobre a atualização netshe há pouca discussão sobre ela em toda a Internet (a pesquisa do Google dhcpstaticipcoexistencefornece apenas 5 resultados no momento desta resposta). Mas esse recurso é real.

Cecil
fonte
5
Essa resposta foi muito útil para mim, pois funcionava em todas as reinicializações e parecia uma boa solução de primeira parte. Incluir exemplos dos comandos a serem usados ​​teria sido bom. Essa resposta estava muito próxima de dar comandos de exemplo, mas eu tive que ir ao Google para descobrir a sintaxe exata. Meus comandos finais foram netsh interface ipv4 set interface interface="Ethernet" dhcpstaticipcoexistence=enablede netsh interface ipv4 add address "Ethernet" 192.168.1.200 255.255.255.0.
Jljtgr
13

Aqui estão os comandos exatos necessários para a sugestão de Cecil, com base no novo recurso dhcpstaticipcoexistence do Windows 10 :

  1. Descubra o nome da interface:

    netsh interface ipv4 show interface
    
  2. Ative a coexistência dhcpstatic:

    netsh interface ipv4 set interface interface="interface name" dhcpstaticipcoexistence=enabled
    
  3. Adicione um endereço IP estático à sua interface

    netsh interface ipv4 add address "interface name" 192.168.x.xxx 255.255.255.0
    
  4. Use o comando 'ipconfig / all' para verificar se o endereço IP estático foi adicionado. Você não pode fazer isso a partir da GUI.

Michael Zhang
fonte
6

Eu escrevi um pequeno arquivo em lote. Você pode testar para ver se funciona na sua situação. (aqui funciona bem)

  • Ele definirá sua interface novamente para DHCP.
  • Depois disso, extrairá o IP, a máscara de sub-rede, o gateway padrão e o primeiro servidor DNS. Esta é a parte difícil. Especialmente se você tiver várias interfaces. Se não funcionar, precisamos mexer um pouco aqui para fazê-lo funcionar.
  • Se você quiser o segundo DNS também, ele deve ser adicionado aqui (mas eu não olhei tão longe porque um DNS deve estar bom por enquanto).
  • Ele definirá essas configurações "estáticas" na interface.
  • Depois disso, você pode adicionar o 10.x.y.zendereço à sua interface sem problemas.

Aqui está o script:

@echo off
interface de configuração = "Ethernet 2"
definir extra_ip = 10.0.0.33
definir extra_mask = 255.255.248.0

eco Definindo% interface% de volta ao DHCP
netsh int conjunto de endereços IPv4 nome =% interface% source = dhcp
netsh int ipv4 set nome dnsservers =% interface% source = dhcp

eco Aguardando a estabilização do IP ...
intervalo / t 5

echo Obtendo o IP atual da% interface%
ipconfig>% temp% \ ipconfig.txt
para / f "tokens = 2 delims =:" %% a em ('digite% temp% \ ipconfig.txt ^ | encontre "IPv4" ^ | encontre / v "127.0"') defina _IP = %% a
definir IP =% _ IP: ~ 1%
para / f "tokens = 2 delims =:" %% a em ('digite% temp% \ ipconfig.txt ^ | encontre "Sub-rede" ^ | encontre / v "127.0"') defina _IP = %% a
definir MASK =% _ IP: ~ 1%
para / f "tokens = 2 delims =:" %% a in ('digite% temp% \ ipconfig.txt ^ | find "Padrão" ^ | find / v "127,0" ^ | find / v "::"') defina _IP = %% a
defina GATE =% _ IP: ~ 1%
para / f "tokens = 2 delims =:" %% a em ('digite% temp% \ ipconfig.txt ^ | encontre "Servidores DNS" ^ | encontre / v "127.0"') defina _IP = %% a
definir DNS1 =% _ IP: ~ 1%

eco Configuração de endereço IP, máscara de sub-rede e gateway padrão ...
eco (IP% IP%, máscara% MASK%, gw% GATE%)
netsh int endereço do conjunto de ipv4 =% interface% estática% IP%% MASK%% GATE% gwmetric = 1

intervalo / t 5
eco Configurando o DNS primário (% DNS1%) ...
netsh int ipv4 set dnsserver name =% interface% estático% DNS1% primário

Adicionando IP secundário ...
netsh int ipv4 adiciona o endereço% interface%% extra_ip%% extra_mask%

intervalo / t 5
eco.
eco Nova configuração de IP:
ipconfig / all

del% temp \ ipconfig.txt

Você só precisa executá-lo uma vez por período de sua concessão (ou após uma reinicialização). Portanto, se sua concessão for de 10 dias, você poderá configurá-la no agendador de tarefas às 3h no domingo e após cada reinicialização. Se o seu computador estiver sempre desligado à noite, somente será necessário após a reinicialização.

Rik
fonte
3

Uma solução alternativa poderia ser executar uma VM na mesma máquina e adicionar um IP estático a essa VM. Isso essencialmente fornecerá um adaptador virtual no host, mas para a rede 10.xvz.

A configuração de rede personalizada, semelhante à que você está solicitando, está bem documentada aqui .

Fergus
fonte
A idéia da VM é caçar borboletas com uma marreta. Adicionar um sistema de VM e licenciar o Windows para uso da VM seria complicado e provavelmente mais caro do que adicionar uma segunda NIC à máquina. Eu só preciso do 10.x.y.zendereço para servir um único programa.
Warren Young
É por isso que prefácio a resposta com "uma solução alternativa poderia ser .."; adicionar uma VM certamente funcionaria. Multihoming é óbvio; mas, novamente, sua ideia mudaria fundamentalmente a questão original. boa sorte
Fergus
1

Que tal agendar um script para adicionar o endereço IP após a inicialização:

netsh interface ipv4 add address “Local Area Connection” 10.x.y.z 255.255.255.0
Paulo
fonte
Ótima idéia, mas tenho certeza de que forçará o adaptador a sair do DHCP.
Fergus
Eu testei e o @Fergus está certo: dizer netsh interface ipv4 show addressdepois disso fornece apenas o IP estático. O IP do DHCP se foi.
Warren Young
Opa, sim, eu lembro agora. A opção seria obter o IP atual e adicionar os dois novamente. É muito improvável que uma concessão de DHCP não seja renovada enquanto estiver ativamente em uso (há um período de cortesia para evitar isso), portanto, isso só importa no momento da inicialização.
Paul
@Paul: Se eu apenas adicionar o endereço DHCP novamente netsh, isso não o tornará um IP estático, para que a pilha da caixa do Windows não continue enviando renovações de concessão de DHCP ao servidor DHCP? Quando o tempo de concessão inicial terminar, o servidor DHCP estará livre para reatribuir esse endereço.
Warren Young
@WarrenYoung Quanto tempo dura o contrato de locação? ( ipconfig /all. para mim, são 10 dias do meu roteador). Portanto, se o computador for reiniciado antes do término da concessão, não deverá ser um problema. Caso contrário, você poderá adicionar um ipconfig /releasee ipconfig /renewacima dessas linhas e agendá-lo para execução às 3h (quando ninguém estiver atrás do computador).
Rik 22/11
0

Usei o Win IP Config versão 2.7.2 de 2007 em execução no Windows 10. Defina sua NIC como DHCP, execute o Win IP Config como uma administração (ícone Clique com o botão direito do mouse em vez de clicar duas vezes na opção). Em seguida, clique em IP + e digite o endereço IP estático desejado. Agora tenho um DHCP e dois endereços estáticos. Agora eu posso fazer o desenvolvimento do meu sistema embarcado e acessar a Internet ao mesmo tempo com uma NIC!

Brandon
fonte
Isso parece ... tão ... shaddy ....
paquetp