Как System.Net.Mail.SMTPClient выполняет локальную привязку IP
У нас есть веб-приложение ASP.NET с балансировкой нагрузки (NLB), которое отправляет электронную почту.
Серверы имеют двойное размещение с внешней и внутренней (за брандмауэром) IP-адресацией. Почтовый сервер находится за брандмауэром.
Мы обнаружили проблему, когда класс SMTPClient выдает исключение, сообщающее, что он не может подключиться к SMTP-серверу.
Сетевые парни говорят нам, что они видят попытки подключиться к SMTP-серверу с внешнего IP-адреса (который блокирует межсетевой экран)
Исходя из моих (предположительно неоднозначных) знаний о приложениях с поддержкой сети, я подумал, что локальная привязка IP будет определяться на основе пункта назначения, т.е. если в таблицах маршрутизации указано, что IP-адрес может быть доступен через конкретную сетевую карту, а не IP-адрес исходящего запроса генерируется из. Я ошибся?
глядя на SmtpClient.ServicePoint Я начинаю думать, что мы можем быть и что мы можем (должны) принудительно установить явную привязку к определенному IP?
в частности, я смотрел на
Свойство ServicePoint.BindIPEndPointDelegate с этой страницы ...
Примечания. Некоторые методы балансировки нагрузки требуют, чтобы клиент использовал определенный локальный IP-адрес и номер порта, а не IPAddress.Any (или IPAddress.IPv6Any для Интернет-протокола версии 6) и временный порт. Ваш BindIPEndPointDelegate может удовлетворить это требование.
мне просто кажется немного странным, что мне нужно это делать, но, возможно, это обычное явление в такой среде?