Load balancing چند اینترنت در میکروتیک با PCC
Load balancing میکروتیک با PCC؛ تقسیم ترافیک بین چند اینترنت در RouterOS 7، جدولهای مسیریابی جدا، mangle، تقسیم نامساوی، مسیر پشتیبان و خاموش کردن fasttrack.
در این صفحه
PCC (Per Connection Classifier) ارتباطهای جدید را بر اساس یک hash بین اینترنتها تقسیم میکند و هر ارتباط تا آخر از همان اینترنتی عبور میکند که شروع شده. نتیجه این است که مجموع پهنای باند دو اینترنت استفاده میشود، بدون این که یک ارتباط وسط کار IP عوض کند. این راهنما دو اینترنت با IP ثابت را فرض میکند؛ تفاوت اینترنت PPPoE و DHCP در انتها آمده است.
| اینترنت ۱ | اینترنت ۲ | |
|---|---|---|
| پورت | ether1 |
ether2 |
| gateway | 203.0.113.1 |
198.51.100.1 |
شبکهی داخلی در فهرست اینترفیس LAN قرار دارد (روش ساخت در کانفیگ اولیهی روتر میکروتیک).
مرحلهی ۱: جدولهای مسیریابی
در RouterOS 7 هر مسیر علامت دار به یک جدول مسیریابی جدا نیاز دارد:
/routing table
add name=to-isp1 fib
add name=to-isp2 fibمرحلهی ۲: علامت گذاری ارتباطها
/ip firewall mangle
add chain=prerouting in-interface=ether1 connection-mark=no-mark action=mark-connection new-connection-mark=isp1-conn passthrough=yes comment="inbound via ISP1"
add chain=prerouting in-interface=ether2 connection-mark=no-mark action=mark-connection new-connection-mark=isp2-conn passthrough=yes comment="inbound via ISP2"
add chain=prerouting in-interface-list=LAN dst-address-type=!local connection-mark=no-mark per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=isp1-conn passthrough=yes comment="PCC 1/2"
add chain=prerouting in-interface-list=LAN dst-address-type=!local connection-mark=no-mark per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=isp2-conn passthrough=yes comment="PCC 2/2"
add chain=prerouting in-interface-list=LAN connection-mark=isp1-conn action=mark-routing new-routing-mark=to-isp1 passthrough=no
add chain=prerouting in-interface-list=LAN connection-mark=isp2-conn action=mark-routing new-routing-mark=to-isp2 passthrough=no
add chain=output connection-mark=isp1-conn action=mark-routing new-routing-mark=to-isp1 passthrough=no
add chain=output connection-mark=isp2-conn action=mark-routing new-routing-mark=to-isp2 passthrough=noمنطق قانونها:
- دو قانون اول: ارتباطی که از بیرون از اینترنت ۱ وارد شده (مثلاً port forwarding یا Winbox از راه دور)، جوابش هم باید از اینترنت ۱ برود. بدون این قانونها، جواب ممکن است از اینترنت دیگر برگردد و ارتباط برقرار نشود.
- قانونهای PCC:
both-addresses:2/0یعنی hash آدرس مبدأ و مقصد را بر ۲ تقسیم کن؛ باقی ماندهی ۰ به اینترنت ۱ و باقی ماندهی ۱ به اینترنت ۲.dst-address-type=!localترافیکی را که مقصدش خود روتر است (مثل DNS روتر) از این تقسیم خارج میکند. - قانونهای mark-routing: هر ارتباط علامت دار را به جدول مسیریابی خودش میفرستند؛ هم برای ترافیک کاربران (
prerouting) و هم برای ترافیک خود روتر (output).
توضیح جدول mangle و connection tracking را در فایروال میکروتیک: filter، NAT و mangle ببینید.
مرحلهی ۳: مسیرها
هر جدول یک مسیر اصلی و یک مسیر پشتیبان از اینترنت دیگر دارد تا با قطع یک اینترنت، ارتباطهای جدید از اینترنت سالم عبور کنند:
/ip route
add dst-address=0.0.0.0/0 gateway=203.0.113.1 routing-table=to-isp1 check-gateway=ping distance=1
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-table=to-isp1 check-gateway=ping distance=2
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-table=to-isp2 check-gateway=ping distance=1
add dst-address=0.0.0.0/0 gateway=203.0.113.1 routing-table=to-isp2 check-gateway=ping distance=2
add dst-address=0.0.0.0/0 gateway=203.0.113.1 check-gateway=ping distance=1 comment="main table"
add dst-address=0.0.0.0/0 gateway=198.51.100.1 check-gateway=ping distance=2 comment="main table backup"check-gateway=ping هر ۱۰ ثانیه gateway را ping میکند و اگر جواب ندهد، مسیر را غیرفعال میکند. توجه کنید این فقط سالم بودن gateway را میسنجد، نه دسترسی واقعی به اینترنت؛ اگر مشکل پشت gateway (در شبکهی سرویس دهنده) باشد، تشخیص داده نمیشود. برای تشخیص دقیقتر باید به جای gateway یک آدرس بیرونی را با recursive routing بسنجید؛ روش کامل در Failover دو اینترنت در میکروتیک آمده است.
مرحلهی ۴: NAT
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade
add chain=srcnat out-interface=ether2 action=masqueradeمرحلهی ۵: fasttrack
/ip firewall filter disable [find action=fasttrack-connection]تقسیم نامساوی
اگر اینترنت ۱ دو برابر اینترنت ۲ پهنای باند دارد، ارتباطها را به سه بخش تقسیم کنید و دو بخش را به اینترنت ۱ بدهید:
| قانون | مقدار PCC | اینترنت |
|---|---|---|
| ۱ | both-addresses:3/0 |
۱ |
| ۲ | both-addresses:3/1 |
۱ |
| ۳ | both-addresses:3/2 |
۲ |
کدام classifier؟
| مقدار | رفتار | مناسب برای |
|---|---|---|
both-addresses |
یک کاربر با یک سایت همیشه از یک اینترنت | بیشتر شبکهها؛ سایتهای بانکی و سامانههایی که نشست را به IP وابسته میکنند |
both-addresses-and-ports |
هر ارتباط جدا تقسیم میشود | توزیع یکنواختتر، با احتمال خطا در سایتهای حساس به IP |
src-address |
هر کاربر همیشه از یک اینترنت | سادهترین رفتار قابل پیش بینی |
اینترنت PPPoE یا DHCP
- PPPoE: به جای IP، نام اینترفیس را به عنوان gateway بدهید؛ مثلاً
gateway=pppoe-out1. قانونهای mangle و NAT را هم باpppoe-out1بنویسید، نهether1. - DHCP: gateway ممکن است عوض شود. در
/ip dhcp-clientگزینهیadd-default-route=noرا بگذارید و با اسکریپت dhcp-client مسیرهای جدولها را هنگام تغییر gateway به روز کنید.
بررسی
/ip firewall connection print where connection-mark=isp1-conn
/ip firewall connection print where connection-mark=isp2-conn
/interface monitor-traffic ether1,ether2دو خروجی اول نشان میدهند ارتباطها تقریباً مساوی بین دو اینترنت تقسیم شدهاند؛ خروجی سوم ترافیک زندهی هر پورت را.
مشکلات رایج
- همهی ترافیک از اینترنت ۱ میرود: fasttrack هنوز روشن است، یا قانونهای PCC به خاطر شرط
in-interface-list=LANاجرا نمیشوند (اینترفیس داخلی در فهرست LAN نیست). - بعضی سایتها مدام از حساب کاربری خارج میشوند: از
both-addresses-and-portsبهboth-addressesبرگردید. - port forwarding فقط روی یکی از اینترنتها کار میکند: دو قانون اول mangle (علامت گذاری ارتباطهای ورودی) را جا انداختهاید.
مسیر کامل راهنماهای میکروتیک در راهنمای جامع میکروتیک آمده است.
منابع
- MikroTik Documentation — Mangle help.mikrotik.com
- MikroTik Documentation — Policy Routing help.mikrotik.com