Я написал инструмент, работающий в системе (Win7) с двумя сетевыми интерфейсами, каждый из которых связан с другой подсетью, каждый со своим собственным шлюзом, который затем связан с двумя отдельные удаленные сети (после каждого шлюза есть исходящие брандмауэры). Я инициирую исходящие TCP-соединения через оба сетевых адаптера, используя Socket.Bind
(до выполнения Connect
) на каждый IP-адрес соответствующего сетевого адаптера. Первый сетевой адаптер работает нормально, но для второго сетевого адаптера я получаю SocketException
: «Операция сокета была предпринята для недоступной сети».Розетка Socket.Bind и IP с несколькими локальными сетевыми интерфейсами
Мое первоначальное понимание заключалось в том, что, поскольку сокеты привязаны к конкретной конечной точке конкретного сетевого адаптера, которая имеет свой шлюз, соединение должно быть направлено на этот шлюз и поэтому должно работать. Однако кажется, что исходный IP-адрес игнорируется, и маршрутизация работает в соответствии с локальной таблицей маршрутизации (т. Е. Второй запрос подключения NIC переходит к первому, по умолчанию, к сети и отклоняется, поскольку имеет неправильную подсеть).
Настройка локальных таблиц маршрутизации помогает, но это заставляет меня задуматься обо всех рассуждениях о способности сокета связываться с определенным локальным IP-адресом.
Выполнение некоторого дополнительного чтения, я узнал, что, действительно, есть такая вещь, как «IP-маршрутизация источника», но по умолчанию она отключена в Windows (через параметр реестра DisableIPSourceRouting
) из-за соображений безопасности, как описано, например. здесь:
- http://msdn.microsoft.com/en-us/library/ff648853.aspx
- http://www.bloggersbase.com/disableipsourcerouting/
Вопросы:
- Если мое первоначальное понимание было правильно (т.е.
Socket.Bind
должно быть достаточно) - почему он не работает без изменения таблицы маршрутизации? - Если я понял, что НЕ был прав (т. Е.
Socket.Bind
проигнорирован и используется маршрутизация) - в чем смысл Socket.Bind? Зачем вообще это делать? - Кроме того, я хотел бы лучше понять, каков фактический риск включения IP-маршрутизации источника (желательно с примером возможного использования)?
- Будем очень благодарны за любые идеи по решению требования без ручной настройки локальной таблицы маршрутизации.
Большое спасибо.