لود بالانس میکروتیک با روش PCC اتصالهای کاربران را بین دو خط اینترنت پخش میکند: هر اتصال جدید در mangle یک Connection Mark میگیرد، این علامت به یک Routing Table مخصوص همان خط تبدیل میشود و NAT روی هر دو WAN انجام میشود. PCC سرعت دو خط را برای یک دانلود تکاتصالی جمع نمیکند؛ ظرفیت کل برای همه کاربران بیشتر میشود و با Failover، اگر یکی از خطوط قطع شود، ترافیک روی خط سالم میرود.
مثالها بر اساس نمونه رسمی MikroTik برای RouterOS 7 نوشته شدهاند که Routing Table را با /routing table تعریف میکند؛ در RouterOS 6 نحو این بخش متفاوت است. اگر مفاهیمی مثل مسیر پیشفرض و Distance برایتان تازه است، توضیح آنها در روتینگ در سیسکو برای میکروتیک هم صدق میکند. این راهنما بخشی از مجموعه خدمات شبکه و زیرساخت است.
کدام روش ترکیب دو خط اینترنت را انتخاب کنیم؟
| روش | رفتار | مناسب برای |
|---|---|---|
| Failover با Distance | همه ترافیک از خط اصلی میرود و خط دوم فقط هنگام قطعی استفاده میشود | وقتی خط دوم کند یا حجمی است |
| Policy Routing بر اساس شبکه مبدأ | مثلاً VLAN مدیریت از خط ۱ و VLAN مهمان از خط ۲ | وقتی تقسیم ثابت و قابل پیشبینی میخواهید |
| ECMP | چند Gateway در یک مسیر پیشفرض و پخش خودکار | خطوط همسرعت و نیاز به تنظیم کم |
| PCC | پخش اتصالها بر اساس Hash آدرس و پورت با کنترل نسبت هر خط | دفتری با کاربران زیاد و دو خط اینترنت با آدرس و Gateway جدا |
PCC از فیلدهای هدر IP با الگوریتم Hash یک عدد میسازد، آن را بر مخرج (Denominator) تقسیم میکند و باقیمانده را با Remainder قاعده مقایسه میکند. همه بستههای یک اتصال همیشه از یک خط میروند، پس سایتی که شما را با IP میشناسد در میانه یک اتصال IP شما را عوضشده نمیبیند.
پیشنیازها و سناریو
- خط اول روی ether_ISP1 با آدرس 10.10.4.100/24 و Gateway 10.10.4.1
- خط دوم روی ether_ISP2 با آدرس 10.10.5.100/24 و Gateway 10.10.5.1
- شبکه داخلی روی ether_LAN با آدرس 192.168.100.1/24
اگر هر دو مودم ADSL یا VDSL در حالت Router هستند، شبکه LAN آنها نباید یکسان باشد. بسیاری از مودمها بهصورت پیشفرض آدرس 192.168.1.1 دارند؛ آدرس یکی را پیش از اتصال به میکروتیک تغییر دهید. نام اینترفیسها را هم برای خوانایی عوض کنید، مثلاً /interface set ether1 name=ether_ISP1.
پیش از شروع از تنظیمات فعلی بکاپ بگیرید و اگر از راه دور کار میکنید، Safe Mode را با Ctrl+X در ترمینال یا دکمه Safe Mode در Winbox فعال کنید تا اگر ارتباط قطع شد، تغییرات برگردند.
لود بالانس میکروتیک با PCC: مرحلهبهمرحله
۱. آدرسها و Routing Tableها
/ip address
add address=10.10.4.100/24 interface=ether_ISP1 network=10.10.4.0
add address=10.10.5.100/24 interface=ether_ISP2 network=10.10.5.0
add address=192.168.100.1/24 interface=ether_LAN network=192.168.100.0
/routing table
add disabled=no fib name=ISP1_table
add disabled=no fib name=ISP2_tableگزینه fib باعث میشود جدول در مسیریابی واقعی بستهها استفاده شود. بدون آن، mark-routing به این جدولها عمل نمیکند.
۲. قواعد mangle
/ip firewall mangle
add action=accept chain=prerouting dst-address=10.10.4.0/24 in-interface=ether_LAN
add action=accept chain=prerouting dst-address=10.10.5.0/24 in-interface=ether_LAN
add action=mark-connection chain=input connection-state=new in-interface=ether_ISP1 new-connection-mark=ISP1
add action=mark-connection chain=input connection-state=new in-interface=ether_ISP2 new-connection-mark=ISP2
add action=mark-connection chain=output connection-mark=no-mark connection-state=new new-connection-mark=ISP1 per-connection-classifier=both-addresses:2/0
add action=mark-connection chain=output connection-mark=no-mark connection-state=new new-connection-mark=ISP2 per-connection-classifier=both-addresses:2/1
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new dst-address-type=!local in-interface=ether_LAN new-connection-mark=ISP1 per-connection-classifier=both-addresses:2/0
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new dst-address-type=!local in-interface=ether_LAN new-connection-mark=ISP2 per-connection-classifier=both-addresses:2/1
add action=mark-routing chain=output connection-mark=ISP1 new-routing-mark=ISP1_table
add action=mark-routing chain=prerouting connection-mark=ISP1 in-interface=ether_LAN new-routing-mark=ISP1_table
add action=mark-routing chain=output connection-mark=ISP2 new-routing-mark=ISP2_table
add action=mark-routing chain=prerouting connection-mark=ISP2 in-interface=ether_LAN new-routing-mark=ISP2_tableترتیب قواعد مهم است و هر گروه کار مشخصی دارد:
- دو قاعده accept اول ترافیک کاربران به شبکه مودمها را از PCC خارج میکنند. اگر شبکه داخلی دیگری مثل VLAN دوم یا تونل Site-to-Site به شعبه دارید، برای آن هم قاعده accept مشابه بگذارید؛ در غیر این صورت ترافیک داخلی علامت میگیرد و به سمت اینترنت فرستاده میشود.
- قواعد chain=input اتصالهایی را که از بیرون به خود روتر میرسند با خط ورودی علامت میزنند تا پاسخ از همان خط برگردد.
- قواعد prerouting با شرط
dst-address-type=!localفقط ترافیک کاربران به مقصدهای بیرون از روتر را بین دو خط تقسیم میکنند. - قواعد mark-routing علامت اتصال را به جدول مسیریابی همان خط تبدیل میکنند.
۳. مسیرها و NAT
/ip route
add check-gateway=ping dst-address=0.0.0.0/0 gateway=10.10.4.1 routing-table=ISP1_table
add check-gateway=ping dst-address=0.0.0.0/0 gateway=10.10.5.1 routing-table=ISP2_table
add distance=1 dst-address=0.0.0.0/0 gateway=10.10.4.1
add distance=2 dst-address=0.0.0.0/0 gateway=10.10.5.1
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether_ISP1
add action=masquerade chain=srcnat out-interface=ether_ISP2دو مسیر اول مسیر پیشفرض هر جدولاند. دو مسیر آخر در جدول main قرار دارند و ترافیکی را که علامت نگرفته (از جمله ترافیک خود روتر در بعضی حالتها) با اولویت خط اول و پشتیبان خط دوم میفرستند.
انتخاب نوع Classifier
| Classifier | رفتار | نتیجه عملی |
|---|---|---|
| src-address | همه ترافیک یک کاربر همیشه از یک خط | پایدارترین حالت برای سایتهای حساس به IP؛ پخش بار بر اساس تعداد کاربران |
| both-addresses | ترافیک هر کاربر با هر سرور همیشه از یک خط | تعادل خوب بین پایداری نشست و پخش بار؛ نمونه رسمی MikroTik |
| both-ports | ترکیب دو پورت معمولاً تصادفی است | پخش بیشتر، ولی یک کاربر ممکن است با دو IP به یک سایت برسد |
| both-addresses-and-ports | بیشترین متغیر و تصادفیترین پخش | یکنواختترین پخش بار روی کاغذ، اما بیشترین احتمال خروج از حساب در سایتهای بانکی و پنلها |
دو خط با سرعت متفاوت
PCC تعداد اتصالها را تقسیم میکند، نه حجم ترافیک را. اگر خط اول تقریباً دو برابر خط دوم ظرفیت دارد، مخرج را 3 بگذارید و دو باقیمانده را به خط اول بدهید. سه قاعده prerouting زیر جایگزین دو قاعده prerouting قبلی میشوند و قواعد output را هم به همین شکل تغییر دهید:
/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new dst-address-type=!local in-interface=ether_LAN new-connection-mark=ISP1 per-connection-classifier=both-addresses:3/0
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new dst-address-type=!local in-interface=ether_LAN new-connection-mark=ISP1 per-connection-classifier=both-addresses:3/1
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new dst-address-type=!local in-interface=ether_LAN new-connection-mark=ISP2 per-connection-classifier=both-addresses:3/2Failover در میکروتیک: فقط به پینگ مودم اکتفا نکنید
گزینه check-gateway=ping هر چند ثانیه Gateway را پینگ میکند. اشکال این روش در این است که Gateway معمولاً مودم داخل دفتر است و وقتی اینترنت ارائهدهنده قطع شده، مودم هنوز به پینگ جواب میدهد. برای تشخیص قطعی واقعی، از مسیریابی بازگشتی (Recursive) استفاده کنید: یک آدرس عمومی مشخص را فقط از طریق هر خط در دسترس قرار دهید و آن آدرس را Gateway مسیر پیشفرض کنید. این همان روشی است که مستندات Failover میکروتیک پیشنهاد میکند:
# Remove the two plain default routes of the main table first, then:
/ip route
add dst-address=208.67.222.222/32 gateway=10.10.4.1 scope=10
add dst-address=208.67.220.220/32 gateway=10.10.5.1 scope=10
add dst-address=0.0.0.0/0 gateway=208.67.222.222 target-scope=11 check-gateway=ping distance=1
add dst-address=0.0.0.0/0 gateway=208.67.220.220 target-scope=11 check-gateway=ping distance=2برای اینکه جدولهای PCC هم هنگام قطعی خط به خط دیگر بروند، در هر جدول همان مسیر بازگشتی را بسازید و یک مسیر پشتیبان با Distance بالاتر اضافه کنید. مسیر میزبان را داخل خود جدول هم تعریف کنید تا Gateway بازگشتی در همان جدول قابل حل باشد:
# Replace the simple default routes of ISP1_table and ISP2_table with:
/ip route
add dst-address=208.67.222.222/32 gateway=10.10.4.1 scope=10 routing-table=ISP1_table
add dst-address=0.0.0.0/0 gateway=208.67.222.222 target-scope=11 check-gateway=ping distance=1 routing-table=ISP1_table
add dst-address=0.0.0.0/0 gateway=10.10.5.1 distance=2 routing-table=ISP1_table
add dst-address=208.67.220.220/32 gateway=10.10.5.1 scope=10 routing-table=ISP2_table
add dst-address=0.0.0.0/0 gateway=208.67.220.220 target-scope=11 check-gateway=ping distance=1 routing-table=ISP2_table
add dst-address=0.0.0.0/0 gateway=10.10.4.1 distance=2 routing-table=ISP2_tableدو نکته را در نظر بگیرید. اول، ترافیک کاربران به همان دو آدرس پایش همیشه از خط مشخصشده میرود، پس آدرسی انتخاب کنید که کاربران به آن وابسته نیستند. دوم، اتکا به یک میزبان خودش نقطه خرابی است؛ مستندات میکروتیک برای پایداری بیشتر استفاده از میزبان دوم برای هر خط را پیشنهاد میکند. اگر اتصال یکی از خطوط PPPoE است، به جای آدرس Gateway نام اینترفیس مثل pppoe-out1 را در مسیر میزبان بگذارید. برای خطی که با DHCP آدرس میگیرد، در DHCP Client گزینه add-default-route را خاموش کنید تا مسیر خودکار با مسیرهای شما تداخل نکند.
تست و بررسی لود بالانس
/ip firewall mangle print stats
/ip firewall connection print count-only where connection-mark=ISP1
/ip firewall connection print count-only where connection-mark=ISP2
/ip route print where routing-table=ISP1_table
/tool torch interface=ether_ISP2در خروجی print stats شمارنده بستههای هر قاعده باید افزایش پیدا کند؛ قاعدهای که صفر میماند یا شرطش اشتباه است یا قاعدهای بالاتر ترافیک را زودتر گرفته. تعداد اتصالهای علامتخورده با ISP1 و ISP2 باید تقریباً به نسبتی باشد که تعیین کردهاید. برای تست Failover، کابل WAN پشت مودم اول را جدا کنید (نه کابل بین مودم و میکروتیک) تا قطعی واقعی اینترنت شبیهسازی شود و ببینید مسیر بازگشتی در /ip route print غیرفعال میشود.
مشکلات رایج بعد از راهاندازی PCC
خروج از حساب در سایتهای بانکی و پنلها
سایتهایی که نشست را به IP کاربر گره میزنند، اگر دو اتصال یک کاربر از دو خط برسد، او را خارج میکنند. Classifier را به both-addresses یا src-address تغییر دهید. برای چند مقصد مشخص هم میتوانید پیش از قواعد PCC یک قاعده mark-connection با dst-address-list بگذارید که آن مقصدها را همیشه به یک خط بفرستد.
Port Forward فقط از یک خط کار میکند
قواعد chain=input فقط اتصالهایی را که به خود روتر میرسند علامت میزنند. برای سروری در شبکه داخلی که از هر دو خط Port Forward شده، اتصال ورودی را در prerouting با in-interface همان WAN علامت بزنید (مثلاً chain=prerouting connection-mark=no-mark in-interface=ether_ISP2 new-connection-mark=ISP2) تا قواعد mark-routing پاسخ سرور را از همان خط برگردانند.
قواعد mangle شمارنده دارند ولی همه ترافیک از یک خط میرود
در پیکربندی پیشفرض بسیاری از روترهای میکروتیک، یک قاعده FastTrack در chain=forward فایروال وجود دارد. بستههایی که FastTrack میشوند از بیشتر پردازشهای فایروال از جمله mangle عبور نمیکنند و ممکن است Routing Mark نگیرند. هنگام تست این قاعده را غیرفعال کنید و اگر به آن نیاز دارید، پس از تست دوباره رفتار را بررسی کنید. FastTrack با صفهای مدیریت ترافیک هم تداخل دارد که در مدیریت پهنای باند شبکه به آن پرداختهایم.
تونل به شعبه قطع و وصل میشود
اگر تونل Site-to-Site روی آدرس یکی از خطوط تعریف شده، ترافیک آن تونل نباید بین دو خط پخش شود. شبکه شعبه را در قواعد accept ابتدای mangle قرار دهید و مسیر رسیدن به آدرس عمومی شعبه را به خط مشخصی ببندید. طراحی اتصال شعب را در VPN سازمانی بین شعب ببینید.
سوالات متداول
با لود بالانس، سرعت دو اینترنت جمع میشود؟
برای یک اتصال خیر. دانلود یک فایل با یک اتصال فقط از یک خط میرود. وقتی کاربران زیادی همزمان کار میکنند، اتصالهایشان بین دو خط پخش میشود و ظرفیت کل شبکه بیشتر میشود.
PCC با خط PPPoE هم کار میکند؟
بله. در قواعد mangle و NAT به جای اینترفیس فیزیکی، اینترفیس PPPoE مثل pppoe-out1 را بگذارید و در مسیرها Gateway را نام همان اینترفیس تعیین کنید. در PPPoE Client هم گزینه add-default-route را خاموش کنید یا Distance آن را بالاتر از مسیرهای خودتان بگذارید.
اگر فقط Failover بخواهم، به PCC نیاز دارم؟
خیر. بخش مسیرهای بازگشتی جدول main به همراه NAT روی هر دو WAN کافی است. همه ترافیک از خط اصلی میرود و فقط در قطعی آن به خط دوم منتقل میشود.
بعد از جابهجایی خط، اتصالهای باز چه میشوند؟
اتصالهایی که با IP خط قطعشده NAT شدهاند ادامه پیدا نمیکنند و برنامه باید دوباره وصل شود. تماسهای صوتی، دانلودها و نشستهای Remote Desktop معمولاً یک بار قطع میشوند.





