Trasy statyczne Windows bez określania bramy (następny przeskok)

15

Mam następujący scenariusz:

Komputer A 198.51.100.8:, maska ​​sieci 255.255.255.0
Komputer B 203.0.113.9:, maska ​​sieci 255.255.255.0
Oba komputery są w tym samym segmencie sieci LAN; w żadnym przypadku nie określono bramy domyślnej.

Aby te dwa komputery mogły się ze sobą komunikować, dodałem dwie trasy statyczne, takie jak:

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

Wolałbym jednak dodać trasy statyczne, określając interfejs sieciowy , zamiast określając adres IP bramy .

Jest to możliwe w systemie Linux za pomocą polecenia, takiego jak:

ip route add 203.0.113.9 dev eth0

i podobnie w FreeBSD:

route add 203.0.113.9/32 -iface fxp0 -cloning

Nie wiem jednak, jak to zrobić w systemie Windows. Idealnie chcę zrobić coś takiego:

route add 203.0.113.9 mask 255.255.255.255 if 2

ale to tylko wypisuje użycie routepolecenia, które mówi mi, że robię to źle. Próbowałem również użyć netsh, co mówi mi:

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

Wszelkie myśli lub sugestie?


Aktualizacja : Kiedy pierwotnie opublikowałem to pytanie, korzystałem z systemu Windows XP. Ale nie wspomniałem o tym.

Zostawię oryginalną odpowiedź Grizly, ponieważ jest ona poprawna dla mojego pierwotnego pytania. Ale jeśli używasz nowszej wersji systemu Windows niż XP / 2003, wypróbuj jedną z pozostałych odpowiedzi.

rozszczepienie
źródło

Odpowiedzi:

7

W przypadku systemu Windows może to nie być możliwe

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

Cytat: w przypadku lokalnie podłączonych tras podsieci adres bramy to adres IP przypisany do interfejsu podłączonego do podsieci.

Grizly
źródło
Hej Grizly - dzięki za odpowiedź! Próbowałem obu poleceń, które zasugerowałeś, ale dostałem: „Dodanie trasy nie powiodło się: Indeks interfejsu jest nieprawidłowy lub brama nie znajduje się w tej samej sieci co interfejs. Sprawdź tablicę adresów IP komputera”. Mam tylko dwa interfejsy na maszynie, 0x1 (interfejs MS TCP Loopback) i 0x2 (połączenie sieciowe Intel (R) PRO / 1000 MT), więc jestem prawie pewien, że „jeśli 2” jest tym, czego chcę użyć. Jakieś inne myśli?
rozszczepienie
Po prostu zignoruj ​​część „metryka 1, jeśli 2”. Najlepiej przetestować również bez -p. (dzięki czemu jest trwały)
Grizly
Otrzymuję ten sam wynik bez części „metryka 1, jeśli 2”.
rozszczepienie
Ohh, mój zły, wygląda na to, że brama to ip interfejsu. Odpowiedź zaktualizowana.
Grizly
Racja, co już robię i czego chciałem uniknąć. W każdym razie dzięki.
rozszczepienie
21

W systemie Windows można dodać trasę na podstawie interfejsu, nie znając interfejsu, przekazując 0.0.0.0jako bramę

daje to coś takiego:

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
źródło
2
Próbowałem tego na Windows 7 x64. To działa! Moje polecenie: route ADD 176.31.111.111 0.0.0.0 IF 25powróciło OK!i zgodnie z oczekiwaniami pojawił się nowy wpis w tabeli routingu
Dmitry
6

Tak samo było w systemie Windows 7 Enterprise z klientem Juniper Junos Pulse VPN.
Miałem z tym problem, ponieważ przechwycił wszystkie możliwe adresy IPv4 i skierował je do połączenia telefonicznego:

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

Nie chciałem, aby cały mój ruch przechodził przez VPN, więc na wypadek, gdyby ktoś tego potrzebował, napisałem mały plik cmd, aby usunąć te trasy, a następnie zainstalowałem jedyny, którego potrzebuję (10.0.0.0), bez możliwości określenia bramy , określając odpowiedni interfejs.
Możesz użyć tego do dynamicznego pobierania numeru interfejsu.

@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.
źródło
1
możesz po prostu wyłączyć „wymuszanie tunelowania” w sekcji właściwości ip połączenia VPN.
dziwny piechur,
5

Numer interfejsu w postaci dziesiętnej jest wyświetlany za pomocą route print. Spójrz na górę wyników poniżej Interface List.

Innym sposobem jest użycie arp -ai zapisanie liczby szesnastkowej, np .:

C:\>arp -a

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

Oba są akceptowane po ifargumencie w route.exe, np .:

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

wolę arp -a , ponieważ łatwiej jest zidentyfikować kartę sieciową.

Wiele innych sposobów, ale jest to najprostszy.

Eggie
źródło
0

Nie można pominąć bramy w stałej tabeli. Niektóre osoby oferują wprowadzenie adresu IP karty interfejsu (po stronie użytkownika), co było dopuszczalne w systemie Windows XP. Ale to już nie jest ważne. System operacyjny będzie w tym przypadku pukał do każdego interfejsu sieciowego, przynajmniej do momentu zapełnienia pamięci podręcznej; nie jest to dobre zachowanie i nie ma znaczenia przy pustej tabeli routingu.

Dowiedziałem się, że umieszczenie docelowego adresu IP jako bramy rozwiązuje problem co najmniej w systemie Windows 10. Ale w tej chwili mam mało statystyk, aby potwierdzić to jako 100,1% prawdy.

Asdf
źródło