سلام به بینندگان وبلاگم...
امروز در مورد ECMP Failover مطلبی واستون گذاشتم...
This script demonstrates one method of doing automatic failover using
the Netwatch function and using scripting to enable or disable gateways.امروز در مورد ECMP Failover مطلبی واستون گذاشتم...
ما 2 خط به اینترنت داریم به آدرس های 10.0.0.12 و 10.0.0.13 .
میخواهیم با استفاده از منگل ترافیک های http را مارک کرده و با loadbalancing آنهارا به اینترنت ببریم.
میخواهیم با استفاده از منگل ترافیک های 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 عبور میدهیم...
برای این کار ترافیک های 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 میگذرد.
حال با استفاده از تونایی 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 را ردیف میکند.
/ 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
دستور اول میگوید : اگر به سایت مورد نظر پینگ داشتیم برو از 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 بود) ، اجراشود.
در قسمت 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
its good
more try