Содержание
[Routing] Шпаргалка про роутинг в Windows
Привет, %username%
! Поскольку часто приходится настраивать ВПНы на чужих машинах и предоставлять доступ к каки-либо ресурсам нашей сети, а чаще всего это просто конкретные машины, то надо записать себе шпаргалку по добавлению статических маршрутов в ОСях семейства Windows (XP/7/8/8.1). Все элементарно и просто.
Синтаксис
route [-f] [-p] [*команда* [*конечная_точка*] [mask <маска_сети>] [<шлюз>] [metric <метрика>]] [if <интерфейс>]]
Параметры
-
-f
— Очищает таблицу маршрутизации от всех записей, которые не являются узловыми маршрутами (маршруты с маской подсети255.255.255.255
), сетевым маршрутом замыкания на себя (маршруты с конечной точкой127.0.0.0
и маской подсети255.0.0.0
) или маршрутом многоадресной рассылки (маршруты с конечной точкой224.0.0.0
и маской подсети240.0.0.0
). При использовании данного параметра совместно с одной из команд (таких, какadd
,change
илиdelete
) таблица очищается перед выполнением команды. -
-p
— При использовании данного параметра с командойadd
указанный маршрут добавляется в реестр и используется для инициализации таблицы IP-маршрутизации каждый раз при запуске протокола TCP/IP. По умолчанию добавленные маршруты не сохраняются при запуске протокола TCP/IP. При использовании параметра с командой print выводит на экран список постоянных маршрутов. Все другие команды игнорируют этот параметр. Постоянные маршруты хранятся в реестре по адресуHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersPersistentRoutes
-
команда
— Указывает команду, которая будет запущена на удаленной системе.
Список допустимых параметров:
Команда | Назначение |
---|---|
add | Добавление маршрута |
change | Изменение существующего маршрута |
delete | Удаление маршрута или маршрутов |
Печать маршрута или маршрутов |
-
конечная_точка
— Определяет конечную точку маршрута. Конечной точкой может быть сетевой IP-адрес (где разряды узла в сетевом адресе имеют значение 0), IP-адрес маршрута к узлу, или значение0.0.0.0
для маршрута по умолчанию. -
mask <маска_сети>
Указывает маску сети (также известной как маска подсети) в соответствии с точкой назначения. Маска сети может быть маской подсети соответствующей сетевому IP-адресу, например255.255.255.255
для маршрута к узлу или0.0.0.0
. для маршрута по умолчанию. Если данный параметр пропущен, используется маска подсети255.255.255.255
. Конечная точка не может быть более точной, чем соответствующая маска подсети. Другими словами, значение разряда 1 в адресе конечной точки невозможно, если значение соответствующего разряда в маске подсети равно 0. -
шлюз
— Указывает IP-адрес пересылки или следующего перехода, по которому доступен набор адресов, определенный конечной точкой и маской подсети. Для локально подключенных маршрутов подсети, адрес шлюза — это IP-адрес, назначенный интерфейсу, который подключен к подсети. Для удаленных маршрутов, которые доступны через один или несколько маршрутизаторов, адрес шлюза — непосредственно доступный IP-адрес ближайшего маршрутизатора. -
metric <метрика>
— Задает целочисленную метрику стоимости маршрута (в пределах от 1 до 9999) для маршрута, которая используется при выборе в таблице маршрутизации одного из нескольких маршрутов, наиболее близко соответствующего адресу назначения пересылаемого пакета. Выбирается маршрут с наименьшей метрикой. Метрика отражает количество переходов, скорость прохождения пути, надежность пути, пропускную способность пути и средства администрирования. -
if <интерфейс>
— Указывает индекс интерфейса, через который доступна точка назначения. Для вывода списка интерфейсов и их соответствующих индексов используйте командуroute print
. Значения индексов интерфейсов могут быть как десятичные, так и шестнадцатеричные. Перед шестнадцатеричными номерами вводится0х
. В случае, когда параметрif
пропущен, интерфейс определяется из адреса шлюза. -
/?
— Отображает справку в командной строке.
Примечания
- Большие значения в столбце
metric
таблицы маршрутизации — результат возможности протокола TCP/IP автоматически определять метрики маршрутов таблицы маршрутизации на основании конфигурации IP-адреса, маски подсети и стандартного шлюза для каждого интерфейса ЛВС. Автоматическое определение метрики интерфейса, включенное по умолчанию, устанавливает скорость каждого интерфейса и метрики маршрутов для каждого интерфейса так, что самый быстрый интерфейс создает маршруты с наименьшей метрикой. Чтобы удалить большие метрики, отключите автоматическое определение метрики интерфейса в дополнительных свойствах протокола TCP/IP для каждого подключения по локальной сети. - Имена могут использоваться для параметра
<конечная_точка>
, если существует соответствующая запись в файле базы данныхNetworks
, находящемся в папке*системный_корневой_каталог*System32DriversEtc
. В параметре<шлюз>
можно указывать имена до тех пор, пока они разрешаются в IP-адреса с помощью стандартных способов разрешения узлов, таких как запрос службы DNS, использование локального файлаHosts
, находящегося в папке*системный_корневой_каталог*system32driversetc
, или разрешение имен NetBIOS. - Если команда —
print
илиdelete
, параметр<шлюз>
опускается и используются подстановочные знаки для указания точки назначения и шлюза. Значение<конечной_точки>
может быть подстановочным значением, которое указывается звездочкой (*
). При наличии звездочки (*
) или вопросительного знака (?
) в описании конечной точки, они рассматриваются как подстановки, тогда печатаются или удаляются только маршруты, соответствующие точке назначения. Звездочка соответствует любой последовательности символов, а вопросительный знак — любому одному символу.10.*.1
,192.168.*
,127.*
и*224*
являются допустимыми примерами использования звездочки в качестве подстановочного символа. - При использовании недопустимой комбинации значений конечной точки и маски подсети (маски сети) выводится следующее сообщение об ошибке:
Маршрут: неверная маска подсети адреса шлюза
. Ошибка появляется, когда одно или несколько значений разрядов в адресе конечной точки равно 1, а значения соответствующих разрядов маски подсети — 1. Для проверки этого состояния выразите конечную точку и маску подсети в двоичном формате. Маска подсети в двоичном формате состоит из последовательности единичных битов, представляющей часть сетевого адреса конечной точки, и последовательности нулевых битов, обозначающей часть адреса узла конечной точки. Проверьте наличие единичных битов в части адреса точки назначения, которая является адресом узла (как определено маской подсети). - Параметр
-p
поддерживается в командеroute
только в операционных системах Windows NT 4.0, Windows 2000, Windows Millennium Edition и Windows XP. Этот параметр не поддерживается командойroute
в системах Windows 95 и Windows 98. - Эта команда доступна, только если в свойствах сетевого адаптера в объекте Сетевые подключения в качестве компонента установлен протокол Интернета (TCP/IP).
Примеры
Чтобы вывести на экран все содержимое таблицы IP-маршрутизации, введите команду:
route print
Чтобы вывести на экран маршруты из таблицы IP-маршрутизации, которые начинаются с *10.*
, введите команду:
route print 10.*
Чтобы добавить маршрут по умолчанию с адресом стандартного шлюза 192.168.12.1
, введите команду:
route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
Чтобы добавить маршрут к конечной точке 10.41.0.0
с маской подсети 255.255.0.0
и следующим адресом перехода 10.27.0.1
, введите команду:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1
Чтобы добавить постоянный маршрут к конечной точке 10.41.0.0
с маской подсети 255.255.0.0
и следующим адресом перехода 10.27.0.1
, введите команду:
route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1
Чтобы добавить маршрут к конечной точке 10.41.0.0
с маской подсети 255.255.0.0
и следующим адресом перехода 10.27.0.1
и метрикой 7
, введите команду:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
Чтобы добавить маршрут к конечной точке 10.41.0.0
с маской подсети 255.255.0.0
и следующим адресом перехода 10.27.0.1
и использованием индекса интерфейса 0х3
, введите команду:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3
Чтобы удалить маршрут к конечной точке 10.41.0.0
с маской подсети 255.255.0.0
, введите команду:
route delete 10.41.0.0 mask 255.255.0.0
Чтобы удалить все маршруты из таблицы IP-маршрутизации, которые начинаются с *10.*
, введите команду:
route delete 10.*
Чтобы изменить следующий адрес перехода для маршрута с конечной точкой 10.41.0.0
и маской подсети 255.255.0.0
с 10.27.0.1
на 10.27.0.25
, введите команду:
route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
На этом все! Profit!
Обсудить статью в чате TG или в Slack
Маршрутизация между нашими подсетями в Windows
С чем обязательно придётся столкнуться при сопряжении разных подсетей – это маршрутизация. Ох, сколько раз я задумчиво чесал затылок не понимая, почему узел назначения оставался недоступным. Ну чтож, попробуем это чётко спланировать, чтобы не ошибиться.
Я немного перерисовал исходную схему, чтобы было понятно, как будет проходить маршрутизация и какой интерфейс с каким адресом. Вот план нашей задачи (немного преобразованый):
Подпишу сетевые интерфейсы:
- 192.168.10.2/24
- 192.168.10.1/24
- 10.0.0.10/24
- 10.0.0.20/24
- 192.168.20.1/24
- 192.168.20.2/24
Всё просто. Шлюзы внутри с адресом .1, снаружи – по номеру подсети .10 – 10-ая подсеть, .20 – 20-ая подсеть. А хосты с адресом .2. Думаю, с этим вопросов не возникло. Чтож, проверим маршрутизацию сейчас. Для этого с каждого узла пропингуем все остальные хосты.
Доступность узлов в сети
Как мы видим, доступность есть только у узлов, непосредственно связанных виртуальным сетевым кабелем. Будем это исправлять!
Маршруты будем добавлять с помощью команды ROUTE командной строки. Что нам нужно добавить? Смотрим в табличку и добавляем те назначения, которые мы НЕ видим. И прописываем тот узел, который является следующим шагом для пакета на этом пути. Вот подробности:
- Для HOST:
-
- назначение – 10.0.0.0/24 направляем на 192.168.10.1
- назначение – 192.168.20.0/24 направляем на 192.168.10.1
- Для SERV:
-
- назначение – 192.168.20.0/24 направляем на 10.0.0.20
- Для MAIN:
-
- назначение – 192.168.10.0/24 направляем на 10.0.0.10
- Для ADMIN:
-
- назначение – 192.168.10.0/24 направляем на 192.168.20.1
- назначение – 10.0.0.0/24 направляем на 192.168.20.1
Прописываем маршруты Route
Как добавляются маршруты для рабочих станций? Утилита route
Синтаксис примерно такой:
route add MASK <mask><ga></mask>
Покажем на примере. Узел host. Передавать пакеты на узел serv.main.com. Пробуем послать ping, пакеты не доходят. (см. скриншот выше). Почему? Да потому что наш компьютер не знает, куда передавать пакеты в неизвестную подсеть (узел 10.0.0.10). Это не наша подсеть, поэтому теряемся в догадках.
Задача маршрутизации – обеспечить передачу пакетов в другие сети. Если бы у нас был установлен основной шлюз (default gateway), то все пакеты с неизвестным адресом сети назначения передавались бы именно на него “Пусть сами разбираются”, но такой параметр у нас не указан.
Итак, настраиваем узел host.
route add 10.0.0.0 mask 255.0.0.0 192.168.10.1
Все пакеты, адрес назначения которых стоит “подсеть 10.0.0.0/8” будут отправляться на 192.168.10.1. Что происходит при этом на 192.168.10.1? 192.168.10.1 – это узел serv.main.com, который имеет второй сетевой интерфейс 10.0.0.10. Пакеты на этот интерфейс, посланные с host – дойдут без проблем, так как маршрут до узла мы прописали.
Вот такая занимательная маршрутизация. Итак, маршрут до 10.0.0.10 у нас есть. Сделаем аналогичным образом маршруты до подсети 192.168.20.0/24. Всё-всё-всё посылаем на 192.168.10.1 (так как – это наш единственный “выход” с узла host).
Пришла пора настраивать узел serv.main.com, который стал полновесным маршрутизатором.
Идём в управление сервером и смотрим, чтобы была установлена роль “Маршрутизация и удалённый доступ” (Routing and remote access). Если всё ОК, входим в “Администрирование” в эту оснастку.
Маршрутизация и удалённый доступ в Windows Server 2003
Или устанавливаем её. Для этого отключаем службу Windows Firewall
После добавления роли “Маршрутизация и удалённый доступ” мы видим следующую оснастку. Открываем конфигурирование.
Начинаем конфигурирование. Настраивать будем всё вручную, чтобы лучше разобраться в маршрутизации.
А в этом окне мастера настройки маршрутизации и удалённого доступа выбираем “маршрутизацию между сетями”. Как раз то, что нужно.
И у нас появилось вот такое дерево в консоли MMC. Интересует нас “статические маршруты”.
И добавим вот такой маршрут. В общем-то это похоже на графическую оболочку утилиты route, поэтому объясню лишь то, что мы сделали. Для сети 192.168.10.0/24 мы указали адрес следующего прыжка 192.168.10.1 для пакетов, пришедших с интерфейса 10.0.0.10 (т.е. те пакеты, которые идут извне к нам, например от узла MAIN.COM или ADMIN.MAIN.COM
Подобную ситуцию сделаем и на MAIN.COM
В общем виде – то же самое. Указываем “ОТКУДА”, “КУДА” и “КУДА ПОСЫЛАТЬ”. На метрику внимания не обращаем, это для приоретизации одних маршрутов перед другими, когда из одной точки можно добраться в другую разными путями.
Маршруты настроили. Простая проверка PING доказывает. Все узлы доступны друг для друга!
Друзья! Вступайте в нашу группу Вконтакте, чтобы не пропустить новые статьи! Хотите сказать спасибо? Ставьте Like, делайте репост! Это лучшая награда для меня от вас! Так я узнаю о том, что статьи подобного рода вам интересны и пишу чаще и с большим энтузиазмом!
Также, подписывайтесь на наш канал в YouTube! Видео выкладываются весьма регулярно и будет здорово увидеть что-то одним из первых!
Статья про таблицу маршрутизации — тема, обещанная около четырех лет тому назад. На самом деле, давно нужно было про нее написать, но никак не мог решиться и только сейчас делаю попытку.
Манипуляции с таблицей маршрутизации позволяют тонко настраивать работу ваших сетей. Чаще всего это не нужно, но иногда требуется сделать что-то необычное, особенно, когда на комрьютере несколько адаптеров, и тогда приходится браться за таблицы маршрутизации.
Просмотр таблицы маршрутизации
Приведу вывод команды route print на моем стаионарном компьютере:
Сетевой адрес | Маска сети | Адрес шлюза | Интерфейс | Метрика |
---|---|---|---|---|
0.0.0.0 | 0.0.0.0 | 192.168.1.1 | 192.168.1.100 | 20 |
127.0.0.0 | 255.0.0.0 | On-link | 127.0.0.1 | 306 |
127.0.0.1 | 255.255.255.255 | On-link | 127.0.0.1 | 306 |
127.255.255.255 | 255.255.255.255 | On-link | 127.0.0.1 | 306 |
192.168.1.0 | 255.255.255.0 | On-link | 192.168.1.100 | 276 |
192.168.1.100 | 255.255.255.255 | On-link | 192.168.1.100 | 276 |
192.168.1.255 | 255.255.255.255 | On-link | 192.168.1.100 | 276 |
244.0.0.0 | 240.0.0.0 | On-link | 127.0.0.1 | 306 |
244.0.0.0 | 240.0.0.0 | On-link | 192.168.1.100 | 276 |
255.255.255.255 | 255.255.255.255 | On-link | 127.0.0.1 | 306 |
255.255.255.255 | 255.255.255.255 | On-link | 192.168.1.100 | 276 |
Вот так мы можем просмотреть таблицы маршрутизации. Попробуем описать, что все это означает. Каждая строчка опреедляет, куда отправлять какие пакеты. То есть для диапазона, задаваемого значениями в колонках «сетевой адрес» и «маска сети» создается сетевой маршрут. Например, адрес 192.168.0.1 и маска 255.255.255.0 означают, что имеется в виду диапазон 192.168.0.*. Маска всегда имеет вид, когда вначале стоят 255, в конце — нули, а последним ненулевым числом может быть степень двойки минус один. Например, для маски 255.255.127.0 и того же адреса 192.168.0.1 диапазон будет чуть шире, в него войдут и адреса вида 192.168.1.*. Чтобы описать это точнее, надо представить все числа в двоичном виде, но это не является целью статьи.
Итак, если мы определились с диапазоном, мы должны понять, куда же компьютер будет направлять пакеты, если они предназначены адресам из этого диапазона. Начнем с четвертой колонки. Она определяет тот адаптор, на который нужно отправлять пакеты. Например, в данном случае, в ней встречаются 192.168.1.100 — это адрес моей сетевой карты и 127.0.0.1 — так называемая обратная петля. Пакеты «на этот адаптор» компьютер даже не будет пытаться отправлять куда-либо. Если бы у меня была активна другая карта, например, WiFi, то в четвертой колонке встречался бы и е адрес.
Третья колонка определяет «шлюз» — тот маршрутизатор, которому нужно послать эти пакеты. В случае, когда там написано «On-link», имеется в виду, что никаких маршрутизаторов не нужно — адрес и так находится в прямой досягаемости. Последняя колонка — метрика. Она определяет предпочтение для маршрута, когда есть варианты. Строчки с наименьшей метрикой предпочтительны при совпадении диапазонов.
Итак, давайте разберем описанные маршруты. На самом деле, самой важной является в данном случае первая строчка. Она говорит, что для любого адреса (адрес 0.0.0.0 с маской 0.0.0.0 задает полный диапазон) есть маршрут с использованием моей сетевой карты, и направить можно эти пакеты по адресу 192.168.1.1. Последний адрес является моим роутером, что все и объясняет. Любой адрес, который компьютер не сможет найти где-то рядом, он направит на роутер и предоставит тому с ним разбираться.
Поговорим про остальное. Три строчки про 127 — системные, связаны с тем, что эти адреса всегда должны возвращаться на сам компьютер. Адреса диапазона 192.168.1.* являются локальной сетью, 192.168.1.100 — вообще наш адрес, 192.168.1.255 — специальный адрес для широковещательных пакетов в локальной сети. Адреса 244.0.0.0 — тоже специальные зафиксированные адреса для широкого вещания, а две последние строчки определяют сами адаптеры.
Но этот случай достаточно неинтересный. Посмотрим на таблица на моем роутере. Внешний вид будет немного другой, поскольку на нем Линукс, и я вывожу соответствующие таблицы командой route -n.
Destination | Gateway | Genmask | Flags | Metric | Ref | Use | Iface |
---|---|---|---|---|---|---|---|
10.0.20.43 | 0.0.0.0 | 255.255.255.255 | UH | ppp0 | |||
192.168.1.0 | 0.0.0.0 | 255.255.255.0 | U | br0 | |||
10.22.220.0 | 0.0.0.0 | 255.255.255.0 | U | vlan1 | |||
10.0.0.0 | 10.22.220.1 | 255.224.0.0 | UG | vlan1 | |||
127.0.0.0 | 0.0.0.0 | 255.0.0.0 | U | lo | |||
0.0.0.0 | 10.0.20.43 | 0.0.0.0 | UG | ppp0 |
Заметим сразу, что колонки немного изменились. На всех мы останавливаться не будем, существенной измененной колонкой является последняя — вместо IP-адреса адаптора мы указываем его имя. Здесь lo — это «петля» (никуда не отправлять), br0 — внутренняя сеть, ppp0 — внешняя, vlan0 — установленное vpn-содениение. Итак, разберем строчки. Также в колонке с флагами буква G означает Gateway — шлюз, а H — Host, наш компьютер.
Последняя строчка — шлюз по умолчанию. Любой пакет мы может отправить на адрес 10.0.20.43. Что интересно, это — наш собственный адрес, полученный при установке VPN — соединения! Так всегда получается, когда установлено VPN-соединения, пакет, в первую очередь отправляем своему виртуальному интерфейсу, где он инкапсулируется в другой пакет, который пойдет до реального шлюза. Естественно, в таблицах маршрутизации этого не видно. Также к описанию этого соединения относится и первая строчка.
Настоящий шлюз мы видим в третей строчке — адресы диапазона 10.22.220.* отправляются на vlan1, шлюз, предоставленный провайдером, коммуникатор, с которым мы соединены сетевым кабелем напрямую. Вторая строчка говорит о том, что адреса диапазона 192.168.1.* — это локальная сеть, и пакеты к ним нужно отправлять внутрь, а не вовне. Пятая — обычная информация про «локальные адреса».
Команды таблицы маршрутизации
Я ничего не сказал про предпоследнюю строчку. А она самая интересная, ведь я ее добавил руками. В чем ее смысл? Адреса диапазона 10.1-32.*.* я отправляю на шлюз 10.22.220.1. Пакеты на эти адреса не пойдут в интернет, а останутся в локалке провайдера. Да, пакеты на диапазон 10.22.220. и так идут туда, но этого мало. Так я не получаю полноценного доступа к локальным ресурсам.
В случае Windows такой маршрут в таблицы маршрутизации был бы добавлен командой route -p add 10.0.0.0 mask 255.224.0.0 10.22.220.1. -p означает, что маршрут постоянный, он не должен удаляться после перезагрузки компьютера.
Статья и так уже получилась намного длинней обычных статей этого блога, так что я заканчиваю. Пишите свои вопросы здесь, а если же вы хотите разобрать какие-то спицифические случаи настройки, лучше обращайтесь на нашем форуме.
← Что такое компакт-диски? | Как разбить жесткий диск? → |
comments powered by DisqusИспользуемые источники:
- https://jtprog.ru/windows-route-add/
- https://litl-admin.ru/windows-2/nastrojka-marshrutizacii-mezhdu-podsetyami.html
- https://it.sander.su/routing_table.php