web-dev-qa-db-fra.com

Itinéraires statiques Windows W / O Spécification de la passerelle (Next Hop)

J'ai le scénario suivant:

Ordinateur A: 198.51.100.8, Netmask 255.255.255.0
Ordinateur B: 203.0.113.9, Netmask 255.255.255.0
[.____] Les deux ordinateurs sont sur le même segment LAN; Aucune passerelle par défaut n'est spécifiée dans les deux cas.

Pour que ces deux ordinateurs communiquent les uns avec les autres, j'ai ajouté deux itinéraires statiques, comme:

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

Cependant, je préférerais ajouter les itinéraires statiques en spécifiant un interface réseau, au lieu de en préciser un adresse IP de la passerelle.

Ceci est possible avec Linux en utilisant une commande telle que:

ip route add 203.0.113.9 dev eth0

et de la même manière à Freebsd:

route add 203.0.113.9/32 -iface fxp0 -cloning

Cependant, je suis à perte de comment faire cela avec Windows. Idéalement, je veux faire quelque chose comme:

route add 203.0.113.9 mask 255.255.255.255 if 2

mais cela imprime simplement l'utilisation de la commande route, qui me dit que je le fais mal. J'ai aussi essayé d'utiliser netsh, qui me dit:

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

Des pensées ou des suggestions?


Mise à jour: Lorsque je posté à l'origine cette question, j'utilisais Windows XP. Mais j'ai négligé de mentionner ça.

Je laisserai la réponse originale de Grilly, car il est correct pour ma question initiale. Mais si vous utilisez une version plus récente de Windows que XP/2003, donnez l'une des autres réponses à essayer.

15
fission

Cela peut ne pas être possible avec Windows

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

Citation: Pour les itinéraires de sous-réseau localement connectés, l'adresse de passerelle est l'adresse IP attribuée à l'interface connectée au sous-réseau.

7
Grizly

Dans Windows, vous pouvez ajouter un itinéraire basé sur l'interface sans connaître l'interface en passant 0.0.0.0 comme passerelle

cela donne quelque chose comme ça:

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
21
domi.vds

J'ai la même chose dans Windows 7 Enterprise avec le client Juniper Junos Pulse VPN.
[.____] J'ai eu un problème avec cela, car il a capturé toutes les adresses IPv4 possibles et les achées sur la connexion d'accès à distance:

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

Je ne voulais pas que tout mon trafic passe à travers le VPN, donc au cas où quelqu'un en a besoin, j'ai écrit un petit fichier CMD pour supprimer ces itinéraires, puis installer le seul dont j'ai besoin (10.0.0.0) sans être capable de spécifier une passerelle , en spécifiant la bonne interface.
[.____] Vous pouvez utiliser ceci pour récupérer de manière dynamique un numéro d'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%
6
Eelco L.

Le numéro d'interface en décimal est affiché avec route print. Regardez le haut de la sortie sous Interface List.

Une autre façon est d'utiliser arp -a et prendre note du nombre hexadécimal, par exemple:

C:\>arp -a

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

Les deux sont acceptés après l'argument if dans route.exe, par exemple:

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

Je préfère arp -a, car il est plus facile d'identifier la carte réseau.

Nombreuses autres manières, mais c'est la plus simple.

6
Eggie

Vous ne pouvez pas omettre la passerelle dans la table permanente. Certaines personnes offrent la mise en place d'une carte d'interface IP (côté utilisateur), qui était acceptable dans Windows XP. Mais ce n'est plus valide. OS continuera à frapper chaque interface réseau dans ce cas, au moins jusqu'à ce que le cache soit peuplé; Ce n'est pas un bon comportement et ne fait aucune différence avec la table de routage vide.

J'ai découvert que je mets là une destination IP comme une passerelle résout le problème au moins sur Windows 10. Mais j'ai peu de statistiques pour le confirmer comme une vérité de 100,1%.

0
Asdf