معرفی دقیق و کامل ویژگی Fast Path در میکروتیک

Fast Path در میکروتیک

Fast Path در میکروتیک یک مسیر پردازش سریع برای پکت‌هاست. بدون Fast Path و در حالت Normal Path پکت‌ها باید از کل مراحل Packet Flow مانند connection tracking، NAT، mangle، firewall، queue و … عبور کنند.

اما با فعال بودن قابلیت Fast Path در میکروتیک پکت‌ها میان‌بُر می‌زنند و مستقیماً در مسیر کوتاه‌تری پردازش می‌شوند که نتیجه آن مصرف CPU کمتر، throughput بالاتر و latency کمتر است.

اما استفاده از آن باعث می‌شود که بسیاری از قابلیت‌های کنترلی (NAT، Mangle، Queue، Firewall stateful) روی آن‌ پکتها اعمال نشود.

موارد استفاده از Fast Path در میکروتیک

قابلیت Fast Path در میکروتیک را میتوان در قسمتهای مختلفی استفاده کرد در زیر مواردی که امکان استفاده از این ویژگی وجود دارد را آورده ایم

در تانلها و وی پی ان هایی مثل GRE، IPIP یا L2TP میتوان از این قابلیت استفاده کرد. وقتی این قابلیت روی این اینترفیس ها فعال می‌شود، در صورت فراهم بودن شرایط، ترافیک تونل وارد Fast Path می‌شود. این باعث می‌شود ترافیک داخل تونل با سرعت بسیار بیشتری عبور کند.

در حالت عادی پکت‌ها همه‌ی جدول‌های موجود در Packet flow را طی می‌کنند اما با فعال سازی این قابلیت پکت‌ها مستقیماً از Input/Output به Forwarding می‌پرند.

علاوه بر تونل‌ها و وی پی ان های Tunnel Interfaces: IPIP، GRE، EoIP، L2TP، PPPoE، در بخش‌ها دیگری هم می‌توان از Fast Path استفاده کرد که در زیر آمده است.

Bridge در تنظیمات Bridge گزینه‌ی Allow Fast Path وجود دارد

IPsec Policy در حالت Tunnel Mode گزینه‌ی Allow Fast Path وجود دارد

Wireless Interfaces

VLAN Interfaces

Fast Path در میکروتیک

شرایط و محدودیت‌های اعمال Fast Path در میکروتیک

اعمال شدن Fast Path همیشه به شرایطی وابسته است که یکی از آنها Connection Tracking است. اگر conntracking فعال باشد، همه‌ی پکت‌ها ابتدا stateful می‌شوند که در نتیجه آن قابلیت Fast Path غیرفعال خواهد شد. برای رفع این مشکل باید یا conntrack را خاموش کنید یا با یک rule در chain raw آن را برای ترافیک خاص bypass کنید:

/ip firewall raw add action=notrack chain=prerouting dst-address=

یکی دیگر از مواردی که جلوی اعمال شدن Fast Path در میکروتیک را میگیرد NAT است. ترافیکی که NAT می‌شود (خصوصاً Masquerade) نمی‌تواند Fast Path داشته باشد.

مورد دیگر mangle است هرگونه mangle وابسته به conntrack (mark-connection یا mark-packet) باعث غیرفعال شدن Fast Path می‌شود.

در Queue ها هم Simple Queue معمولاً Fast Path را قطع می‌کند. برخی از Queue Tree ها ممکن است همچنان با Fast Path کار کنند.

همین طور برخی پروتکل‌ها ذاتاً Fast Path ندارند (مثل OpenVPN و SSTP). اما GRE، IPIP، L2TP و PPPoE از Fast Path پشتیبانی می‌کنند.

انواع روش‌های تعامل Connection Tracking و Fast Path در میکروتیک

حالت اول حالتی است که در آن Conntrack فعال (پیش‌فرض) است در این حالت همه‌ی پکت‌ها وارد conntrack می‌شوند. حتی اگر روی تونل Allow Fast Path را فعال کنید، بی‌اثر است.

حالت دوم حالتی است که در آن Conntrack خاموش است در این حالت تمام پکت‌ها می‌توانند Fast Path شوند. اما NAT، firewall stateful و queueهای conntrack-based از کار می‌افتند.

حالت سوم که کاربردی ترین حالت است حالتی است که در آن Conntrack فعال باشد و یک رول برای Bypass با اکشن notrack برای ترافیکی که میخوایم Fast Path شوند نوشته شود.

این بهترین حالت عملی است که هم conntrack روشن بماند برای بقیه ترافیک و هم ترافیک تونل را از conntrack خارج کنید (chain raw, action=notrack).

در این حالت Allow Fast Path روی تونل واقعاً فعال می‌شود.

بنابراین به صورت خلاصه میتوان گفت که فعال کردن Allow Fast Path روی تونل وقتی conntrack روشن است، بی‌اثر است.

اگر conntrack را کاملا خاموش کنید، Fast Path فعال می‌شود اما NAT و Firewall stateful از کار می‌افتد.

Connection Tracking در میکروتیک

بهترین روش استفاده از notrack در chain raw فقط برای ترافیک تونل است. برای این کار میتوانید از روش زیر استفاده کنید.

رول notrack برای تونل (Prerouting) برای ترافیک ورودی به روتر که می‌خواهیم از conntrack خارج کنیم.

/ip firewall raw add chain=prerouting src-address=192.168.100.2 dst-address=192.168.100.1 action=notrack comment=”Bypass conntrack for GRE Tunnel inbound”

رول notrack برای تونل (Output) برای ترافیک خروجی از روتر که Fast Path بخواهد فعال شود.

/ip firewall raw add chain=output src-address=192.168.100.1 dst-address=192.168.100.2 action=notrack comment=”Bypass conntrack for GRE Tunnel outbound”

با این رولها فقط پکت‌هایی که مطابق رول هستند notrack می‌شوند و بقیه پکت‌ها مسیر عادی conntrack را طی می‌کنند. در این حالت مسیر پکتها به صورت زیر خواهد بود:

Inbound Packet → raw prerouting notrack → routing decision → output notrack → Fast Path forwarding → خروجی Interface

در اینجا در نظر داشته باشید که src/dst address فقط برای تونل‌ها تنظیم شود تا بقیه ترافیک NAT، firewall یا queue کار خودش را انجام دهد.

بعد از این کار، روی Interface تونل Allow Fast Path را فعال کنید.

می‌توانید با دستور زیر بررسی کنید که پکت‌ها هنوز وارد conntrack نمی‌شوند:

/ip firewall connection print where src-address=192.168.100.2

در واقع بعد از وارد کردن این دستور نباید برای IP‌های مربوط به تانلها هیچ entry مشاهده شود.

به این ترتیب هم عملکرد NAT و فایروال روی ترافیک‌های دیگر حفظ می‌شود و هم تونل‌ها می‌توانند از Fast Path در میکروتیک استفاده کرده و از throughput بالاتر بهره‌مند شوند.