Статичні маршрути Windows без вказівки шлюзу (наступний перехід)


15

У мене такий сценарій:

Комп'ютер A:, 198.51.100.8мережна маска 255.255.255.0
Комп'ютер B:, 203.0.113.9маска 255.255.255.0
обох комп'ютерів в одному сегменті локальної мережі; в жодному випадку не вказаний шлюз за замовчуванням.

Щоб ці два комп'ютери спілкувалися між собою, я додав два статичні маршрути, як-от так:

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

Однак я вважаю за краще додати статичні маршрути, вказавши мережевий інтерфейс , а не вказавши IP-адресу шлюзу .

Це можливо для Linux, використовуючи таку команду, як:

ip route add 203.0.113.9 dev eth0

і подібне у FreeBSD:

route add 203.0.113.9/32 -iface fxp0 -cloning

Однак я втрачаю, як це зробити з Windows. В ідеалі я хочу зробити щось на кшталт:

route add 203.0.113.9 mask 255.255.255.255 if 2

але це просто виводить використання routeкоманди, яка говорить мені, що я роблю це неправильно. Я також намагався використовувати netsh, що говорить мені:

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

Якісь думки чи пропозиції?


Оновлення : коли я оригінально опублікував це питання, я використовував Windows XP. Але я знехтував це згадувати.

Я залишу оригінальну відповідь Грізлі, як це правильно для мого оригінального запитання. Але якщо ви використовуєте більш нову версію Windows, ніж XP / 2003, спробуйте одну з інших відповідей.

Відповіді:


7

Це може бути неможливо з вікнами

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

Цитата: Для локально приєднаних маршрутів підмережі адреса шлюзу - це IP-адреса, призначена інтерфейсу, який приєднаний до підмережі.


Гей Грізлі - дякую за відгук! Я спробував обидві запропоновані вами команди, але я зрозумів: "Додавання маршруту не вдалося: або індекс інтерфейсу неправильний, або шлюз не лежить у тій же мережі, що і інтерфейс. Перевірте таблицю IP-адреси для машини." У мене є лише два інтерфейси на машині: 0x1 (інтерфейс MS TCP Loopback) та 0x2 (мережеве підключення Intel (R) PRO / 1000 MT)), тому я майже впевнений, що "2" - це те, що я хочу використовувати. Будь-які інші думки?
поділ

Просто ігноруйте частину "показник 1, якщо 2". Це слід визначити. Найкраще тестувати і без -p. (що робить його стійким)
Grizly

Я отримую той самий результат без частини "показник 1, якщо 2".
поділ

Ох, шкода, здається, що шлюз - це ip інтерфейсу .. відповідь оновлена.
Grizly

Правильно, що я вже роблю, і чого я сподівався уникнути. Спасибі як завгодно.
поділ

21

У Windows можна додати маршрут на основі інтерфейсу, не знаючи інтерфейсу, пройшовши 0.0.0.0як шлюз

це дає щось подібне:

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

2
Я спробував це на Windows 7 x64. Це працює! Моя команда: route ADD 176.31.111.111 0.0.0.0 IF 25Він повернувся, OK!і новий запис з'явився в таблиці маршрутів, як очікувалося
Дмитро

6

Я отримав те саме в Windows 7 Enterprise з VPN-клієнтом Juniper Junos Pulse.
У мене виникла проблема з цим, оскільки він захопив усі можливі адреси IPv4 і перенаправив їх до комутованого з'єднання:

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

Я не хотів, щоб весь мій трафік проходив через VPN, тому, якщо комусь це потрібно, я написав невеликий файл cmd, щоб видалити ці маршрути, а потім встановити єдиний, який мені потрібен (10.0.0.0), не маючи змоги вказати шлюз. , вказавши правильний інтерфейс.
Ви можете використовувати це для динамічного пошуку номера інтерфейсу.

@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%

1
ви можете просто відключити "примусове тунелювання" в розділі властивостей ip вашого з'єднання vpn.
дивний ходок

5

Номер інтерфейсу в десятковій частині відображається за допомогою route print. Подивіться на верхню частину результату нижче Interface List.

Інший спосіб - використовувати arp -aта записувати шістнадцяткове число, наприклад:

C:\>arp -a

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

Обидва приймаються після ifаргументу в route.exe, наприклад:

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

Я вважаю за краще arp -a, так як простіше визначити НІК.

Численні інші способи, але це найпростіший.


0

Не можна опускати шлюз у постійній таблиці. Деякі люди пропонують поставити туди IP інтерфейсної картки (на стороні користувача), що було прийнятно в Windows XP. Але це вже не дійсно. ОС буде продовжувати збивати кожен мережевий інтерфейс у цьому випадку, принаймні, поки кеш не заповниться; це не хороша поведінка і не має значення для порожньої таблиці маршрутизації.

Я дізнався, що розміщення IP-адреси призначення в якості шлюзу вирішує проблему принаймні в Windows 10. Але в мене зараз мало статистики, щоб підтвердити це як 100,1% правди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.