@TmpUser13

Как работает маршрутизация с двумя шлюзами по умолчанию?

Добрый день.

Прошу объяснить принцип работы маршрутизации в данном случае. В конфигурации ниже все работает, но я хочу понять причину, почему оно вообще работает.

Есть ПК на Windows (он же сервер видеонаблюдения). В сервер установлено две сетевых карты.
Была поставлена следующая задача:
Выдать на этот сервер два IP-адреса из подсетей 10.10.10.0/24 и 10.10.118.0/24. Пользователи должны иметь возможность ходить на сервер по двум айпишникам из любых подсетей организации (допустим из 10.10.0.0/16)

В итоге, на сервер были прописаны следующие IP:
10.10.10.26
10.10.118.2
А также указаны соответствующие шлюзы по умолчанию 10.10.10.1 и 10.10.118.1 (без них не работает маршрутизация в 10.10.0.0/16)
Хоть винда и ругнулась при добавлении второго шлюза - все нормально заработало.
Пинговать можно как по первому айпишнику, так и по второму.

На сервере получилась следующая таблица маршрутизации:
6474b6435985f948636589.png

Проблема в том, что я не понимаю почему оно вообще работает. Как сервер работает с маршрутизацией в данном случае, и каким образом выбирается нужный интерфейс для отправки?

Мои рассуждения следующие:
1. Допустим пользователь с ip адресом 10.10.14.112 пингует сервер по 10.10.10.26.
2. Пакет приходит на сервер
3. Серверу необходимо ответить на 10.10.14.112. Он лезет в свою таблицу маршрутизации и видит, что для ответа необходимо отправлять пакет на шлюз 10.10.118.1 (так как у него ниже метрика) с интерфейса 10.10.118.2. Однако, каким-то "волшебным" способом, сервер выбирает правильный маршрут (нужный интерфейс 10.10.10.26) и нормально отвечает.
Получается, что винда каким-то образом запоминает интерфейс на который пришел пакет и уже потом руководствуясь таблицей маршрутизации пытается отвечать?

По моей логике пинг должен быть возможен только по ip 10.10.118.2.
  • Вопрос задан
  • 1172 просмотра
Решения вопроса 1
ValdikSS
@ValdikSS
Я слабо разбираюсь в Windows, поэтому не считайте моё мнение экспертным, могу быть не прав.

Если не ошибаюсь, при входящих TCP-соединениях Windows автоматически сохраняет IP-адрес назначения, на который это соединение пришло, во внутренних структурах сокета, поэтому в рамках одного TCP-соединения пакеты будут уходить с одного IP-адреса (они автоматически bind'ятся на этот source ip address).

Далее маршрутизация: в Windows, начиная с Vista, используется strong host model (см. RFC1122), которая предписывает отправлять пакеты с того сетевого интерфейса, IP-адрес которого указан в структурах сокета.
Старая статья на technet имеет следующую приписку:

If the program specifies a source IP address, that IP address is used as the source IP address for connections sourced from that socket and the adapter associated with that source IP is used as the source interface. The route table is searched but only for routes that can be reached from that source interface.

И далее описываются похожие принципы, связанные с RFC3484.

«Автоматически» всё работает только для протоколов с концепцией соединения, т.е. с TCP. Для UDP, если программа не написана с учётом поддержки multihoming, пакеты могут уходить согласно метрике, т.е. с неправильного адреса (не с того, на какой пришел входящий пакет), и ничего не заработает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
mikes
@mikes
Ответ на ваш вопрос - source routing
Сервер отвечает с того интерфейса на который пришел первый пакет.

а вот если вы будете кого нить пинговать к примеру, то все (окромя 10.10.118.0/24) будет уходить через 10.10.118.1 поскольку он является шлюзом по умолчанию.
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Default Gateway нужен в случае, когда устройство хочет, но не знает куда/кому нужно передать пакет, что бы он дошёл до пункта назначения. Тобишь когда устройство идёт в глобальный огромный Интернет.

У вас же сеть - локальная, и она прописана в routing tables. Default Gateway не используется, потому что сеть - локальная, а устройство отвечает на коннекты к нему.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега Сетевое администрирование
//COPY01 EXEC PGM=IEBGENER
Никак :)

Двух default gateway просто не бывает :) Может быть policy pouting, может быть source routing - но это все явные предписания маршрутизации в том или ином случае. Default gateway один и нужен он для случая "пришла какая-то хрень, куда девать не знаю"
Ответ написан
Комментировать
@fbi_suck
Эникей
Точно не знаю, но предположу что в начале он смотрит маршрут с самой узкой маской для нужной сети, потом из оставшихся выберет наименьшую метрику интерфейса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы