Rotas estáticas do Windows sem especificar o gateway (próximo salto)

13

Eu tenho o seguinte cenário:

Computador A: 198.51.100.8 , netmask 255.255.255.0
Computador B: 203.0.113.9 , netmask 255.255.255.0
Ambos os computadores estão no mesmo segmento da LAN; nenhum gateway padrão é especificado nos dois casos.

Para que esses dois computadores se comuniquem, adicionamos duas rotas estáticas, como:

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

No entanto, eu preferiria adicionar as rotas estáticas especificando uma interface de rede , em vez de especificar um endereço IP do gateway .

Isso é possível com o Linux usando um comando como:

ip route add 203.0.113.9 dev eth0

e similarmente no FreeBSD:

route add 203.0.113.9/32 -iface fxp0 -cloning

No entanto, estou sem saber como fazer isso com o Windows. Idealmente eu quero fazer algo como:

route add 203.0.113.9 mask 255.255.255.255 if 2

mas isso apenas imprime o uso do comando route , o que me diz que estou fazendo errado. Eu também tentei usar netsh , o que me diz:

> netsh routing ip add persistentroute 203.0.113.9 255.255.255.255 "Local Area Connection"
Specify the next-hop for non point-to-point interfaces.

Quaisquer pensamentos ou sugestões?

Atualizar : quando postei originalmente essa pergunta, estava usando o Windows XP. Mas deixei de mencionar isso.

Deixarei a resposta original de Grizly, pois ela está correta para a minha pergunta original. Mas se você estiver usando uma versão mais recente do Windows do que XP / 2003, tente uma das outras respostas.

    
por fission 23.02.2010 / 06:47

4 respostas

7

Isso pode não ser possível com o Windows

link

Quote: Para rotas de sub-rede conectadas localmente, o endereço do gateway é o endereço IP atribuído à interface que está conectada à sub-rede.

    
por 23.02.2010 / 09:04
18

No Windows, você pode adicionar uma rota baseada na interface sem conhecer a interface passando 0.0.0.0 como gateway

isto dá algo parecido com isto:

route add <IPtoRoute> mask <MaskOfTheIp> 0.0.0.0 IF <InterfaceNumber>

route add 203.0.113.9 mask 255.255.255.255 0.0.0.0 IF 2
    
por 09.10.2012 / 13:56
5

Eu obtive o mesmo no Windows 7 Enterprise com o cliente Juniper Junos Pulse VPN.
Eu tive um problema com isso, pois ele capturou todos os endereços IPv4 possíveis e os direcionou para a conexão dial-up:

Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          1.0.0.0        255.0.0.0         On-link       XX.XX.XX.XX     11
          2.0.0.0        254.0.0.0         On-link       XX.XX.XX.XX     11
          4.0.0.0        252.0.0.0         On-link       XX.XX.XX.XX     11
          8.0.0.0        248.0.0.0         On-link       XX.XX.XX.XX     11
         16.0.0.0        240.0.0.0         On-link       XX.XX.XX.XX     11
         32.0.0.0        224.0.0.0         On-link       XX.XX.XX.XX     11
         64.0.0.0        192.0.0.0         On-link       XX.XX.XX.XX     11
        128.0.0.0        128.0.0.0         On-link       XX.XX.XX.XX     11

Eu não queria que todo o meu tráfego passasse pela VPN, então, caso alguém precise, eu escrevi um pequeno arquivo cmd para remover essas rotas e depois instalei a única que eu preciso (10.0.0.0) sem poder especificar um gateway, especificando a interface correta.
Você pode usar isso para recuperar dinamicamente o número de uma interface.

@rem Get the interface number
set IF=
for /f "tokens=1,8 delims=. " %%A in ('route print') do @if /i "%%B" equ "Juniper" set IF=%%A
@rem If interface is not found, terminate quietly
if not defined IF exit /b
for %%A in (1 2 4 8 16 32 64 128) do @route delete %%A.0.0.0
route add 10.0.0.0 mask 255.0.0.0 0.0.0.0 IF %IF%
    
por 18.05.2013 / 23:16
4

O número da interface em decimal é exibido com route print . Olhe para o topo da saída abaixo Interface List .

Outra maneira é usar arp -a e anotar o número hexadecimal, por exemplo:

C:\>arp -a

Interface: 192.168.1.28 --- 0xc  
  Internet Address      Physical Address      Type
<snip>

Ambos são aceitos após o argumento if em route.exe , por exemplo:

route ADD <NET-ID> MASK <mask> <GW-address or 0.0.0.0 for on-link> IF 0xc -P

Eu prefiro arp -a , pois é mais fácil identificar a NIC.

Numerosas outras maneiras, mas isso é o mais simples.

    
por 22.06.2014 / 06:18