التوجيه هو عملية العثور على المسار الأمثل لإرسال الحزمة على شبكات TCP / IP. يحتوي أي جهاز متصل بشبكة IPv4 على عملية وجداول توجيه.
هذه المقالة ليست HOWTO ، فهي تصف التوجيه الثابت في RouterOS كمثال ، لقد حذفت عمدا بقية الإعدادات (على سبيل المثال ، srcnat للوصول إلى الإنترنت) ، لذلك فهم هذه المواد يتطلب مستوى معين من المعرفة بالشبكات و RouterOS.
التبديل والتوجيه

التبديل هو عملية تبادل الحزم ضمن قطعة Layer2 واحدة (Ethernet ، ppp ، ...). إذا رأى الجهاز أن مستلم الحزمة موجود على نفس شبكة Ethernet الفرعية كما هو ، فإنه يتعرف على عنوان mac باستخدام بروتوكول arp ويرسل الحزمة مباشرة ، متجاوزًا جهاز التوجيه. يمكن أن يحتوي اتصال ppp (من نقطة إلى نقطة) على مشاركين فقط ويتم إرسال الحزمة دائمًا إلى نفس عنوان 0xff.
التوجيه هو عملية نقل الحزم بين مقاطع Layer2. إذا أراد الجهاز إرسال حزمة ، يكون مستلمها خارج شريحة Ethernet ، فإنه ينظر إلى جدول التوجيه الخاص به ويمرر الحزمة إلى بوابة تعرف مكان إرسال الحزمة بشكل إضافي (أو ربما لا يعرف ، لا يعرف مرسل الحزمة الأصلي بذلك).
أسهل طريقة للنظر في جهاز التوجيه هي كجهاز متصل بشريحتين أو أكثر من Layer2 وقادر على نقل الحزم بينهما ، وتحديد المسار الأمثل من جدول التوجيه.
إذا كان كل شيء واضحًا لك أو كنت تعرفه بالفعل ، فاقرأ. أوصي بشدة أن يقرأ الآخرون مقالة صغيرة ولكنها شاملة للغاية.
التوجيه في RouterOS و PacketFlow
جميع الوظائف المتعلقة بالتوجيه الثابت تقريبًا موجودة في حزمة النظام . تضيف حزمة التوجيه دعمًا لخوارزميات التوجيه الديناميكية (RIP و OSPF و BGP و MME) ومرشحات التوجيه و BFD.
القائمة الرئيسية لتكوين التوجيه: [IP]->[Route]
. قد تتطلب المخططات المعقدة وضع العلامات الأولية للحزم مع ملصق توجيه في: [IP]->[Firewall]->[Mangle]
(سلاسل PREROUTING
و OUTPUT
).
هناك ثلاثة أماكن على PacketFlow حيث يتم اتخاذ القرارات بشأن توجيه حزم IP:

- حزم التوجيه التي تلقاها جهاز التوجيه. في هذه المرحلة ، تقرر أن الحزمة سوف تذهب إلى العملية المحلية أو سيتم إرسالها إلى الشبكة. تلقي حزم العبور واجهة الإخراج
- توجيه الحزم الصادرة المحلية. تلقي الحزم الصادرة واجهة الإخراج
- تتيح لك خطوة توجيه إضافية للحزم الصادرة تغيير قرار التوجيه في
[Output|Mangle]
- يعتمد مسار الحزمة في الكتل 1 ، 2 على القواعد في
[IP]->[Route]
- يعتمد مسار الحزمة في الخطوات 1 و 2 و 3 على القواعد الموجودة في
[IP]->[Route]->[Rules]
- يمكن أن يتأثر مسار الحزمة في الكتل 1 و 3 باستخدام
[IP]->[Firewall]->[Mangle]
RIB ، FIB ، توجيه ذاكرة التخزين المؤقت

قاعدة معلومات التوجيه
الأساس الذي يتم فيه تجميع المسارات من بروتوكولات التوجيه الديناميكية ، والطرق من ppp و dhcp ، والمسارات الثابتة والمتصلة. تحتوي قاعدة البيانات هذه على جميع المسارات باستثناء تلك التي تمت تصفيتها من قبل المسؤول.
وفقًا للاتفاقية ، يمكننا أن نفترض أن [IP]->[Route]
يعرض RIB.
إعادة توجيه قاعدة المعلومات

القاعدة التي تسير فيها أفضل الطرق من RIB. جميع المسارات في FIB نشطة وتستخدم لإعادة توجيه الحزم. إذا أصبح المسار غير نشط (تم تعطيله من قبل المسؤول (النظام) ، أو كانت الواجهة التي يجب إرسال الحزمة غير نشطة) ، فسيتم حذف المسار من FIB.
لاتخاذ قرار حول التوجيه ، يتم استخدام بيانات حزمة IP التالية في جدول FIB:
- عنوان المصدر
- عنوان الوجهة
- واجهة المصدر
- علامة التوجيه
- ToS (DSCP)
يمتد الوصول إلى حزمة FIB عبر المراحل التالية:
- هل تم تصميم الحزمة لعملية التوجيه المحلية؟
- هل تندرج الحزمة تحت نظام PBR أو قواعد المستخدم؟
- إذا كان الأمر كذلك ، يتم إرسال الحزمة إلى جدول التوجيه المحدد.
- يتم إرسال الحزمة إلى الجدول الرئيسي
وفقًا للاتفاقية ، يمكننا افتراض أن [IP]->[Route Active=yes]
يعرض FIB.
مخبأ التوجيه
آلية للتخزين المؤقت الطرق. يتذكر الموجه المكان الذي تم إرسال الحزم إليه ، وإذا كانت هناك حزم مماثلة (يُفترض أنها من نفس الاتصال) ، فإنه يبدأ تشغيلها على نفس المسار ، دون إيداع FIB. يتم مسح ذاكرة التخزين المؤقت للمسار بشكل دوري.
للمسؤولين ، لم يكن لدى RouterOS وسائل عرض وإدارة ذاكرة التخزين المؤقت للتوجيه ، ولكن مع ذلك يمكنك تعطيله في [IP]->[Settings]
.
تمت إزالة هذه الآلية من linux 3.6 kernel ، لكن kernel 3.3.5 لا يزال يستخدم في RouterOS ، وربما يكون التخزين المؤقت للتوجيه أحد الأسباب.
الطريق إضافة الحوار
[IP]->[Route]->[+]

- الشبكة الفرعية التي تريد إنشاء مسار لها (الافتراضي: 0.0.0.0/0)
- عنوان IP أو الواجهة التي سيتم إرسال الحزمة إليها (قد يكون هناك عدة ، راجع ECMP أدناه)
- التحقق من توافر البوابة
- نوع السجل
- المسافة (متري) للطريق
- جدول التوجيه
- IP للحزم الصادرة المحلية من خلال هذا الطريق
- الغرض من النطاق والنطاق المستهدف مكتوب في نهاية المقال.
أعلام الطريق

- X - تم تعطيل المسار من قبل المسؤول (
disabled=yes
) - أ - يتم استخدام الطريق لنقل الحزم.
- D - تم إضافة المسار بشكل حيوي (BGP ، OSPF ، RIP ، MME ، PPP ، DHCP ، متصل)
- ج - الشبكة الفرعية متصلة مباشرة بالموجه
- S - طريق ثابت
- r ، b ، o ، m - تمت إضافة المسار بواسطة أحد بروتوكولات التوجيه الديناميكية
- B ، U ، P - طريق الترشيح (يتجاهل الحزم بدلاً من الإرسال)
ما لتحديد في العبارة: عنوان IP أو واجهة؟
يسمح لك النظام بتحديد كلاهما ، في حين أنه لا يقسم ولا يعطي تلميحات إذا كنت قد ارتكبت خطأ.
عنوان IP
يجب الوصول إلى عنوان البوابة عبر Layer2. بالنسبة إلى Ethernet ، يعني هذا أن جهاز التوجيه يجب أن يكون لديه عنوان IP من نفس الشبكة الفرعية على إحدى الواجهات النشطة ، بالنسبة إلى ppp - أن عنوان البوابة مدرج على إحدى الواجهات النشطة كعنوان الشبكة الفرعية.
إذا لم يتم استيفاء شرط توفر Layer2 ، يعتبر المسار غير نشط ولا يقع في FIB.
واجهة
كل شيء أكثر تعقيدًا وسلوك جهاز التوجيه يعتمد على نوع الواجهة:
- PPP (Async ، PPTP ، L2TP ، SSTP ، PPPoE ، OpenVPN *) يفترض الاتصال أن هناك مشاركين فقط وسيتم إرسال الحزمة دائمًا إلى البوابة لإرسالها ، إذا اكتشفت العبّارة أنها المستلم نفسه ، فسوف تنقل الحزمة إلى عمليتها المحلية.

- تفترض Ethernet أن هناك العديد من المشاركين وسوف ترسل طلبات إلى واجهة ARP بعنوان مستقبل الحزمة ، وهذا هو السلوك المتوقع والطبيعي تمامًا للطرق المتصلة.
ولكن عندما تحاول استخدام الواجهة كطريق لشبكة فرعية بعيدة ، فإنك تحصل على الموقف التالي: المسار نشط ، يمر الأمر ping إلى البوابة ، لكن لا يصل إلى المستلم من الشبكة الفرعية المحددة. إذا نظرت إلى الواجهة من خلال متشمم ، سترى طلبات ARP مع عناوين من شبكة فرعية بعيدة.


حاول تحديد عنوان IP كبوابة كلما كان ذلك ممكنًا. الاستثناءات هي طرق متصلة (تم إنشاؤها تلقائيًا) وواجهة PPP (متزامن ، PPTP ، L2TP ، SSTP ، PPPoE ، OpenVPN *).
لا يحتوي OpenVPN على رأس PPP ، ولكن يمكنك استخدام اسم واجهة OpenVPN لإنشاء المسار.
طريق أكثر تحديدا
القاعدة الأساسية للتوجيه. يحتوي المسار الذي يصف شبكة فرعية أصغر (مع أكبر قناع شبكة فرعية) على أولوية أعلى عند اتخاذ قرار بشأن توجيه الحزمة. لا يرتبط موضع الإدخالات في جدول التوجيه بالتحديد - القاعدة الأساسية هي أكثر تحديدًا.

جميع المسارات من المخطط المحدد نشطة (تقع في FIB) ، لأن أشر إلى شبكات فرعية مختلفة ولا تتعارض مع بعضها البعض.
إذا أصبحت إحدى العبّارات غير متوفرة ، فسيتم اعتبار المسار المرتبط غير نشط (إزالته من FIB) وسيتم البحث عن الحزم من الطرق المتبقية.
في بعض الأحيان ، يُعطى المسار ذو الشبكة الفرعية 0.0.0.0/0 أهمية خاصة ويسمى "المسار الافتراضي" أو "بوابة الملاذ الأخير". في الواقع ، لا يوجد أي شيء سحري فيه ويتضمن ببساطة جميع عناوين IPv4 الممكنة ، ولكن هذه الأسماء تصف الغرض منها جيدًا - فهي تشير إلى بوابة يمكن توجيه الحزم إليها من خلالها ، ولا توجد طرق أخرى أكثر دقة.
الحد الأقصى لقناع الشبكة الفرعية الممكن لـ IPv4 هو / 32 ؛ يشير هذا المسار إلى مضيف محدد ويمكن استخدامه في جدول التوجيه.
فهم الطريق الأكثر تحديداً أمر أساسي لأي جهاز TCP / IP.
المسافة
المسافات (أو المقاييس) ضرورية للتصفية الإدارية للطرق المؤدية إلى شبكة فرعية واحدة يمكن الوصول إليها من خلال عدة بوابات. يعتبر الطريق ذو المقياس الأدنى أولوية وسيكون في FIB. إذا توقف تشغيل مسار به مقياس أقل ، فسيتم استبداله في مسار FIB باستخدام مسار أعلى.

إذا كانت هناك عدة طرق لشبكة فرعية واحدة بنفس المقياس ، فإن جهاز التوجيه سيضيف واحدًا منهم فقط إلى جدول FIB ، مسترشداً بمنطقه الداخلي.
يمكن أن يستغرق المقياس قيمة من 0 إلى 255:

- 0 - متري للطرق المتصلة. لا يمكن للمسافة ضبط المسافة 0
- 1-254 - المقاييس المتاحة للمسؤول عن تحديد المسارات. المقاييس ذات القيمة الأقل لها الأسبقية.
- 255 - متري متاح للمسؤول عن تحديد الطرق. على عكس 1-254 ، يبقى المسار الذي يحتوي على قياس 255 غير نشط دائمًا ولا يقع في FIB
- مقاييس خاصة. تحتوي المسارات المستلمة من بروتوكولات التوجيه الديناميكية على قيم قياس قياسية
تحقق بوابة
تحقق بوابة - تمديد MikroTik RoutesOS للتحقق من توافر بوابة عبر ICMP أو ARP. مرة واحدة كل 10 ثوانٍ (لا يمكن تغييرها) ، يتم إرسال طلب إلى البوابة ، إذا لم تتم الإجابة مرتين ، فسيتم اعتبار المسار غير متاح ويتم إزالته من FIB. إذا كانت بوابة الفحص قد عطلت طريق التحقق ، فستستمر وستصبح الطريق نشطة مرة أخرى بعد إجراء فحص ناجح واحد.

تحقق بوابة تعطيل الإدخال الذي تم تكوينه وجميع الإدخالات الأخرى (في جميع جداول التوجيه ومسارات ecmp) مع العبارة المحددة.
بشكل عام ، تعمل بوابة الفحص بشكل جيد إذا لم تكن هناك مشكلة في فقد الحزمة إلى البوابة. لا تعرف بوابة الفحص ما يحدث مع الاتصال خارج البوابة التي يتم فحصها ، فهناك حاجة إلى أدوات إضافية: البرامج النصية ، التوجيه المتكرر ، بروتوكولات التوجيه الديناميكية.
تحتوي معظم VPNs وبروتوكولات الأنفاق على أدوات مضمّنة لفحص نشاط الاتصال ، وتمكين عبّارات الفحص الخاصة بهم هو حمل إضافي (لكن صغير جدًا) على أداء الشبكة والجهاز.
طرق ECMP
مسار متعدد التكلفة على قدم المساواة - إرسال حزم إلى المستلم باستخدام عدة بوابات في نفس الوقت مع خوارزمية Round Robin.
يتم إنشاء مسار ECMP بواسطة المسؤول عن طريق تحديد بوابات متعددة لشبكة فرعية واحدة (أو تلقائية ، إذا كان هناك طريقان مكافئان لـ OSPF).

يستخدم ECMP لموازنة الحمل بين قناتين ، من الناحية النظرية ، إذا كانت هناك قناتان في مسار ecmp ، فيجب أن تكون القناة الصادرة مختلفة لكل حزمة. لكن آلية ذاكرة التخزين المؤقت للتوجيه ترسل حزمًا من الاتصال على طول المسار الذي ذهبت إليه الحزمة الأولى ، ونتيجة لذلك ، حصلنا على نوع من موازنة التحميل لكل اتصال.
إذا قمت بتعطيل ذاكرة التخزين المؤقت للتوجيه ، فسيتم تقسيم الحزم الموجودة في مسار ECMP بشكل صحيح ، ولكن هناك مشكلة في NAT. تعالج قاعدة NAT الحزمة الأولى من الاتصال فقط (تتم معالجة الباقي تلقائيًا) والموقف هو أن الحزم التي تحمل عنوان مصدر واحد تنتقل من واجهات مختلفة.

لا تعمل بوابة الفحص (علة RouterOS) في طرق ECMP. ولكن يمكنك التغلب على هذا القيد إذا قمت بإنشاء طرق إضافية للتحقق ، مما سيعطل الإدخالات في ECMP.
تصفية التوجيه
يحدد خيار الكتابة ما يجب القيام به مع الحزمة:
- أحادي الإرسال - الإرسال إلى البوابة المحددة (الواجهة)
- بلاكهول - إسقاط الحزمة
- حظر ، لا يمكن الوصول إليه - إسقاط الحزمة وإرسال رسالة icmp إلى المرسل
عادةً ما تستخدم التصفية عندما تحتاج إلى تأمين إرسال الحزم بالطريقة الخاطئة ، بالطبع يمكنك تصفية ذلك من خلال جدار الحماية.
بضعة أمثلة
لإصلاح الأشياء الأساسية حول التوجيه.
راوتر المنزل النموذجي

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1
- طريق ثابت إلى 0.0.0.0/0 (المسار الافتراضي)
- الطريق المتصل على الواجهة مع الموفر
- الطريق المتصل على واجهة الشبكة المحلية
PPPOE نموذجي راوتر الرئيسية

- ثابت الطريق إلى الطريق الافتراضي ، يضاف تلقائيا منذ ذلك الحين يشار إلى ذلك في خصائص الاتصال
- الطريق المتصل للاتصال PPP
- الطريق المتصل على واجهة الشبكة المحلية
جهاز التوجيه المنزلي النموذجي مع اثنين من مقدمي الخدمات والتكرار

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
- طريق ثابت إلى المسار الافتراضي من خلال الموفر الأول مع قياس 1 والتحقق من توافر العبارة
- طريق ثابت إلى المسار الافتراضي من خلال الموفر الثاني مع قياس 2
- طرق متصلة
تمر حركة المرور إلى 0.0.0.0/0 خلال 10.10.10.1 ، في حين أن هذه البوابة متاحة ، وإلا فإنها تنتقل إلى 10.20.20.1
يمكن اعتبار مثل هذا المخطط حجز قناة ، لكنه لا يخلو من العيوب. إذا حدث انقطاع خارج بوابة الموفر (على سبيل المثال ، داخل شبكة الجوال) ، فلن يعرف الموجه الخاص بك وسيستمر في اعتبار أن المسار نشط.
جهاز التوجيه المنزلي النموذجي مع اثنين من مقدمي الخدمات ، التكرار و ECMP

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1
- طرق ثابتة لفحص بوابة chack
- ECMP الطريق
- طرق متصلة
طرق التحقق من اللون الأزرق (لون الطرق غير النشطة) ، لكن هذا لا يتعارض مع تشغيل بوابة الفحص. في الإصدار الحالي (6.44) RoS ، يتم إعطاء الأولوية التلقائية لمسار ECMP ، ولكن من الأفضل إضافة طرق اختبار لجداول التوجيه الأخرى ( routing-mark
الخيار)
لن تكون هناك زيادة في السرعة على Speedtest والمواقع المماثلة الأخرى (ECMP تقسم حركة المرور على الاتصالات بدلاً من الحزم) ، ولكن يجب تحميل تطبيقات p2p بشكل أسرع.
تصفية من خلال التوجيه

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1 add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole
- طريق ثابت إلى الطريق الافتراضي
- طريق ثابت إلى 192.168.200.0/24 عبر نفق ipip
- حظر التوجيه الثابت إلى 192.168.200.0/24 من خلال جهاز التوجيه الخاص بالموفر
خيار تصفية لا تنتقل فيه حركة المرور عبر الأنفاق إلى جهاز التوجيه الخاص بالموفر عند تعطيل واجهة ipip. نادرا ما تكون مثل هذه المخططات مطلوبة ، لأن من الممكن تنفيذ الحجب من خلال جدار الحماية.
حلقة التوجيه
حلقة التوجيه هي موقف يتم فيه تشغيل الحزمة بين أجهزة التوجيه قبل انتهاء صلاحية ttl. عادةً ما يكون نتيجة لخطأ في التكوين ، في الشبكات الكبيرة يتم التعامل معه من خلال تنفيذ بروتوكولات التوجيه الديناميكية ، في الشبكات الصغيرة - عن طريق الرعاية.
يبدو شيء مثل هذا:

مثال (أبسط) كيفية الحصول على نتيجة مماثلة:

مثال حلقة التوجيه ليس له أي فائدة عملية ، لكنه يوضح أن أجهزة التوجيه ليست لديها فكرة عن جدول التوجيه لجيرانها.
توجيه قاعدة السياسات وجداول التوجيه الإضافية
عند اختيار مسار ، يستخدم جهاز التوجيه حقلًا واحدًا فقط من رأس الحزمة (عنوان Dst.) - هذا هو التوجيه الأساسي. يشير التوجيه استنادًا إلى شروط أخرى ، مثل عنوان المصدر ونوع حركة المرور (ToS) ، والتوازن دون ECMP ، إلى سياسة التوجيه الأساسية (PBR) ويستخدم جداول توجيه إضافية.

المزيد من المسارات المحددة هي القاعدة الأساسية لاختيار مسار داخل جدول التوجيه.
بشكل افتراضي ، يتم إضافة جميع قواعد التوجيه إلى الجدول الرئيسي. يمكن للمسؤول إنشاء عدد عشوائي من جداول التوجيه الإضافية وحزم التوجيه إليها. القواعد في جداول مختلفة لا تتعارض مع بعضها البعض. إذا لم تعثر الحزمة على قاعدة مناسبة في الجدول المحدد ، فستنتقل إلى الجدول الرئيسي.
مثال التوزيع من خلال جدار الحماية:

- 192.168.100.10 -> 8.8.8.8
- تستقبل حركة المرور من 192.168.100.10 تسمية via-isp1 في
[Prerouting|Mangle]
- في مرحلة التوجيه ، في جدول via-isp1 ، يتم البحث في مسار يصل إلى 8.8.8.8
- تم العثور على الطريق ، ويتم إرسال حركة المرور إلى البوابة 10.10.10.1
- 192.168.200.20 -> 8.8.8.8
- تستقبل حركة المرور من 192.168.200.20 تسمية via-isp2 في
[Prerouting|Mangle]
- في مرحلة التوجيه ، يبحث الجدول via-isp2 عن طريق يصل إلى 8.8.8.8
- تم العثور على الطريق ، يتم إرسال حركة المرور إلى البوابة 10.20.20.1
- إذا أصبحت إحدى العبّارات (10.10.10.1 أو 10.20.20.1) غير متوفرة ، فستنتقل الحزمة إلى الجدول الرئيسي وستبحث عن مسار مناسب هناك
قضايا المصطلحات
RouterOS لديه بعض القضايا المصطلحات.
عند العمل مع القواعد الموجودة في [IP]->[Routes]
تتم الإشارة إلى جدول التوجيه ، على الرغم من أنه يشير إلى أن التسمية:

في [IP]->[Routes]->[Rule]
كل شيء صحيح ، في تسمية الشرط في إجراء الجدول:

كيفية إرسال حزمة إلى جدول توجيه محدد
يوفر RouterOS عدة أدوات:
- القواعد في
[IP]->[Routes]->[Rules]
- علامات المسار (
action=mark-routing
) في [IP]->[Firewall]->[Mangle]
- VRF
القواعد [IP]->[Route]->[Rules]
تتم معالجة القواعد بالتسلسل ، إذا كانت الحزمة مطابقة لشروط القاعدة ، فإنها لا تذهب إلى أبعد من ذلك.
تسمح لك قواعد التوجيه بتوسيع قدرات التوجيه ، ليس فقط على عنوان المستلم ، ولكن أيضًا على عنوان المصدر والواجهة التي تم استلام الحزمة عليها.

تتكون القواعد من الشروط والإجراءات:
- الشروط يكررون عملياً قائمة العلامات التي يتم من خلالها التحقق من الحزمة في FIB ؛ فقط ToS مفقود.
- الإجراءات
- بحث - إرسال حزمة إلى جدول
- البحث فقط في الجدول - قم بإغلاق الحزمة في الجدول ، إذا لم يتم العثور على المسار ، فلن تذهب الحزمة إلى الجدول الرئيسي
- إسقاط - إسقاط الحزمة
- لا يمكن الوصول إليه - إسقاط حزمة إعلام المرسل
في FIB ، تتم معالجة حركة المرور إلى العمليات المحلية وتجاوز القواعد [IP]->[Route]->[Rules]
:

تعليم [IP]->[Firewall]->[Mangle]
تسمح لك علامات المسار بتعيين بوابة الحزمة باستخدام أي شروط في جدار الحماية تقريبًا:

عمليا ، لأنهم ليسوا جميعا منطقيين ، وقد يعمل بعضهم بشكل غير مستقر.

هناك طريقتان لوضع علامة على الحزمة:
- اضبط علامة التوجيه على الفور
- قم أولاً بتعيين علامة اتصال ، ثم استنادًا إلى علامة توجيه مجموعة علامات الاتصال
في مقال عن جدار الحماية ، كتبت أن الخيار الثاني هو الأفضل بسبب يقلل الحمل على وحدة المعالجة المركزية ، في حالة وضع علامات على الطرق - هذا ليس صحيحًا تمامًا. طرق التمييز هذه ليست معادلة دائمًا وعادة ما تستخدم في حل المشكلات المختلفة.
أمثلة الاستخدام
ننتقل إلى أمثلة لاستخدام سياسة التوجيه التوجيه ، فمن الأسهل بكثير أن نوضح لهم لماذا كل هذا مطلوب.
MultiWAN واستجابة حركة المرور (الإخراج) الصادرة
مشكلة شائعة في تكوين MultiWAN: يمكن الوصول إلى Mikrotik من الإنترنت فقط من خلال الموفر "النشط".

لا يهم جهاز التوجيه عنوان IP الذي جاء إليه الطلب ؛ فعند إنشاء استجابة ، سيبحث عن مسار في جدول التوجيه ، حيث يكون التوجيه عبر isp1 نشطًا. علاوة على ذلك ، من المرجح أن تتم تصفية هذه الحزمة في الطريق إلى المستلم.
نقطة أخرى مثيرة للاهتمام. إذا تم تكوين nat المصدر "البسيط" على الواجهة ether1: /ip fi nat add out-interface=ether1 action=masquerade
الحزمة ستذهب إلى الشبكة مع src. عنوان = 10.10.10.100 ، والتي سوف تزيد من تفاقم الوضع.
هناك عدة طرق لإصلاح المشكلة ، لكن أيًا منها يتطلب جداول توجيه إضافية:

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2 add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2
باستخدام [IP]->[Route]->[Rules]
حدد جدول التوجيه الذي سيتم استخدامه للحزم مع IP المصدر المحدد.

/ip route rule add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1 add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2
يمكنك استخدام action=lookup
، ولكن لحركة المرور الصادرة المحلية ، فإن هذا الخيار يستبعد الاتصالات من الواجهة الخاطئة تمامًا.
- يقوم النظام بإنشاء حزمة استجابة مع Src. العنوان: 10.20.20.200
- في مرحلة قرار التوجيه (2) ، يتم فحص
[IP]->[Routes]->[Rules]
ويتم إرسال الحزمة إلى جدول التوجيه over-isp2 - وفقًا لجدول التوجيه ، يجب إرسال الحزمة إلى البوابة 10.20.20.1 عبر واجهة ether2

لا تتطلب هذه الطريقة "متتبع اتصال" يعمل ، على عكس استخدام جدول Mangle.
باستخدام [IP]->[Firewall]->[Mangle]
يبدأ الاتصال بالحزمة الواردة ، وبالتالي نقوم بوضع علامة عليها ( action=mark-connection
) ، وبالنسبة للحزم الصادرة من الاتصال المحدد ، قمنا بتعيين تسمية المسار ( action=mark-routing
).

/ip firewall mangle # add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1 add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2 # add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no
ip, dst-address
.
- ether2 .
[INPUT|Mangle]
from-isp2 - Src. Address: 10.20.20.200
- Routing Decision(2) 10.20.20.1 ether1.
[OUTPUT|Filter]
[OUTPUT|Mangle]
from-isp2 over-isp2- Routing Adjusment(3)
- 10.20.20.1 ether2

MultiWAN dst-nat
, ( web) .
/ip firewall nat add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100 add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100
, Firewall Mangle, :

/ip firewall mangle add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1 add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2 add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no

NAT, .
MultiWAN
PBR vpn ( SSTP) .

:
/ip route add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3 add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3
:
/ip firewall mangle add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no
NAT, Src. Address:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade add chain=srcnat out-interface=ether3 action=masquerade
:
- SSTP
- Routing Decision (2) , main. Src. Address ether1
[Output|Mangle]
- Routing Adjusment
- Src. Address ether1,
[Nat|Srcnat]
, :

Connection Tracker [Mangle]
[Srcnat]
, , Replay Dst. Address
NAT:

VPN ( ) :

, :
/ip route add dst-address=10.10.10.100 gateway=192.168.100.1 add dst-address=10.10.10.101 gateway=192.168.200.1 add dst-address=10.10.10.102 gateway=192.168.0.1
. , vpn , 6 [IP]->[Routes]
type=blackhole
. — 3 [IP]->[Route]->[Rules]
.
, . :
/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
[IP]->[Route]->[Rules]

/ip route rules add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1 add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2
action=lookup
, main . — .
[IP]->[Firewall]->[Mangle]
ip . . layer7, , , .

/ip firewall mangle add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2
"" [IP]->[Route]->[Rules]
:
/ip route rules add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1 add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2
[IP]->[Firewall]->[Filter]
:
/ip firewall filter add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject
dst-address-type=!local
dst-address-type=!local
(dns, winbox, ssh, ...). , , dst-address-table
.
[IP]->[Route]->[Rules]
, . , FIB [PREROUTING|Mangle]
main, . Routing Rules, User PBR .
[IP]->[Firewall]->[Mangle action=route]
[Prerouting|Mangle]
, :
/ip firewall mangle add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1 add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1
route
( [IP]->[Route]->[Rules]
). , action=route
action=mark-route
, ( passtrough
), .
wiki , .
PPC
Per Connection Classificator — ECMP. ECMP (ECMP , Routing Cache ).
PCC ip , 32- . , . . , .

:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0 192.168.100.12: 192+168+100+12 = 472 % 3 = 1
src.address :

# /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3 # /ip firewall mangle add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3
: in-interface=br-lan
, action=mark-routing
.
Check ping — , IP , , , check ping .
BGP, .
, ip , , google dns: 8.8.8.8. 8.8.4.4. Mikrotik .
Multihop BGP MikroTik, check gateway .
scope/target scope :

- scope main target scope
- ,
- connected
, :

- 1-3 connected ,
- 4-6 connected ""
RIB, FIB : 0.0.0.0/0 via 10.10.10.1 on ether1
.

:

/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10 add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10 add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
, 10.10.10.1:

Check gateway ping' 8.8.8.8, ( main) 10.10.10.1.
10.10.10.1 8.8.8.8, , ( ping) 8.8.8.8 10.10.10.1:

ether1, , 8.8.8.8 :

, NetWatch 8.8.8.8. NetWatch . :
/ip route add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole

, NetWatch .
, 8.8.8.8 , dns .
Virtual Routing and Forwarding (VRF)
VRF , ( MPLS) L3VPN :

VRF Mikrotik , ip VRF, .
vrf:

/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
ether2 , ping vrf ( ), ping :

main ( vrf route leaking):

/ip route add distance=1 gateway=172.17.0.1@main routing-mark=vrf1 add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2
route leaking: : 172.17.0.1@main
: 172.17.0.1%wlan1
.
[PREROUTING|Mangle]
:

/ip firewall mangle add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no

VRF netmap:

:
/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.100.1/24 interface=ether2 network=192.168.100.0 add address=192.168.0.1/24 interface=ether3 network=192.168.0.0
firewall:
# /ip firewall mangle add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no # netmap "" /ip firewall nat add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
:
# route leaking, connected /ip route add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1 add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2
dhcp
VRF , ( dhcp client) .
vrf:
/ip route vrf add interface=ether1 routing-mark=over-isp1
( ) over-isp1 :
/ip firewall mangle add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no
, :
/interface bridge add name=bare /ip route add dst-address=0.0.0.0/0 gateway=bare
Routing decision (2) [OUTPUT|Mangle]
, 0.0.0.0/0 main .

connected-in
dynamic-in
[Routing] -> [Filters]
( ) — ( routing ), :
- connected-in — connected
- dynamic-in — PPP DCHP
, : distance, routing-mark, comment, scope, target scope, ...
- Routing Filters ( ), Routing Filters, . Routing Filters .
Routing Mark
. VPN . - :
# vpn default route /interface pptp-client add connect-to=XXXX add-default-route=yes default-route-distance=101 ... add connect-to=YYYY add-default-route=yes default-route-distance=100 ... # /routing filter add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1 add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2
, , vrf ppp , 0.0.0.0/0 main. .
Connected
:
/route filter add chain=connected-in prefix=192.168.100.0/24 action=reject
RouterOS :
[Tool]->[Torch]
—/ip route check
— ,/ping routing-table=<name>
/tool traceroute routing-table=<name>
— pingaction=log
[IP]->[Firewall]
— , packet flow,