2010-11-03 3 views
4

Я написал инструмент, работающий в системе (Win7) с двумя сетевыми интерфейсами, каждый из которых связан с другой подсетью, каждый со своим собственным шлюзом, который затем связан с двумя отдельные удаленные сети (после каждого шлюза есть исходящие брандмауэры). Я инициирую исходящие TCP-соединения через оба сетевых адаптера, используя Socket.Bind (до выполнения Connect) на каждый IP-адрес соответствующего сетевого адаптера. Первый сетевой адаптер работает нормально, но для второго сетевого адаптера я получаю SocketException: «Операция сокета была предпринята для недоступной сети».Розетка Socket.Bind и IP с несколькими локальными сетевыми интерфейсами

Мое первоначальное понимание заключалось в том, что, поскольку сокеты привязаны к конкретной конечной точке конкретного сетевого адаптера, которая имеет свой шлюз, соединение должно быть направлено на этот шлюз и поэтому должно работать. Однако кажется, что исходный IP-адрес игнорируется, и маршрутизация работает в соответствии с локальной таблицей маршрутизации (т. Е. Второй запрос подключения NIC переходит к первому, по умолчанию, к сети и отклоняется, поскольку имеет неправильную подсеть).

Настройка локальных таблиц маршрутизации помогает, но это заставляет меня задуматься обо всех рассуждениях о способности сокета связываться с определенным локальным IP-адресом.

Выполнение некоторого дополнительного чтения, я узнал, что, действительно, есть такая вещь, как «IP-маршрутизация источника», но по умолчанию она отключена в Windows (через параметр реестра DisableIPSourceRouting) из-за соображений безопасности, как описано, например. здесь:

Вопросы:

  1. Если мое первоначальное понимание было правильно (т.е. Socket.Bind должно быть достаточно) - почему он не работает без изменения таблицы маршрутизации?
  2. Если я понял, что НЕ был прав (т. Е. Socket.Bind проигнорирован и используется маршрутизация) - в чем смысл Socket.Bind? Зачем вообще это делать?
  3. Кроме того, я хотел бы лучше понять, каков фактический риск включения IP-маршрутизации источника (желательно с примером возможного использования)?
  4. Будем очень благодарны за любые идеи по решению требования без ручной настройки локальной таблицы маршрутизации.

Большое спасибо.

ответ

4

ОК, после некоторого чтения, вот несколько разъяснений высокого уровня о том, что происходит. Мне все еще нужно проверить приведенные ниже выводы в моей системе. По-видимому, локальная привязка обычно игнорируется при выборе сетевого интерфейса. Вместо этого для этого используется таблица маршрутизации. Однако в Сильная модель хоста (по умолчанию для Vista и новее, не существует в XP), источник IP : используется как «ограничение» в поиске таблицы маршрутизации.

Смежные вопросы