Windows статические маршруты без указания шлюза (следующий переход)
У меня есть следующий сценарий:
Компьютер А: 198.51.100.8
, сетевая маска 255.255.255.0
Компьютер Б: 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, попробуйте один из других ответов.
4 ответа
Это может быть невозможно с окнами
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx
Цитата: Для локально подключенных маршрутов подсети адрес шлюза - это IP-адрес, назначенный интерфейсу, подключенному к подсети.
В окнах вы можете добавить маршрут на основе интерфейса, не зная интерфейса, передав 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
Номер интерфейса в десятичном виде отображается с 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
, так как проще определить NIC.
Множество других способов, но это самый простой.
Я получил то же самое в Windows 7 Enterprise с клиентом Juniper Pulse VPN.
У меня была проблема с этим, так как он захватил все возможные адреса 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%
Вы не можете опустить шлюз в постоянной таблице. Некоторые люди предлагают поставить там IP-интерфейс интерфейсной карты, что было приемлемо в Windows XP. Но это уже не действительно. В этом случае ОС будет сбивать все сетевые интерфейсы, по крайней мере, до заполнения кеша; это не хорошее поведение и не имеет значения с пустой таблицей маршрутизации.
Я обнаружил, что размещение IP-адреса назначения в качестве шлюза решает проблему, по крайней мере, в Windows 10. Но у меня пока мало статистики, чтобы подтвердить, что это правда на 100,1%.