CiscoTik

Networking Administration

CiscoTik

Networking Administration

CiscoTik

آموزش شبکه های مبتنی بر سیسکو و میکروتیک و ...

طبقه بندی موضوعی
محبوب ترین مطالب
  • ۹۲/۱۲/۱۲
    eBGP
نویسندگان
  • ۱
  • ۰
سلام به بینندگان وبلاگم...
امروز در مورد ECMP Failover  مطلبی واستون گذاشتم...


This script demonstrates one method of doing automatic failover using the Netwatch function and using scripting to enable or disable gateways.


ما 2 خط به اینترنت داریم به آدرس های 10.0.0.12 و 10.0.0.13 .
میخواهیم با استفاده از منگل ترافیک های http را مارک کرده و با loadbalancing آنهارا به اینترنت ببریم.

  /ip firewall mangle add chain=prerouting protocol=tcp dst-port=80 action=mark-routing \
   new-routing-mark=ecmp-http-route passthrough=yes comment=" Route HTTP  traffic to ECMP" disabled=no 


You set up ECMP (Equal Cost Multipath Routing) by using something like
/ip route add dst-address=0.0.0.0/0 gateway=10.0.0.12,10.0.0.13 routing-mark=ecmp-http-route comment="ECMP route for HTTP"
 
در کد بالا از ECMP فقط برای ترافیک های HTTP استفاده کردیم و برای ترافیک های HTTPS و SMTP و ... این امکان وجود ندارد.
برای این کار ترافیک های SMTP را مارک کرده و از طریق 10.0.0.12 عبور میدهیم...
  /ip firewall mangle add chain=prerouting protocol=tcp dst-port=25 action=mark-routing \
   new-routing-mark=smtp-out passthrough=yes comment="SMTP Traffic" disabled=no 

   /ip route add dst-address=0.0.0.0/0 gateway=10.0.0.12 routing-mark=smtp-out comment="SMTP Traffic out"

مابقی ترافیک ها را از 10.0.0.13 عبور میدهیم...


  /ip route add dst-address=0.0.0.0/0 gateway=10.0.0.13 comment="Default Route to Internet"
پس تا الان ترافیک HTTP از جفت اینترفیس های اینترنتی می تواند برود ، ترافیک SNMP از اینترفیس 10.0.0.12 ، و مابقی ترافیک ها (ازجمله HTTPS) از اینترفیس 10.0.0.13 میگذرد.


 / tool netwatch 
   add host=1.1.1.13 timeout=2s interval=30s up-script="/ip route set \
   \[find comment=\"Default Route To Internet\"\] gateway=10.0.0.13" \
   down-script="/ip route set \[find comment=\"Default Route To Internet\"\] \
   gateway=10.0.0.12 comment="" disabled=no 
  
add host=1.1.1.12 timeout=2s interval=30s up-script="/ip route set \ \[find comment=\"SMTP Traffic out\"\] gateway=1.0.0.12" down-script="/ip \ \n" \route set \[find comment=\"SMTP Traffic out\"\] gateway=10.0.0.13 comment="" disabled=no
حال با استفاده از تونایی NetWach یک آدرسی را در Host قرار میدهیم (1.1.1.13 و 1.1.1.12) . هدف از این کار اینست که این دو آدرس مذکور مورد پینگ شدن قرار گرفته تا از وصل بودن یا نبودن آدرس های  10.0.0.12 و 10.0.0.13 مطمن شویم.در واقع گزینه  host میتواند همان 4.2.2.4 یا 8.8.8.8 باشد.
دستور اول میگوید : اگر به سایت مورد نظر پینگ داشتیم برو از route ای که در کامنتش Default Route To Internet است را پیدا کن ، مقدار gateway آنرا 10.0.0.13 کن و ازآن استفاده کن  ولی اگر پینگ موجود نبود همان Route را پیدا کن ولی gateway آنرا عوض کن با مقدار 10.0.0.12
نهایتا در خط اول تمام پروتکل ها به غیر از SMTP را عبور میدهد.

در دستور دوم  اگر 10.0.0.12 کار نکرد ، برای ارسال SMTP ، گیت وی rout ای به نام SMTP Trafic out را با مقدار 10.0.0.13 عوض کن تا SMTP بتواند تبادل داده کند.
نهایتا در خط دوم پروتکل Smtp را ردیف میکند.


Otherwise when a gateway goes down they will have no access to those sites (همان سایت 1.1.1.13 یا 1.1.1.12 یا 4.2.2.4 ).
 The addresses I am using as an example are 1.1.1.12 to test 10.0.0.12, and 1.1.1.13 to test 10.0.0.13.

یکی از کارایی که با Netwatch میتونیم انجام بدیم اینه که مدام یکی از خطوط اینترنتیمون  رو چک کنیم و به محض قطع شدن کانفیگ رو با Script تغییر بدیم تا Default route بره به سمت اون اینترفیس اینترنتیه دیگه تا اینترنت ازون دریافت بشه.
در قسمت UP ، اسکریپتی نوشته میشود که اگر مثلا 4.2.2.4 را پینگ داشتیم ، اجرا شود ودر قسمت down اسکریپتی را مینویسیم که اگر 4.2.2.4 را پینگ نداشتیم (از خطی که در UP بود)  ، اجراشود.

The problem is that the ECMP http route will still be active, therefore http traffic wont work, so I have 2 scripts to check if both gateways are up or down and take action accordingly:




   ecmp startup script
   :if ([/ping 1.1.1.13 count=1]=1 && [/ping 1.1.1.12 count=1]=1 && [/ip route get \
   [find routing-mark="ecmp-http-route"] disabled]=true) do={:log info "Both Gateways are up" \
   /n/ip route set [find routing-mark="ecmp-http-route"] disable=no}
 ecmp shutdown script
   :if ([/ping 1.1.1.13 count=1]=0 || [/ping 1.1.1.12 count=1]=0) do={:log info \
   "Gateway down" /ip route set [find routing-mark="ecmp-http-route"] disabled=yes} 

در خط اول میگوید اگر دو خط فعال بودند و routای با مارک Ecmp http route نیز خاموش بود ، یک لاگ بنویس به شرح اینکه هر دو گیت وی ها اینترنت دارند (UP هسنتد) و این route را فعال کن.

درخط دوم برعکس همین شرط را داریم و طبیعتا نیز کار برعکسی نیز مخواهیم... !

   / system scheduler 
   add name="gateway-check" on-event="/system script run ecmp-shutdown
   script run ecmp-startup" start-date=jan/01/1970 start-time=00:00:00 \
   interval=30s comment="" disabled=no

....................................................
باتشکر
mohammad ba



نظرات (۲)

hi
its good
more try
با سلام .
خسته نباشد ممنون بابت زحماتتون و توضیح روانتون. 
کم میشه در مورد ECMP Failover  مثل شما خوب توضیح بدهند.
خیلی خوب بود میشه گقت عالی بود.
پاسخ:
سلام.
ممنون .لطف دارید دوست عزیز.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی