Windows: маршрутизация между двумя сетями

Многие сталкивались с ситуацией, когда дома/на работе подключено два провайдера. Например, один для безлимитного инета, второй для локального файлообмена. Или для использования ресурсов в разных сетях. В этой статье рассказано о том, как я настроил сеть как раз в такой ситуации, и на этом примере рассмотрена маршрутизация в Windows.Автор: Vanger

mood: работать надо
music: долбеж Fen-Omen\’а по клавиатуре рядом со мной заглушает любой music )

ВСТУПЛЕНИЕ

Многие сталкивались с ситуацией, когда дома/на работе подключено два провайдера. Например, один для безлимитного инета, второй для локального файлообмена. Или для использования ресурсов в разных сетях. В этой статье рассказано о том, как я настроил сеть как раз в такой ситуации, и на этом примере рассмотрена маршрутизация в Windows. Да, в Windows трафик тоже маршрутизируется, и маршруты можно прописывать, она не настолько тупая (смайл).

У меня дома подключено две сети. Одна работает через ADSL, вторая — через заходящую домой витую пару с Ethernet\’ом внутри. Первую я использую для Интернета, вторую — как бекап и для того, чтобы качать файло из локального файлообменника программой emule. Инет на второй сети обычно не включен. Первая сеть рулится роутером с WiFi и встроенным свитчом, которые держат домашнюю локалку на три компа. Вторая сеть вообще нафиг не рулится, она нужна только на одном компе. Вот на этом компе и возникают проблемы :). Это мой ноутбук. Операционка на нем — Windows XP SP2.

Я расскажу вам о том, как решить такие проблемы, и в чем суть происходящих явлений. При подключении ноута к обеим сетям (первая через WiFi, вторая через встроенную сетевую карту) перестает нормально работать Интернет, в который я хожу через ADSL. Весь трафик, кроме трафика домашней локалки, пытается ходить через сеть Ethernet провайдера. В результате Интернет не работает, хотя и ресурсы домашней локалки, и ресурсы второго провайдера доступны. Для многих, пользующихся связкой «городская локалка + еще один провайдер для доступа в инет», это довольно распространенная ситуация. Разберемся, почему так происходит.

Как правило, Ethernet провайдеры, создающие городские локалки, раздают доступ в сеть, используя технологию DHCP. Эта технология позволяет автоматически раздавать IP-адреса и маршруты до локальных ресурсов. Именно благодаря этому локальные веб-сайты, файлообменники, игровые серверы, etc, доступны без подключения к Интернету. Сам инет (работающий у этого провайдера через VPN, т.е. его отдельно подключать надо) я не использую. В моей домашней локалке роутер также использует DHCP для раздачи локальных адресов, но выдает он только один маршрут — до основного шлюза, которым он сам и является. В итоге весь трафик либо крутится внутри дома и рулится встроенным свитчом роутера, либо идет в Интернет. Поэтому и возникает конфликт — маршруты Ethernet провайдера оказываются «сильнее» маршрутов домашней локалки.

ТЕОРИЯ

Посмотрим на те и другие маршруты. В винде это делается консольной командой route print (кто не знает, как выполнять команды — незачет и инструкция: ПускВыполнить набрать cmd и тыкать Enter).
Адреса, которые выдаются домашним роутером:

WiFi - Ethernet адаптер:
        DNS-суффикс этого подключения . . :
        IP-адрес  . . . . . . . . . . . . : 192.168.1.3
        Маска подсети . . . . . . . . . . : 255.255.255.0
        Основной шлюз . . . . . . . . . . : 192.168.1.1


Адреса, которые выдаются Ethernet провайдером:

LAN - Ethernet адаптер:
        DNS-суффикс этого подключения . . :
        IP-адрес  . . . . . . . . . . . . : 10.49.157.91
        Маска подсети . . . . . . . . . . : 255.255.252.0
        Основной шлюз . . . . . . . . . . : 10.49.156.1


Маршруты домашней локалки (взяты командой route print при отключенной второй сети):

Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.3       1
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.0.0      255.255.0.0      192.168.1.1     192.168.1.3       1
      192.168.1.0    255.255.255.0      192.168.1.3     192.168.1.3       25
      192.168.1.3  255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255  255.255.255.255      192.168.1.3     192.168.1.3       25
        224.0.0.0        240.0.0.0      192.168.1.3     192.168.1.3       25
  255.255.255.255  255.255.255.255      192.168.1.3     192.168.1.3       1
Основной шлюз:         192.168.1.1
=====================================================================
Постоянные маршруты:
  Отсутствует


Что значат эти маршруты и как они работают? Для начала ознакомимся с несколькими необходимыми терминами.

Термины

Маршрут (route) — путь достижения цели; трафик для достижения нужного узла в сети проходит через маршрутизаторы, которые передают друг другу маршруты до разных подсетей.
Default route (дефолт роут, шлюз по умолчанию) — основной маршрут, через который весь трафик идет по умолчанию. Выглядит как
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.00.0.0.0 adres_shlyuza kakoy-nibud_interfeis metrika
Если нет других маршрутов до места назначения — трафик направляется по default route.
Интерфейс (Interface) — сетевая дырка на компе/другом сетевом устройстве, через который идет трафик. Может быть как физическим (сетевая карта, WiFi адаптер), так и программным (PPPoE туннель, VPN канал, loopback, etc).
Метрика (Metric) — числовое значение, влияющее на выбор маршрута; чем меньше метрика — тем круче маршрут :) при прочих равных будет выбран маршрут с меньшей метрикой.

Теперь разберемся в полученных нами маршрутах:

Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.3       1

Дефолт роут как он есть. Сетевой адрес 0.0.0.0 и маска 0.0.0.0 - т.е. все адреса Интернета.
Адрес шлюза 192.168.1.1 - т.е. все адреса, указанные с помощью комбинации сетевого адреса и маски, должны быть доступны через 192.168.1.1 - мой домашний роутер.

        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1        localhost, или loopback - заворот трафика на себя

127.0.0.0.1/24 (127.0.0.1 с маской 255.0.0.0) должен быть доступен через сам комп. Это localhost, заворот трафика на себя
.
      192.168.0.0      255.255.0.0      192.168.1.1     192.168.1.3       1

Маршруты до адресов внутри «серой» подсети 192.168.*.*. Они должны быть доступны через маршрутизатор. Можно не задумываться об этом, все равно у нас это не используется.

      192.168.1.0    255.255.255.0      192.168.1.3     192.168.1.3       25
      192.168.1.3  255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255  255.255.255.255      192.168.1.3     192.168.1.3       25

Маршруты до адресов внутри домашней локалки. Все, кроме 192.168.1.3, должно быть доступно напрямую. Комп сам знает путь до всех компов внутри локалки - трафик на этом уровне идет через встроенный свитч роутера и не маршрутизируется. Адрес 192.168.1.3 - это сам комп, и трафик соответсвенно заворачивается на localhost.

        224.0.0.0        240.0.0.0      192.168.1.3     192.168.1.3       25
  255.255.255.255  255.255.255.255      192.168.1.3     192.168.1.3       1

Мультикаст-адреса (multicast). Эти адреса не маршрутизируются и рассылаются компьютером напрямую.


Теперь взглянем на вторую сеть. Я подключил шнурок от провайдера в сетевуху и отключил WiFi, отключив тем самым доступ в домашнюю локалку и Интернету через ADSL.
Route print вторая_сеть :)

Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0      10.49.156.1     10.49.157.91       1
         10.0.0.0        255.0.0.0      10.49.156.1    10.49.157.91       20
      10.49.156.0    255.255.252.0     10.49.157.91    10.49.157.91       20
     10.49.157.91  255.255.255.255        127.0.0.1       127.0.0.1       20
   10.255.255.255  255.255.255.255     10.49.157.91    10.49.157.91       20
        78.29.0.0    255.255.254.0      10.49.156.1    10.49.157.91       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
        224.0.0.0        240.0.0.0     10.49.157.91    10.49.157.91       20
  255.255.255.255  255.255.255.255     10.49.157.91    10.49.157.91       1

Основной шлюз:         10.49.156.1
=====================================================================
Постоянные маршруты:
  Отсутствует


Что такое дефолт роут мы уже разбирали, loopback и multicast-адреса тоже. Взглянем на маршруты до внутренних ресурсов провайдера.

Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
      10.49.156.0    255.255.252.0     10.49.157.91    10.49.157.91       20
     10.49.157.91  255.255.255.255        127.0.0.1       127.0.0.1       20

Подсети 10.49.156.0 - 10.49.159.255 должны быть доступны напрямую с компа. Они находятся в едином broadcast-сегменте (если непонятно, подсказка: google define:broadcast :D).

   10.255.255.255  255.255.255.255     10.49.157.91    10.49.157.91       20

Маршрутизация мультикаст-адресов в сети провайдера.
         10.0.0.0        255.0.0.0      10.49.156.1    10.49.157.91       20
        78.29.0.0    255.255.254.0      10.49.156.1    10.49.157.91       20

Внутренние ресурсы сети. Они должны быть доступны через шлюз сегмента локальной сети (10.49.156.1). Ради этого все и затевалось.


Если подключить обе сети, маршруты будут выглядеть так:

Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0      10.49.156.1    10.49.157.91       1
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.3       20
         10.0.0.0        255.0.0.0      10.49.156.1    10.49.157.91       20
        10.48.0.0      255.240.0.0      192.168.1.1     192.168.1.3       1
      10.49.156.0    255.255.252.0     10.49.157.91    10.49.157.91       20
     10.49.157.91  255.255.255.255        127.0.0.1       127.0.0.1       20
   10.255.255.255  255.255.255.255     10.49.157.91    10.49.157.91       20
        78.29.0.0    255.255.254.0      10.49.156.1    10.49.157.91       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.0.0      255.255.0.0      192.168.1.1     192.168.1.3       1
      192.168.1.0    255.255.255.0      192.168.1.3     192.168.1.3       25
      192.168.1.3  255.255.255.255        127.0.0.1       127.0.0.1       25
    192.168.1.255  255.255.255.255      192.168.1.3     192.168.1.3       25
        224.0.0.0        240.0.0.0     10.49.157.91    10.49.157.91       20
        224.0.0.0        240.0.0.0      192.168.1.3     192.168.1.3       25
  255.255.255.255  255.255.255.255     10.49.157.91    10.49.157.91       1
  255.255.255.255  255.255.255.255     10.49.157.91               4       1
  255.255.255.255  255.255.255.255      192.168.1.3     192.168.1.3       1
Основной шлюз:         192.168.1.1
=====================================================================
Постоянные маршруты:
  Отсутствует


Самое важное здесь — дефолт роуты, полученные из обоих сетей. Как мы видим, дефолт роут второго провайдера имеет меньшую метрику. Именно поэтому весь инет-трафик валится в его сеть. Раз инет там не подключен — он не работает вообще.

ПРАКТИКА

Конфликт возникает из-за того, что предпочительным оказывается default route от Ethernet провайдера.

Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0      10.49.156.1    10.49.157.91       1
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.3       20
.....


У нас есть два варианта. Можно просто переписать дефолт роут. Или можно прописать все адреса и маршруты вручную (перейти от раздачи адресов и маршрутов по DHCP к статическим адресам). Несмотря на простоту первого варианта, иногда приходится прописывать адреса вручную, поэтому опишем оба варианта.

Вариант первый
Для ручного добавления маршрута в Windows используется команда route add.

C:Documents and SettingsVanger>route

Обработка таблиц сетевых маршрутов.

ROUTE [-f] [-p] [команда [узел]
                  [MASK маска] [шлюз] [METRIC метрика] [IF-интерфейс]

  -f           Очистка таблиц маршрутов от записей для всех шлюзов.  При
               указании одной из команд, таблицы очищаются до выполнения
               команды.
  -p           При использовании с командой ADD задает сохранение маршрута
               при перезагрузке системы. По умолчанию маршруты не
               сохраняются при перезагрузке. Игнорируется для остальных команд,
               изменяющих соответствующие постоянные маршруты.
               Этот параметр не поддерживается в Windows 95.
  команда      Одна из четырех команд
                 PRINT     Печать маршрута
                 [b]ADD       Добавление маршрута[/b]
                 DELETE    Удаление маршрута
                 CHANGE    Изменение существующего маршрута
  узел         Адресуемый узел.
  MASK         Если вводится ключевое слово MASK, то следующий параметр
               интерпретируется как параметр "маска".
  маска        Значение маски подсети, связываемое с записью для данного
               маршрута.  Если этот параметр не задан, по умолчанию
               подразумевается 255.255.255.255.
  шлюз         Шлюз.
  METRIC       Определение параметра метрика/цена для адресуемого узла.


Для того, чтобы маршруты не исчезли после перезагрузки, добавляем флаг -p. Раз нам нужно просто изменить шлюз по умолчанию, добавляем следующий маршрут:

route ADD -p  0.0.0.0 MASK 0.0.0.0 192.168.1.1 METRIC 1 IF 3


IF 3 — это мой WiFi адаптер.
Список интерфейсов смотреть командой route print:

C:Documents and SettingsVanger>route print
=====================================================================
Список интерфейсов
0x1 ........................... MS TCP Loopback interface
0x2 ...00 17 08 45 95 12 ...... Broadcom 440x 10/100 Integrated Controller - Минипорт планировщика пакетов
0x3 ...00 18 de bf 05 a5 ...... Intel(R) PRO/Wireless 3945ABG Network Connection
- Минипорт планировщика пакетов
0x4 ...00 ff 40 1d 4e 92 ...... TAP-Win32 Adapter V9 - Минипорт планировщика пакетов
=====================================================================
.........


Вариант второй
Прописываем адреса и маршруты вручную. Адреса устанавливаются через консоль netsh (network shell). Хотя можно, конечно, и через GUI указать в «Сетевых подключениях», но кому нужны такие простые способы. И плюс через ГУИ сложно сделать автоматизацию, а консольные команды можно поместить в bat-файлы.
Зададим адреса для WiFi. Вместо “WiFi” подставьте название своей сети. А у меня это «WiFi» )).

netsh interface ip set address name="WiFi" source=static addr=192.168.1.10 mask=255.255.255.0 
gateway=192.168.1.1 none
netsh interface ip set dns name="WiFi" source=static addr=208.67.222.222 register=PRIMARY
netsh interface ip add dns name="WiFi" addr=208.67.220.220 index=2


Теперь для сетевой карты LAN. Вместо “LAN” впишите свою сеть.

netsh interface ip set address name="LAN" source=static addr=10.49.157.91 mask=255.255.252.0 
gateway=10.49.156.1 none
netsh interface ip set dns name="LAN" source=static addr=78.29.2.21 register=PRIMARY
netsh interface ip add dns name="LAN" addr=78.29.2.21 index=2


Дальше можно прописывать маршруты, и будет вам счастье:

route ADD -p 0.0.0.0 MASK 0.0.0.0 192.168.1.1 METRIC 1 IF 3
route ADD -p 10.0.0.0 MASK 255.0.0.0 10.49.156.1 METRIC 20 IF 2
route ADD -p 78.29.0.0 MASK 255.255.0.0 10.49.156.1 METRIC 20 IF 2
route ADD -p 10.48.0.0 MASK 255.240.0.0 10.49.156.1 METRIC 20 IF 2
route ADD -p 10.100.12.0 MASK 255.255.255.0 10.49.156.1 METRIC 20 IF 2


Видно, что прописали мы заметно меньше маршрутов, чем их было при выводе команды route print. Это происходит потому, что multicast и loopback адреса, а также маршруты до адресов внутри каждой из сетей Windows знает по умолчанию.

ЗАКЛЮЧЕНИЕ

На примере простой задачи мы рассмотрели почти все аспекты маршрутизации в Windows. Эта статья не рассказывает вам о том, как сделать из Винды роутер. Вообще не признаю виндовых роутеров, разве что если деваться больше некуда )). Но понять, как ваш компьютер выбирает путь для трафа, вы можете вполне = ). Удачных маршрутов вашему трафику.

СКАЧАТЬ

Вы можете скачать эти батники и запустить на выполнение, если Ваша конфигурация сети выглядит так же. Иначе откройте их любым текстовым редактором и измените.
1. Изменение default route для сетей с автоматическим получением ip-адреса и т.п.
2. Ручная настройка сетей и прописывание маршрутов.