نحوه LoadBalance کردن IP ها برای ایمیل‌های ارسالی توسط Exchange

در این آموزش به شما نحوه Load Balance کردن آدرس IP های خروجی (IP ارسال ایمیل) در Microsoft Exchange را آموزش خواهیم داد.

تصور کنید شما یک یا دو سرور Edge برای ارسال ایمیل دارید و در مدت زمان کوتاهی مشتریان شما تعداد زیادی ایمیل را ارسال می‌کنند. پس از مدتی سرویس‌دهنده‌های بزرگ مثل Hotmail، Yahoo یا Gmail آدرس IP های شما را مسدود خواهند نمود.

عموما دلیل این مسدودی ارسال تعداد زیادی ایمیل از یک آدرس IP است. حال تصور کنید هر دو آدرس Public سرورهای Edge شما مسدود شود. در این صورت هیچگونه ایمیلی از سمت شما به این سرویس‌دهنده‌ها ارسال نخواهد شد و تماما در صف انتظار قرار خواهند گرفت.

مشکل در اینجا این است که در سرورهای Edge شما تنها یک آدرس IP برای ایمیل‌های خروجی تعریف شده است.

نرم‌افزارهای ارسال ایمیل همچون Ironpot و برخی از نرم‌افزارهای ضداسپم لینوکس این امکان را به شما می‌دهند که چندین آدرس IP را برای ایمیل‌های ارسالی در نظر بگیرید تا با این مشکل مواجه نشوید، اما آیا Exchange نیز همچنین امکانی دارد؟

البته به این شکل خیر، اما روشی برای تنظیم Custom Transport Agent در Exchange وجود دارد.

Load Balance کردن Transport Agent

مقدار Send Connector در این سیستم دارای خصوصیتی تحت عنوان “SourceIPAddress” است. این آدرس IP یکی از آدرسهایی خواهد بود که Exchange برای ارسال ایمیل از آن استفاده خواهد نمود.
پس در اولین مرحله تعدادی آدرس IP اضافه خواهیم نمود.

192.168.1.240 EDGE Server IP
192.168.1.241 Outbound SMTP IP Address 1
192.168.1.242 Outbound SMTP IP Address 2
192.168.1.243 Outbound SMTP IP Address 3

در تنظیمات ما، سرور Edge در محیط DMZ  است و یک ارتباط NAT یک به یک در شبکه ما فی‌مابین آدرس‌های داخلی و خارجی وجود دارد.

ممکن است تصور کنید با اضافه کردن چندین آدرس IP مشکل حل خواهد شد اما اشتباه کرده‌اید!

Microsoft Exchange در بین چندین Send Connector که یک Cost برای آنها تعریف شده است امکان Load Balance ندارد.
این نرم‌افزار با شرایط زیر نسبت به انتخاب Send Connector اقدام می‌کند:

۱- اگر در تنظیمات گیرنده Send Connector مقدار مشخصی مانند contoso.com تعریف شده باشد نسبت به “*” دارای اولویت است.
۲- ردیفی را انتخاب خواهد کرد که دارای کمترین Cost است.
۳- اگر چندین ردیف با Cost یکسان وجود داشته باشد بر مبنای نام آنها به ترتیب حروف الفبا انتخاب خواهد کرد.

ممکن است شما بخواهید با استفاده از یک اسکریپت نام Send Connector را هر دقیقه یک‌بار تغییر دهید که پیشنهاد نمی‌شود! بهتر است از روش هوشمندانه زیر استفاده کنید:

مرحله بعدی تنظیم Send Connector ها است:

New-SendConnector Connector1 -AddressSpaces "connector1.local" -SourceIPAddress 192.168.1.241
New-SendConnector Connector2 -AddressSpaces "connector2.local" -SourceIPAddress 192.168.1.242
New-SendConnector Connector3 -AddressSpaces "connector3.local" -SourceIPAddress 192.168.1.243
در SDK Exchange 2010 به بالا روشی برای ارسال ایمیل‌ها به ازای هر گیرنده وجود دارد و صرفا شما کافی‌ست به ازای هر گیرنده آن‌ها را به Connector مربوطه متصل نمائید.
با استفاده از تابع RoutingOverride ما تمامی ایمیل‌های در صف انتظار را می‌توانیم به سمت Connector مورد نظر خود هدایت کنیم. اطلاعات تکمیلی در خصوص تابع RoutingOverride در لینک زیر موجود است:
http://msdn.microsoft.com/en-us/library/microsoft.exchange.data.transport.routingoverride(EXCHG.140).aspx

نحوه نصب routeBalancer

برای نصب این Agent باید اسکریپت installRouteBalancer.ps1 را اجرا کنید و سپس مراحل زیر را انجام دهید.

۱- سرویس MSExchangeTransport را غیرفعال کنید.
۲- فولدر “C:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\agents\routeBalancer” را ایجاد کنید.
۳- فایل‌های routeBalancer.dll  و RouteBalancerConfig.xml را در پوشه‌ای که ایجاد کرده‌اید کپی کنید.
۴- Agent را نصب و فعال کنید.
۵- سرویس MSExchangeTransport را فعال کنید.

نحوه مدیریت سیستم

این Agent تعداد Send Connector ها را می‌خواند و همچنین آدرس‌های IP را از RouteBalancerConfig.xml نیز می‌خواند. این فایل باید در کنار فایلهای dll دیگر باشد.
در صورتی که تمایل به عدم ارسال از یک آدرس IP دارید، مثلا برای غیرفعال کردن Connector2 باید:

۱- ابتدا مقدار Address Space را درون Send Connector ها از “connector3.local” به “connector2.local” تغییر دهید.
۲- سپس “connector2.local” را به اسمی دیگر مثلا “disabled.local” تغییر نام دهید.
۳- نام Send Connectory را مثلا به “Disabled” تغییر نام دهید. (فقط جهت شفاف‌سازی و اطلاع خودتان، تغییر در نام آن‌ها تاثیری بر Agent ندارد)
۴- مقدار numConnectors در فایل RouteBalancerConfig.xml را از ۳ به ۲ تغییر دهید.
۵- سرویس MSExchangeTransport  را ری‌استارت کنید.

دیدگاه خود را بیان کنید