آموزش کامل لود بالانسینگ در میکروتیک

 

برای شناخت بهتر روش های لودبالانسینگ در میکروتیک نظرتون را به جدول زیر جلب می کنم.

میکروتیک برای لود بالانسینگ، روش های مختلف برای سلوشن های مختلف ارائه کرده، که در ادامه به آنها اشاره خواهم کرد.

 

 

Method Per-connection Per-packet
Firewall marking Yes Yes
ECMP Yes No
PCC Yes No
Nth Yes Yes
Bonding No Yes
OSPF Yes No
BGP Yes No

 

Failover

Firewall marking

 

Failover

این مثال نحوه استفاده از چندین gateway را با در اختیار گرفتن یک gateway در هنگام fails برای اولین بار توضیح می دهد.

با افزودن gateway ها شروع می شود.

مقدار فاصله بزرگتر را برای ثانویه و check-gateway را برای اولی تنظیم کنید:

/ip route add gateway=192.168.1.1 check-gateway=ping
/ip route add gateway=192.168.2.1 distance=2

همین، دیگر قدمی نیست!

اولین gateway با کمتر شدن فاصله شروع می شود (پیش فرض 1).

gateway چک مطمئن می شود که بالا است.

هنگامی که پینگ از کار بیفتد، gateway اول را غیرفعال می کند و دومی فعال وکنترل می شود.

وقتی اولین gateway بالا آمد، به عملکرد خود باز می گردد.

 

  • Per-Traffic load Balancing

مدیریت پهنای باند یک بخش ضروری برای تمامی شبکه های اینترنتی اعم از خانگی و یا اداری می باشد.

انواع مختلفی از ابزار مدیریتی برای این کار وجود دارد.

از جمله QOS ، محدودیت در سرعت و محدودیت دیتا و…

من شخصا به یک اینترنت وایرلس دسترسی دارم و هیچ راه دیگری برای اتصال به اینترنت (اینترنت کابلی پر سرعت و یا فیبر) ندارم.

و فقط به یک Backbone  دسترسی دارم و نمیتوانم پهنای باند مورد نیاز خودم را فقط از یک کانکشن، تامین کنم.

از این محدودیت می توان به اهمیت لود بالانسیگ برای چندین backbone پی برد.

در گذشته من از ECMP استفاده می کردم، که تقریبا از روشهای دیگر بهتر بود ولی با این حال در قسمت دانلود فایل های بزرک از سایت هایی که دارای HTTPS بودند به مشکل بر می خوردم.

بعد از آن روش های مختلفی برای انجام این کار را بررسی کردم و در نهایت به روشی برای کم کردن هرچه بیشتر مشکلات بلقوه در این راه، رسیدم  (Per-Traffic load Balancing)

که در ادامه نحوه پیاده سازی آنرا برای شما شرح خواهم داد.

Functions of RouterOS used

Firewall mangle rules

Firewall address-lists

Routing

قدم اول آموزش Per-Traffic load Balancing

:

قبل از اینکه به این مرحله وارد شوید باید بدانید که چه چیزی می خواهید و چگونه میخواهید ترافیک خود را تقسیم کنید.

و چه ترافیکی میتواند خراب شود و کدام ترافیک نمی تواند !!

HTTP traffic (port 80)

SSL traffic (port 443)

POP3 traffic (port 110)

SMTP traffic (port 25)

P2P traffic (various port)

Unknown traffic (various port)

 

بعد از آماده سازی لیستی از ترافیکی که می خواهید بشکنید و اینکه آن ترافیک در چه پورتی از روتر شما اعمال می شود،

باید لیست آماده شده را بررسی کنید و ببینید که ترافیک انتخاب شده قابلیت این را دارد که  به سمت خروجی اینترنت هدایت شود یا خیر.

 

نتیجه ای که از لیست بالا به عنوان نمونه به دست آوردم به صورت زیر است:

اینترنت سیم کارت با IP استاتیک

HTTP traffic : تا الان بدون مشکل

SSL traffic : به مقدار کمی مشکل دارد. برای سایتهایی با SSL  نرمال و 90% نرم افزار ها مشکلی پیش نمی آید. مشکلات ایجاد شده را در مقاله ای دیگر توضیح خواهیم داد.

POP3 traffic : تا الان بدون مشکل

SMTP traffic: تا الان بدون مشکل

P2P traffic: باید از مسیر اینترنت خروجی به صورت ترافیک ناشناس خارج گردد که توضیح خواهیم داد.

Unknown traffic: باید از همان مسیر اینترنت به صورت ترافیک ناشناس خارج گردد مانند P2P  ترافیک که آن را هم توضیح خواهیم داد.

 به صورت خلاصه اگر بخواهم مشلات ایجاد شده را توضیح بدهم،

بعضی از برنامه ها و سایت ها به در خواستهایی که یک نفر از چند IP  مختلف می فرستند، پاسخ نمی دهند به همین دلیل است که ECMP  مشکلات فراوانی دارد.

برای این مشکلات نادری که در لود بالانسینگ ایجاد می شود راه حلهایی ارائه خواهیم داد.

 مشکل به وجود آمده در ترافیک SSL  به این صورت است که درخواستهایی که از آدرس های مختلف برای دریافت دیتا به سایت می رسند.

در سرورهای سایت به صورت، از پیش تعیین شده توضیع میگردند در نتیجه اگر وبسایتی داشته باشیم که از هر دو ترافیک HTTP  و SSL  استفاده کند در بیشتر مواقع سایت بدون بررسی IP  درخواست کننده به آن پاسخ می دهد.

ولی اگر وبسایت پیش از پاسخگویی IP  درخواست کننده را بررسی کند و اختلافی در آن ببیند معمولا در پاسخ به مشکل برخورد میکنیم.

در اجرای پروژه 2 بار به این مشکل برخورد کردم که هر دوبار مربوط بود به سایت های پزشکی و درمانی که با این روش از اطلاعات خود نگهداری میکردند.

در مورد ترافیک P2P ترافیک ناشناخته:

من این دو ترافیک را باهم آدرس دهی کردم زیرا مشکل در هر دوی آنها به یک شکل بود.

سیستم عامل میکروتیک RouterOS  ترافیک P2P  را تشخیص نمی دهد.

اما هر packet  را می تواند بررسی کند بدین معنی که سیستم عامل میکروتیک برای تشخیص اینکه این دیتا از نوع P2P  است به زمان بیشتری احتیاج دارد.

به طور خلاصه : سیستم عامل میکروتیک بعد از زمانی که یک کانکشن از نوع P2P  ایجاد شد می تواند ماهیت P2P  راتشخیص دهد.

این مسئله مهمی است زیرا برای ارسال دیتا در مسیر مشخص اینترنت شما باید ماهیت آن را قبل از ایجاد اتصال بدانید.

بنابراین ترافیک P2P  و ترافیک ناشناخته برای ما در گروه ترافیک ناشناخته قرار میگیرند.

با نشان دار کردن ترافیک ناشناخته شما می توانید تصمیم بگیرید کدام اینترنت برای هدایت P2P و بقیه ترافیک ناشناخته مناسب هستند، که به شکل خوبی هم در روتر کار میکند!

قدم دوم آموزش Per-Traffic load Balancing :

  تنظیمات شبکه

 

قبل از دستیابی به این امکان نیاز داریم یک شبکه خیالی را به عنوان مثال استفاده کنیم.

client computers (172.18.1.0/24)

Internet Gateways (10.0.1.1/24, 10.0.2.1/24)

RouterOS IPs (10.0.1.2/24, 10.0.2.2/24

آموزش کامل لود بالانسینگ در میکروتیک

با فرض اینکه با تنظیمات کامل IP ها و DNS و default routes کاربر به اینترنت دست رسی دارد

لیستی برای دسترسی به اینترنت می سازیم

/ ip firewall address-list

add list=”Allowed-Internet” address=172.18.1.0/24 comment=”” disabled=no

لیستی برای مسیر های لود بالانسینگ می سازیم

/ ip firewall address-list
add list="WAN-01" address=172.18.1.24/32 comment="" disabled=no
add list="WAN-02" address=172.18.1.76/32 comment="" disabled=no

 اعمال Masquerading برای خروج ترافیک از WAN

/ ip firewall nat
add chain=srcnat action=masquerade out-interface="WAN - 01" src-address-list="Allowed-Internet" comment="Gateway 10.0.1.1/24" disabled=no
add chain=srcnat action=masquerade out-interface="WAN - 02" src-address-list="Allowed-Internet" comment="Gateway 10.0.2.1/24" disabled=no

 در اینجا تمام کلاینت ها باید به اینترنت  دسترسی داشته باشند، منتها با یک اینترنت و آن هم مسیر پیش فرضی که در defualt Routes روتر موجود است.

قدم سوم آموزش Per-Traffic load Balancing :

استفاده از ابزار منگل سیستم عامل میکروتیک برای نشان دار کردن انواع ترافیک

 

در ادامه دستوراتی که برای نشان دار کردن ترافیک لازم است رو میبینید.

بعد از نشان دار کردن ترافیک از آن برای نوع خاصی از Route  استفاده می کنیم.

در جدول زیر از همان ترافیک به عنوان مثال استفاده کردیم.

HTTP-SSL-POP3-SMTP-P2P-Unknown

/ ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark="WAN-01" src-address-list="WAN-01" passthrough=no comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="WAN-02" src-address-list="WAN-02" passthrough=no comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="HTTP traffic" passthrough=no dst-port=80 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="SSL traffic" passthrough=no dst-port=443 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="POP3 traffic" passthrough=no dst-port=110 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="SMTP traffic" passthrough=no dst-port=25 protocol=tcp comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="P2P traffic" passthrough=no p2p=all-p2p comment="" disabled=no
add chain=prerouting action=mark-routing new-routing-mark="Unknown traffic" passthrough=no comment="" disabled=no 

دو خط اول از دستورات برای کاربران خاصی هست که روشی رو انجام می دهد که تمام ترافیک آنها به صورت میان بر از لود بالانسینگ عبور کند و به یک اینترنت کانکشن از پیش تعیین شده برسد.

خط بعدی ترافیک رو بر اساس dst-port  (پورت خروجی) علامت دار می کند.

توجه کنید  فقط داریم ترافیک رو علامت گذاری می کنیم حتی اگر ترافیک ناشناخته باشه .

قبلا هم گفته شد که همیشه یک اینترنت کانکشن مخصوص برای ترافیک ناشناخته و P2P  تعیین شده تا از defaut route  روتر استفاده نشه.

من حتی ترافیک P2P  رو هم به صورت جداگانه علامت گذاری می کنم اگرچه ترافیک مربوط به اون هم باید از همان اینترنت کانکشنی خارج بشه که ترافیک ناشناخته قراره خارج بشه.

 

این کار را به دلایل زیادی انجام میدهم یکی به این خاطر که هر وقت خواستم عبور تمام ترافیک رو با غیر فعال کردن یک Route  غیر فعال کنم.

دلیل دیگر به این خاطر است که من در روتر مقدار زیادی تنظیمات QoS  دارم و ممکن است تنظیمات QoS  تاثیراتی در لود بالانسیگ داشته باشند.

خوب در این مرحله ترافیک رو علامت دار کردیم و در مرحله بعد باید برای آن Route  نوشته شود.

 

قدم چهارم آموزش Per-Traffic load Balancing :

استفاده از قابلیت Route  سیستم عامل میکروتیک برای هدایت ترافیک علامت دار شده به اینترنت کانکشن دلخواه.

 

در جدول زیر دستورات لازم برای ایجاد Route  در جهت هدایت ترافیک علامت گذاری شده قرار داده شده است.

ترافیک شامل HTTP-SSL-POP3_SMTP-P2P و ترافیک ناشناخته

/ ip route
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="WAN - 01" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="WAN - 02" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="HTTP traffic" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="SSL traffic" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.2.1 scope=255 target-scope=10 routing-mark="POP3 traffic" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="SMTP traffic" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="P2P traffic" comment="" disabled=no
add dst-address=0.0.0.0/0 gateway=10.0.1.1 scope=255 target-scope=10 routing-mark="Unknown traffic" comment="" disabled=no

 

دو خط اول برای کاربرانی است که قرار نیست ترافیک آنها از لود بالانسیتگ عبور کند.

و مابقی خطوط Route  های الزامی هستند که برای هدایت انواع ترافیک در نظر گرفته شده است.

 

قدم پنجم آموزش Per-Traffic load Balancing :

مروری بر اقدامات انجام شده

 

در قسمت های قبل ترافیک اینترنت را به قسمت های مختلف تقسیم کردیم.

(شکستیم) و ترافیک تقسیم شده را با استفاده از تکنولوژی mangle  سیستم عامل میکروتیک نشان دار کردیم.

یک لیست میان بر ایجاد کردیم که اجازه عبور آی پی های اصلی در لود بالانسینگ را می دهد.

فرمان route  های مخصوصی بر اساس ترافیکی که mnagle  کرده ایم نیز ایجاد کردیم.

نتیجه گیری: 

کانفیگی که انجام داده ایم بسیار قدرتمند است.

انواع ترافیکی که در این آموزش لیست شد تنها بخش کوچکی از ترافیک اینترنت هستند که شما می توانستید لیست کنید.

(DNS-Terminal service-ICMPو غیره)

.

.

  • Load Balancing over multiple Gateways  (PCC)

معرفی :

 

PCCبه شما این امکان را می دهد که ترافیک را به جریان های مساوی با قابلیت نگهداری بسته ها با مجموعه ای از گزینه های خاص در یک جریان خاص تقسیم کنید.

(می توانید این مجموعه از گزینه ها را از آدرس src، src-port، dst-address، dst-port مشخص کنید).

 

تئوری :

PCC فیلدهای انتخاب شده را از هدر IP می گیرد و با کمک یک الگوریتم هش، فیلدهای انتخاب شده را به مقدار 32 بیتی تبدیل می کند.

سپس این مقدار توسط یک مخرج مشخص تقسیم می شود و باقیمانده با یک Remainder مشخص مقایسه می شود، اگر برابر باشد، بسته ثبت می شود.

برای استفاده در این عملیات می توانید از هدر از میان src-address، dst-address، src-port، dst-port انتخاب کنید.

 

per-connection-classifier=
PerConnectionClassifier ::= [!]ValuesToHash:Denominator/Remainder
  Remainder ::= 0..4294967295    (integer number)
  Denominator ::= 1..4294967295    (integer number)
  ValuesToHash ::= both-addresses|both-ports|dst-address-and-port|
  src-address|src-port|both-addresses-and-ports|dst-address|dst-port|src-address-and-port

مثال :

این پیکربندی همه اتصالات را بر اساس آدرس منبع و پورت به 3 گروه تقسیم می کند.

 

/ip firewall mangle add chain=prerouting action=mark-connection \
 new-connection-mark=1st_conn per-connection-classifier=src-address-and-port:3/0
/ip firewall mangle add chain=prerouting action=mark-connection \
  new-connection-mark=2nd_conn per-connection-classifier=src-address-and-port:3/1
/ip firewall mangle add chain=prerouting action=mark-connection \
  new-connection-mark=3rd_conn per-connection-classifier=src-address-and-port:3/2

 

یادداشت :

PCC از نسخه 3.24 در RouterOS در دسترس است.

این گزینه برای رفع مشکلات پیکربندی با تعادل بار در چندین دروازه با masquerade معرفی شد.

تنظیمات قبلی:

توجه: اگر فیلتر RP فعال باشد، تنظیمات PCC طوری طراحی نشده اند که کار کنند.

 

مثال کاربردی – Load Balancing

طرح شبکه زیر را در نظر بگیرید:

Load Balancing over multiple Gateways  (PCC)

 

export پیکربندی از روتر گیت وی :

 

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=LAN
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=ISP1
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=ISP2

/ ip firewall mangle
add chain=prerouting dst-address=10.111.0.0/24  action=accept in-interface=LAN
add chain=prerouting dst-address=10.112.0.0/24  action=accept in-interface=LAN
add chain=prerouting in-interface=ISP1 connection-mark=no-mark action=mark-connection \
    new-connection-mark=ISP1_conn
add chain=prerouting in-interface=ISP2 connection-mark=no-mark action=mark-connection \ 
    new-connection-mark=ISP2_conn
add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \
    per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn 
add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \ 
    per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn
add chain=prerouting connection-mark=ISP1_conn in-interface=LAN action=mark-routing \ 
    new-routing-mark=to_ISP1
add chain=prerouting connection-mark=ISP2_conn in-interface=LAN action=mark-routing \
    new-routing-mark=to_ISP2
add chain=output connection-mark=ISP1_conn action=mark-routing new-routing-mark=to_ISP1     
add chain=output connection-mark=ISP2_conn action=mark-routing new-routing-mark=to_ISP2

/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping

/ ip firewall nat 
add chain=srcnat out-interface=ISP1 action=masquerade
add chain=srcnat out-interface=ISP2 action=masquerade

توضیحات :
بیایید این پیکربندی را فرض کنیم:

/ ip address 
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=LAN
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=ISP1
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=ISP2

 

روتر دارای دو رابط بالادستی (ISP) با آدرس های 10.111.0.2/24 و 10.112.0.2/24 است.

رابط LAN دارای آدرس IP 192.168.0.1/24 است.


پالیسی مسیریابی :

/ ip firewall mangle
add chain=prerouting dst-address=10.111.0.0/24  action=accept in-interface=LAN
add chain=prerouting dst-address=10.112.0.0/24  action=accept in-interface=LAN

 

 

با پالیسی مسیریابی، می توان تمام ترافیک را به یک دروازه خاص وادار کرد،

حتی اگر ترافیک از شبکه های متصل به میزبان (دیگر آن دروازه) باشد.

به این ترتیب حلقه مسیریابی ایجاد می شود و ارتباط با آن میزبان ها غیرممکن خواهد بود.

برای جلوگیری از این وضعیت باید اجازه استفاده از جدول مسیریابی پیش فرض را برای ترافیک به شبکه های متصل بدهیم.

add chain=prerouting in-interface=ISP1 connection-mark=no-mark action=mark-connection \
    new-connection-mark=ISP1_conn
add chain=prerouting in-interface=ISP2 connection-mark=no-mark action=mark-connection \ 
    new-connection-mark=ISP2_conn

 

ابتدا لازم است اتصال آغاز شده از خارج را مدیریت کنید – پاسخ ها باید از طریق همان رابط (از همان IP عمومی) ارسال شوند.

ما تمام اتصالات ورودی جدید را علامت گذاری می کنیم تا به خاطر بیاوریم که رابط چه چیزی بود

 

add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \
    per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn 
add chain=prerouting  in-interface=LAN connection-mark=no-mark dst-address-type=!local \ 
    per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn

 

Action mark-routing را می‌توان فقط در خروجی زنجیره‌ای و پیش‌روتینگ استفاده کرد،

اما پیش‌روت‌سازی زنجیره‌ای مانگل، تمام ترافیکی را که به سمت خود روتر می‌رود، ضبط می‌کند.

برای جلوگیری از این امر از dst-address-type=!local استفاده می کنیم.

و با کمک PCC جدید، ترافیک را بر اساس مخاطبین مبدا و مقصد به دو گروه تقسیم می کنیم.

 

add chain=prerouting connection-mark=ISP1_conn in-interface=LAN action=mark-routing \ 
    new-routing-mark=to_ISP1
add chain=prerouting connection-mark=ISP2_conn in-interface=LAN action=mark-routing \
    new-routing-mark=to_ISP2
add chain=output connection-mark=ISP1_conn action=mark-routing new-routing-mark=to_ISP1     
add chain=output connection-mark=ISP2_conn action=mark-routing new-routing-mark=to_ISP2

سپس باید تمام بسته‌های مربوط به آن اتصالات را با علامت مناسب علامت‌گذاری کنیم.

از آنجایی که مسیریابی خط مشی فقط برای ترافیک ورودی به اینترنت مورد نیاز است، فراموش نکنید که گزینه in-interface را مشخص کنید.

/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_ISP1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_ISP2 check-gateway=ping

 

برای هر علامت مسیریابی یک مسیر ایجاد کنید.

 

add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping

 

برای فعال کردن Failover، لازم است مسیرهایی داشته باشید که به محض اینکه دیگران در هنگام خرابی دروازه غیرفعال شوند، به داخل پرش می کنند.

(و این فقط در صورتی اتفاق می افتد که گزینه check-gateway فعال باشد)

 

NAT

 

/ ip firewall nat 
add chain=srcnat out-interface=ISP1 action=masquerade
add chain=srcnat out-interface=ISP2 action=masquerade

 

از آنجایی که تصمیم مسیریابی قبلاً گرفته شده است، ما فقط به قوانینی نیاز داریم که آدرس‌های src را برای همه بسته‌های خروجی ثابت کنند.

اگر این بسته از طریق wlan1 خارج شود، NATed به 10.112.0.2 خواهد شد، اگر از طریق wlan2 باشد، NATed به 10.111.0.2 خواهد بود.

 

 

5/5 - (2 امتیاز)

2 دیدگاه در “آموزش کامل لود بالانسینگ در میکروتیک

  1. بهزاد می گوید :

    دو مورد رو میخام بدونم ؛
    اول اینکه اومدی دوتا آدرس لیست ساختی برای wan.خوب یه لیست میساختی با دو آیپی wan که اینجوری بابت table ساخته شده مموری و پراسس اضافه نگیره.
    دوم اینکه شما mark connection نساخته نزده چجوری براش mark routing نوشتی؟؟؟ الان آون رولها رو چه حسابی دارن mark routing میشن؟؟

دیدگاهتان را بنویسید