У меня такой сценарий:
Компьютер 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, попробуйте один из других ответов.
В 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
Это может быть невозможно с окнами
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx
Цитата: для локально подключенных маршрутов подсети адрес шлюза - это IP-адрес, назначенный интерфейсу, который подключен к подсети.
Номер интерфейса в десятичном формате отображается с 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 Junos 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% истина.