Статический маршрут в Windows добавляют командой route add -p <сеть> mask <маска> <шлюз> из командной строки или PowerShell, запущенных от имени администратора. Флаг -p записывает маршрут в реестр, и запись продолжает работать после перезагрузки. Без -p маршрут живёт до перезагрузки или до ручного удаления.
Утилита route.exe встроена в систему, доустанавливать ничего не нужно. Одна строка решает типовые задачи администратора: доступ к удалённой подсети за вторым маршрутизатором, путь к конкретному серверу через резервный канал, раздельное туннелирование VPN.
Пример, к которому будем возвращаться: подсеть 192.168.100.0/24 доступна через шлюз 10.0.0.1, а нужный сетевой адаптер имеет номер 12.
route -p add 192.168.100.0 mask 255.255.255.0 10.0.0.1 if 12 metric 10
Ниже разберём назначение каждого параметра, порядок действий, проверку через route print и диагностику, если связи не появилось.
Что такое статическая маршрутизация и зачем нужен route add
Статический маршрут - это вручную созданная запись в таблице маршрутизации, которая задаёт шлюз и интерфейс для трафика к конкретной сети. Windows выбирает путь по самому длинному совпадающему префиксу, а при равных префиксах - по меньшей метрике. Динамические протоколы RIP и OSPF в Windows настраивают редко, поэтому путь к сети, о которой машина ничего не знает, прописывают вручную.
Типовые сценарии:
- Удалённая подсеть за вторым маршрутизатором: основной шлюз ведёт в интернет, а сеть 192.168.100.0/24 живёт за другим устройством.
- Резервный или выделенный канал к одному серверу: маршрут с маской 255.255.255.255 направляет трафик к конкретному адресу через другой интерфейс.
- Раздельное туннелирование VPN: через туннель идут только рабочие подсети, интернет остаётся на локальном шлюзе.
- Сети, которые не анонсирует DHCP и не добавляет VPN-клиент.
Команда требует прав администратора. В обычной сессии Windows отвечает «The requested operation requires elevation» и маршрут не добавляет. route add меняет только таблицу маршрутизации текущей машины: чтобы Windows пересылала пакеты между интерфейсами и работала как маршрутизатор, нужен включённый IP forwarding и роль RRAS, одна команда route этого не делает.
Отдельно про источник маршрутов. Записи, полученные по DHCP или от VPN-клиента, живут в активной таблице и исчезают вместе с соединением. Постоянными их делают настройки самого клиента, а не флаг -p. Например, DHCPv4-сервер может передать клиенту статические маршруты в опции 249 (Microsoft Classless Static Route Option): она отправляется в сообщениях DHCPOFFER или DHCPACK, а каждая запись состоит из дескриптора назначения и IP-адреса маршрутизатора. Формат данных этой опции совпадает с форматом Classless Static Route, отличие только в коде опции. Windows XP и Windows Server 2003 работают только с опцией 249, остальные версии Windows используют и опцию 121, и опцию 249, причём при наличии обеих предпочитают маршруты из опции 121. Такие маршруты приходят от сервера и не являются постоянными в смысле флага -p.
Синтаксис команды route add: разбор параметров mask, gateway и -p
Общий вид команды по документации:
route [-f] [-p] [command [destination] [mask netmask] [gateway] [metric metric]] [if interface]
Для добавления маршрута:
route -p add <сеть> mask <маска> <шлюз> [metric <метрика>] [if <интерфейс>]
Флаг -p можно указывать и после команды: route add -p 192.168.100.0 mask 255.255.255.0 10.0.0.1. Такая форма встречается в большинстве инструкций и даёт тот же результат.
| Параметр | Назначение | Пример |
|---|---|---|
| destination | Целевая сеть или адрес, для которых задаётся путь | 192.168.100.0 |
| mask | Маска целевой сети, определяет, какая часть адреса относится к сети | 255.255.255.0 |
| gateway | IP-адрес шлюза, через который идёт трафик | 10.0.0.1 |
| metric | Метрика маршрута: чем меньше значение, тем выше приоритет | 10 |
| if | Номер интерфейса, через который доступен шлюз | 12 |
| -p | Делает маршрут постоянным, запись сохраняется в реестре | route -p add |
| -f | Очищает таблицу маршрутизации перед выполнением команды, опасен для удалённой работы | route -f add |
Если mask не указать, Windows подставит 255.255.255.255, то есть маршрут к одному узлу. Для подсети маску задают всегда.
Флаг -p: как сделать маршрут постоянным
Без -p запись попадает только в активную таблицу. Перезагрузка, переподключение адаптера или перезапуск службы DHCP её убирают. С -p Windows дополнительно сохраняет маршрут в реестре и восстанавливает его при старте системы: по документации Microsoft, при использовании с командой add указанный маршрут добавляется в реестр и применяется для инициализации таблицы IP-маршрутизации при каждом запуске протокола TCP/IP. По умолчанию добавленные маршруты при запуске TCP/IP не сохраняются, а постоянные маршруты хранятся именно в реестре.
Проверить постоянство просто: в выводе route print есть отдельный раздел Persistent Routes, куда попадают только записи, созданные с -p. Кстати, при использовании с командой print флаг -p как раз и выводит список постоянных маршрутов, а для всех остальных команд он игнорируется.
Пример добавления постоянного маршрута из документации Microsoft: route /p add 10.41.0.0 mask 255.255.0.0 10.27.0.1.
Три практических момента:
- При добавлении с -p и без mask маска по умолчанию равна 255.255.255.255.
- Постоянный маршрут остаётся в реестре, даже если шлюз временно недоступен. Запись не удаляется, но трафик по ней не пойдёт, пока интерфейс и шлюз не станут доступны.
- Удаление через route delete убирает запись и из активной таблицы, и из сохранённого списка постоянных маршрутов, отдельно чистить реестр не нужно.
Ещё один нюанс: маршрут, сохранённый с -p, может не заработать после перезагрузки, если номер интерфейса if изменился или адаптер получил другой адрес. Номера интерфейсов не закреплены навсегда: при смене оборудования или переустановке драйвера они пересчитываются. После изменений в железе таблицу маршрутов стоит перепроверить.
Параметры mask и gateway: типичные ошибки
Маска задаёт размер сети. 255.255.255.0 (/24) покрывает 254 адреса, 255.255.0.0 (/16) покрывает 65534. Ошибка в маске меняет охват маршрута, и часть трафика уходит не туда.
Windows проверяет согласованность адреса и маски. Если в destination выставлены биты за пределами маски, команда завершается ошибкой:
C:\>route add 10.0.1.5 mask 255.0.0.0 192.168.1.1 The route addition failed: The specified mask parameter is invalid. (Destination & Mask) != Destination.
Для сети 10.0.0.0/8 корректная запись выглядит так: route add 10.0.0.0 mask 255.0.0.0 192.168.1.1.
Вторая частая ошибка - слишком узкая маска там, где нужна широкая. Если прописать 192.168.0.0 mask 255.255.255.0, а реальная сеть занимает 192.168.0.0/16, то адреса вида 192.168.5.20 уйдут по другому маршруту, скорее всего в интернет через шлюз по умолчанию.
Шлюз должен быть доступен напрямую через один из интерфейсов машины. Если указать адрес из чужой подсети, Windows вернёт ошибку вида «The route addition failed» с пояснением, что шлюз недостижим через интерфейс. Проверяйте шлюз до добавления маршрута:
ping 10.0.0.1 tracert 10.0.0.1
Если целевая сеть подключена к машине напрямую, в поле gateway указывают 0.0.0.0, и маршрут создаётся как on-link. В выводе route print такая запись отмечена словом On-link в колонке Gateway. Текст ошибок зависит от версии и языка системы, структура команды при этом не меняется.
Как добавить постоянный маршрут: пошаговая инструкция
Последовательность одинакова для Windows 10, Windows 11 и серверных выпусков: утилита route.exe входит в состав всех поддерживаемых версий.
Откройте терминал от имени администратора: правый клик по «Командная строка» или «Windows PowerShell» и запуск от администратора.
Соберите сведения о сети: ipconfig /all покажет адреса адаптеров, route print - номера интерфейсов и текущие маршруты.
Проверьте доступность шлюза: ping <адрес шлюза>. Ответ должен прийти с того интерфейса, который собираетесь использовать.
Найдите номер интерфейса. В route print это раздел Interface List, в PowerShell - Get-NetAdapter с колонкой ifIndex.
Добавьте маршрут:
route -p add 192.168.100.0 mask 255.255.255.0 10.0.0.1 if 12 metric 10
Ответ «OK!» означает успех. Маршрут начинает работать сразу, перезагрузка для этого не нужна.
Проверьте результат: route print 192.168.100.* покажет запись в активной таблице, а раздел Persistent Routes подтвердит, что она сохранится после перезагрузки.
Проверьте связь с удалённой сетью: ping до известного адреса в целевой подсети и tracert до него. Первый хоп должен совпасть со шлюзом из маршрута.
В PowerShell есть нативная альтернатива, которая делает то же самое и сразу пишет маршрут в постоянное хранилище. Cmdlet New-NetRoute создаёт IP-маршрут в таблице IP-маршрутизации, а параметр -PolicyStore PersistentStore применяется в документации Microsoft именно для постоянных маршрутов:
New-NetRoute -DestinationPrefix "192.168.100.0/24" -InterfaceIndex 12 -NextHop 10.0.0.1 -RouteMetric 10 -PolicyStore PersistentStore
Проверка выполняется командой Get-NetRoute -DestinationPrefix "192.168.100.0/24".
Безопаснее действовать в два шага: сначала добавить маршрут без -p, проверить связь, а после успеха повторить команду с -p. Если меняете таблицу на удалённом сервере через RDP, держите страховку: запланированная перезагрузка командой shutdown /r /t 300 сбросит временные маршруты и вернёт связь, а отменить её можно командой shutdown /a.
Просмотр таблицы маршрутизации: route print
route print выводит три блока: Interface List с номерами интерфейсов, IPv4 Route Table с активными маршрутами и Persistent Routes с постоянными записями. Пример фрагмента:
Interface List
12...00 15 5d 8a 11 02 ......Intel(R) Ethernet Connection
23...........................PPP adapter VPN
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.50 25
192.168.1.0 255.255.255.0 On-link 192.168.1.50 281
192.168.100.0 255.255.255.0 10.0.0.1 10.0.0.50 10
===========================================================================
Persistent Routes:
Network Address Netmask Gateway Address Metric
192.168.100.0 255.255.255.0 10.0.0.1 Default
===========================================================================
Что означает каждая колонка:
| Колонка | Значение |
|---|---|
| Network Destination | Адрес сети назначения; 0.0.0.0 означает маршрут по умолчанию |
| Netmask | Маска сети назначения |
| Gateway | Шлюз для этой сети; On-link значит, что сеть подключена напрямую |
| Interface | IP-адрес интерфейса, через который уходит трафик |
| Metric | Приоритет: чем меньше значение, тем выше приоритет |
Значения метрик зависят от конфигурации адаптеров, поэтому ориентируйтесь на собственный вывод, а не на числа из примеров. В колонке Interface у маршрута через 10.0.0.1 стоит адрес того адаптера, который смотрит в эту подсеть.
Фильтр по адресу ускоряет поиск: route print 192.168.* покажет только записи, начинающиеся с 192.168. В PowerShell то же самое делает Get-NetRoute -AddressFamily IPv4.
Подробный разбор колонок и разницу между активными и постоянными маршрутами смотрите в материале о таблице маршрутизации Windows.
Настройка маршрута через VPN-интерфейс
При подключении VPN Windows создаёт виртуальный адаптер: PPP для встроенного клиента, TAP или WireGuard-адаптер для сторонних реализаций. Внутри туннеля есть свой шлюз, обычно это первый адрес туннельной сети. Чтобы направить в туннель только конкретную подсеть, добавляют маршрут с этим шлюзом и номером VPN-интерфейса:
route -p add 172.16.0.0 mask 255.255.0.0 10.8.0.1 if 23 metric 5
Такой приём называют раздельным туннелированием: рабочие подсети идут через VPN, остальной трафик остаётся на локальном канале и не нагружает туннель. Практические схемы для корпоративных сетей собраны в руководстве по IP-маршрутизации 2026.
Как узнать номер VPN-интерфейса
Номер интерфейса виден в route print, в разделе Interface List. Ищите строку с названием адаптера, например «PPP adapter VPN» или «WireGuard Tunnel». Номер стоит в начале строки перед многоточием: 23... означает интерфейс с индексом 23. Тот же список с колонкой Idx выдаёт команда:
netsh interface ipv4 show interfaces
В PowerShell список даёт Get-NetAdapter -IncludeHidden, нужное значение в колонке ifIndex.
Что важно помнить при работе с VPN:
- Номер интерфейса VPN существует, пока туннель подключён. После отключения адаптер исчезает из списка, поэтому постоянный маршрут, привязанный к if, до подключения VPN неактивен.
- Опция «Use default gateway on remote network» в свойствах VPN отправляет в туннель весь трафик, включая интернет. Для раздельного туннелирования её снимают, а нужные подсети добавляют маршрутами.
- Метрика решает, какой маршрут победит при перекрытии. Если у VPN-маршрута метрика ниже, чем у локального, трафик уйдёт в туннель даже при доступном локальном шлюзе.
- VPN-клиент может добавлять собственные маршруты при подключении и перекрывать ваши. Сверяйте таблицу после установки соединения, а не до него.
Удаление и изменение статических маршрутов
Удаление выполняется командой route delete, которая удаляет маршрут или маршруты:
route delete 192.168.100.0
Если к одной сети ведут несколько маршрутов через разные шлюзы, укажите маску и шлюз, чтобы удалить только нужную запись:
route delete 192.168.100.0 mask 255.255.255.0 10.0.0.1
Для постоянного маршрута достаточно указать сеть: запись исчезнет из активной таблицы и из сохранённого списка постоянных маршрутов, правка реестра вручную не нужна.
Команда route change меняет шлюз или метрику уже существующего маршрута:
route change 192.168.100.0 mask 255.255.255.0 10.0.0.254 metric 20
Ограничение: route change работает с активной записью и не создаёт постоянного маршрута. Существующую запись нельзя изменить напрямую - её нужно удалить и добавить новую. Поэтому если запись добавляли с -p, надёжнее удалить её и добавить заново с нужными параметрами, иначе после перезагрузки вернутся старые значения. В PowerShell тем же задачам соответствуют Remove-NetRoute и Set-NetRoute.
Флаг -f очищает таблицу от шлюзовых записей перед выполнением команды. На удалённом сервере он обрывает связь, поэтому применяйте его только на локальной консоли и с готовым планом восстановления.
Полный набор команд для добавления, удаления и изменения маршрутов, включая netsh, собран в шпаргалке по route и netsh.
Диагностика конфликтов и типичные ошибки
Порядок выбора маршрута в Windows предсказуем: сначала сравнивается длина префикса, побеждает более точная запись, затем при равных префиксах сравнивается метрика, меньшее значение выигрывает. Отсюда два источника конфликтов: перекрывающиеся маршруты разной длины и одинаковые префиксы с разными метриками.
Пример: в таблице есть 192.168.100.0/24 через локальный шлюз 10.0.0.1 с метрикой 25 и 192.168.100.0/24 через VPN с метрикой 5. Трафик уйдёт в туннель, даже если оба пути рабочие. Если нужен обратный результат, поднимите метрику VPN-маршрута или удалите его.
| Симптом | Причина | Что делать |
|---|---|---|
| The route addition failed: The specified mask parameter is invalid | В destination есть биты за пределами маски | Исправить адрес сети или маску |
| Ошибка добавления или неактивный маршрут | Адрес шлюза не входит в подсеть ни одного интерфейса | Проверить ipconfig и взять шлюз из своей подсети |
| Маршрут пропал после перезагрузки | Команда выполнена без -p | Добавить заново с -p |
| Трафик идёт не через тот шлюз | Перекрытие с более точным или менее метричным маршрутом | Сравнить route print до и после, скорректировать метрику |
| Маршрут есть, связи нет | Интерфейс неактивен, неверный номер if, блокировка брандмауэром или NAC | Проверить интерфейс, ping шлюза, правила фильтрации |
Что делать, если маршрут не работает
- Проверьте, что запись есть в таблице: route print 192.168.100.*
- Проверьте шлюз: ping <адрес шлюза>. Нет ответа - проблема не в маршруте, а в доступности шлюза.
- Проверьте номер интерфейса: несовпадение с if приводит к тому, что шлюз ищется на чужом адаптере.
- Сравните метрики: при равных префиксах побеждает маршрут с меньшей метрикой, а не тот, который добавлен позже.
- Проверьте путь: tracert до адреса в удалённой подсети. Первый хоп покажет фактический шлюз, pathping добавит статистику потерь по хопам.
- Проверьте фильтрацию: брандмауэр Windows, антивирус с сетевым экраном или NAC в корпоративной сети блокируют трафик при живом маршруте.
- Сверьте состояние до и после: route print > before.txt, снятый заранее, экономит время при разборе инцидента.
Если разбираться нужно с общим шлюзом и типовыми сбоями маршрута по умолчанию, посмотрите материал про default gateway.
Часто задаваемые вопросы
Сохранится ли маршрут после перезагрузки?
Да, если команда выполнена с флагом -p: запись попадает в реестр и восстанавливается при старте системы. Без -p маршрут действует до перезагрузки, переподключения адаптера или ручного удаления.
Как удалить постоянный маршрут?
Командой route delete <сеть>, при необходимости с маской и шлюзом. Запись удаляется и из активной таблицы, и из сохранённого списка постоянных маршрутов.
Можно ли использовать route add в PowerShell?
Да, route.exe вызывается из PowerShell так же, как из cmd. Для нативной работы подойдёт New-NetRoute с параметром -PolicyStore PersistentStore, он играет ту же роль, что флаг -p.
Влияет ли route add на другие интерфейсы?
Команда меняет только таблицу маршрутизации, настройки адаптеров остаются прежними. Параметр if ограничивает интерфейс, через который ищется шлюз для этой записи, а трафик к указанной сети пойдёт по новому маршруту независимо от того, какой адаптер его породил.
Как сбросить таблицу маршрутизации?
Простейший способ - перезагрузка или отключение и включение сетевого адаптера: временные маршруты исчезнут сами, постоянные вернутся из реестра. Команда netsh interface ip reset приводит стек TCP/IP к исходному состоянию, после неё статические адреса, DNS и постоянные маршруты придётся настраивать заново. Флаг route -f очищает шлюзовые записи немедленно, что на удалённом подключении обрывает связь.
Применима ли инструкция к Windows 10, Windows 11 и Windows Server?
Утилита route.exe входит в состав всех поддерживаемых клиентских и серверных версий Windows, синтаксис одинаковый. Cmdlet New-NetRoute доступен в поддерживаемых версиях Windows и Windows Server. Формулировки сообщений об ошибках зависят от локализации системы, параметры команды при этом не меняются.
Источники
- route | Microsoft Learn
- route | Microsoft Learn (EN)
- New-NetRoute (NetTCPIP) | Microsoft Learn
- [MS-DHCPE]: DHCPv4 Option Code 249 (0xF9) — Microsoft Classless Static Route Option
- Включение внешнего хранилища в Azure Local | Microsoft Learn
- Clear all and only persistent (static) routes on Windows — Server Fault
- How to Add, Delete & Modify Static Route in Windows 10/11
- DHCP Option 121 и 249 — Palo Alto Networks Knowledge Base