Socket.Bind и IP-маршрутизация от источника, с несколькими локальными сетевыми интерфейсами - PullRequest
4 голосов
/ 03 ноября 2010

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

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

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

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

Вопросы:

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

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

1 Ответ

5 голосов
/ 07 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...