Rotas estáticas do Windows sem especificação de gateway (próximo salto)

15

Eu tenho o seguinte cenário:

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

Para que esses dois computadores se comuniquem, adicionei duas rotas estáticas, assim:

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 de gateway .

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

ip route add 203.0.113.9 dev eth0

e da mesma forma no FreeBSD:

route add 203.0.113.9/32 -iface fxp0 -cloning

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

route add 203.0.113.9 mask 255.255.255.255 if 2

mas isso apenas imprime o uso do routecomando, 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?


Atualização : Quando postei originalmente esta pergunta, estava usando o Windows XP. Mas eu esqueci de mencionar isso.

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

fissão
fonte

Respostas:

7

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

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx

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

Grizly
fonte
Hey Grizly - obrigado pela resposta! Tentei os dois comandos que você sugeriu, mas obtive: "A adição da rota falhou: o índice da interface está incorreto ou o gateway não está na mesma rede que a interface. Verifique a tabela de endereços IP da máquina". Eu tenho apenas duas interfaces na máquina, 0x1 (interface MS TCP Loopback) e 0x2 (conexão de rede Intel (R) PRO / 1000 MT), por isso tenho certeza de que "se 2" é o que quero usar. Quaisquer outros pensamentos?
fissão
Apenas ignore a parte "métrica 1 se 2". Ela deve descobrir isso. Melhor testar sem -p também. (que torna mais persistente)
Grizly
Eu recebo o mesmo resultado sem a parte "métrica 1 se 2".
fission
Ohh, meu mal, parece que o gateway é o ip da interface .. resposta atualizada.
Grizly
Certo, é o que eu já estou fazendo e o que eu esperava evitar. Obrigado de qualquer maneira.
fission
21

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

isso dá algo como 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
domi.vds
fonte
2
Eu tentei isso no Windows 7 x64. Funciona! Meu comando: route ADD 176.31.111.111 0.0.0.0 IF 25Ele voltou OK!e uma nova entrada apareceu na tabela de roteamento como esperado
Dmitry
6

Eu obtive o mesmo no Windows 7 Enterprise com o cliente Juniper Junos Pulse VPN.
Eu tive um problema com isso, pois ele capturava todos os endereços IPv4 possíveis e os encaminhava 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

Como não queria que todo o meu tráfego passasse pela VPN, caso alguém precisasse, escrevi um pequeno arquivo cmd para remover essas rotas e instalar o único de que 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%
Eelco L.
fonte
1
você pode simplesmente desativar o "force tunneling" na seção de propriedades ip da sua conexão VPN.
estranho walker
5

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 -ae 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 ifargumento 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.

Inúmeras outras maneiras, mas essa é a mais simples.

Eggie
fonte
0

Você não pode omitir o gateway na tabela permanente. Algumas pessoas oferecem colocar um IP da placa de interface (lado do usuário) aceitável no Windows XP. Mas não é mais válido. O SO continuará batendo em todas as interfaces de rede nesse caso, pelo menos até que o cache seja preenchido; não é um bom comportamento e não faz diferença com a tabela de roteamento vazia.

Descobri que colocar lá um IP de destino como gateway resolve o problema pelo menos no Windows 10. Mas, no momento, tenho poucas estatísticas para confirmá-lo como 100,1% verdade.

Asdf
fonte