آموزش کامل لود بالانسینگ در میکروتیک
برای شناخت بهتر روش های لودبالانسینگ در میکروتیک نظرتون را به جدول زیر جلب می کنم.
میکروتیک برای لود بالانسینگ، روش های مختلف برای سلوشن های مختلف ارائه کرده، که در ادامه به آنها اشاره خواهم کرد.
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 |
Firewall marking
- Per-Traffic load Balancing
- Load Balancing over multiple Gateways
- Manual:Load balancing multiple same subnet links
- Manual:Failover with 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)
بعد از آماده سازی لیستی از ترافیکی که می خواهید بشکنید و اینکه آن ترافیک در چه پورتی از روتر شما اعمال می شود،
باید لیست آماده شده را بررسی کنید و ببینید که ترافیک انتخاب شده قابلیت این را دارد که به سمت خروجی اینترنت هدایت شود یا خیر.
نتیجه ای که از لیست بالا به عنوان نمونه به دست آوردم به صورت زیر است:
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 معرفی شد.
تنظیمات قبلی:
- ECMP load balancing with masquerade
- NTH load balancing with masquerade
- NTH load balancing with masquerade (another approach)
توجه: اگر فیلتر RP فعال باشد، تنظیمات PCC طوری طراحی نشده اند که کار کنند.
مثال کاربردی – Load Balancing
طرح شبکه زیر را در نظر بگیرید:
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 خواهد بود.
دو مورد رو میخام بدونم ؛
اول اینکه اومدی دوتا آدرس لیست ساختی برای wan.خوب یه لیست میساختی با دو آیپی wan که اینجوری بابت table ساخته شده مموری و پراسس اضافه نگیره.
دوم اینکه شما mark connection نساخته نزده چجوری براش mark routing نوشتی؟؟؟ الان آون رولها رو چه حسابی دارن mark routing میشن؟؟
سلام دوست من !
این ترجمه از سایت خود میکروتیک هستش