Failover هوشمند با Track

مقدمه

در شبکه‌های سازمانی، نیاز به ارتباط امن و پایدار بین سایت‌های مختلف با استفاده از چندین لینک ارتباطی، امری رایج است. در این کارگاه، نحوه پیاده‌سازی یک سیستم Failover و Load Balancing پیشرفته را با استفاده از ترکیب Track، WireGuard، VRF و Scripting در روتر SooDar فرا می‌گیرید.

این کارگاه یک سناریوی واقعی را پیاده‌سازی می‌کند که در آن:

  • سه لینک WireGuard بین دو روتر وجود دارد

  • سه شبکه (A، B، C) در VRF های جداگانه قرار دارند

  • Load Balancing اولیه: هر شبکه از یک لینک اختصاصی استفاده می‌کند

  • Failover هوشمند: در صورت قطع لینک، ترافیک به‌صورت خودکار به لینک‌های جایگزین منتقل می‌شود

  • Route Leakage بین VRF ها برای دسترسی متقابل

مرور سناریو

در این کارگاه یک سناریوی دو روتری با قابلیت Failover چندسطحی پیاده‌سازی می‌شود:

روترها:

  • R1: روتر SooDar اول

  • R2: روتر SooDar دوم

لینک‌های WireGuard:

  • لینک 1 (WG1): شبکه 10.0.1.0/24 - اختصاصی برای VRF-A

  • لینک 2 (WG2): شبکه 10.0.2.0/24 - اختصاصی برای VRF-B

  • لینک 3 (WG3): شبکه 10.0.3.0/24 - اختصاصی برای VRF-C

VRF ها:

  • VRF-A: شبکه محلی 1.1.1.0/24 و 2.1.1.0/24

  • VRF-B: شبکه محلی 1.2.1.0/24 و 2.2.1.0/24

  • VRF-C: شبکه محلی 1.3.1.0/24 و 2.3.1.0/24

منطق Failover:

  • در حالت عادی: A از لینک 1، B از لینک 2، C از لینک 3

  • اگر لینک 1 قطع شد: A به لینک 2 منتقل می‌شود

  • اگر لینک 1 دوباره وصل شد: A به لینک 1 برمی‌گردد

  • اگر لینک 2 قطع شد: B به لینک 3 منتقل می‌شود

  • اگر لینک 1 و 2 هر دو قطع شدند: A به لینک 3 منتقل می‌شود

توضیح توپولوژی

توپولوژی سناریو

نودها و نقش‌ها:

  • R1: روتر SooDar اول با سه VRF (A، B، C)

  • R2: روتر SooDar دوم با سه VRF (A، B، C)

  • Client-A1, Client-A2: کلاینت‌های شبکه A

  • Client-B1, Client-B2: کلاینت‌های شبکه B

  • Client-C1, Client-C2: کلاینت‌های شبکه C

لینک‌ها و آدرس‌دهی:

لینک‌های فیزیکی (Public):

  • R1 ge0 ↔ R2 ge0: شبکه 100.1.2.0/24 (برای WireGuard 100)

    • R1 ge0: 100.1.2.1/24

    • R2 ge0: 100.1.2.2/24

  • R1 ge1 ↔ R2 ge1: شبکه 200.1.2.0/24 (برای WireGuard 200)

    • R1 ge1: 200.1.2.1/24

    • R2 ge1: 200.1.2.2/24

  • R1 ge2 ↔ R2 ge2: شبکه 200.1.3.0/24 (برای WireGuard 300)

    • R1 ge2: 200.1.3.1/24

    • R2 ge2: 200.1.3.2/24

لینک‌های WireGuard:

  • WG1: شبکه 10.0.1.0/24 (برای VRF-A)

    • R1 wireguard100: 10.0.1.1/32

    • R2 wireguard100: 10.0.1.2/32

  • WG2: شبکه 10.0.2.0/24 (برای VRF-B)

    • R1 wireguard200: 10.0.2.1/32

    • R2 wireguard200: 10.0.2.2/32

  • WG3: شبکه 10.0.3.0/24 (برای VRF-C)

    • R1 wireguard300: 10.0.3.1/32

    • R2 wireguard300: 10.0.3.2/32

شبکه‌های LAN و کلاینت‌ها:

  • VRF-A:

    • R1 ge5: 1.1.1.1/24

    • R2 ge5: 2.1.1.1/24

    • Client-A1: 1.1.1.10 (متصل به R1)

    • Client-A2: 2.1.1.10 (متصل به R2)

  • VRF-B:

    • R1 ge6: 1.2.1.1/24

    • R2 ge6: 2.2.1.1/24

    • Client-B1: 1.2.1.10 (متصل به R1)

    • Client-B2: 2.2.1.10 (متصل به R2)

  • VRF-C:

    • R1 ge7: 1.3.1.1/24

    • R2 ge7: 2.3.1.1/24

    • Client-C1: 1.3.1.10 (متصل به R1)

    • Client-C2: 2.3.1.10 (متصل به R2)

پیش‌نیازها

  • دسترسی CLI به روترهای SooDar

  • آشنایی پایه با WireGuard، VRF، Track و Static Routing

  • دسترسی به اسکریپت‌های sooshell در روتر

در تمام مراحل، اصل «چرایی قبل از چگونگی» رعایت شده است: ابتدا هدف هر بخش گفته می‌شود، سپس پیکربندی ارائه می‌گردد.

پیکربندی مرحله‌به‌مرحله

1) آماده‌سازی VRF ها

چرا: برای جداسازی منطقی ترافیک شبکه‌های A، B و C، هر کدام باید در VRF جداگانه‌ای قرار گیرند.

R1

configure terminal
vrf VRF-A
exit-vrf
!
vrf VRF-B
exit-vrf
!
vrf VRF-C
exit-vrf
!
end

R2

configure terminal
vrf VRF-A
exit-vrf
!
vrf VRF-B
exit-vrf
!
vrf VRF-C
exit-vrf
!
end

2) پیکربندی اینترفیس‌های Public

چرا: سه لینک Public جداگانه برای ارتباط WireGuard لازم است. هر WireGuard از یک لینک Public اختصاصی استفاده می‌کند.

R1

configure terminal
interface ge0
 ip address 100.1.2.1/24
 no shutdown
exit
!
interface ge1
 ip address 200.1.2.1/24
 no shutdown
exit
!
interface ge2
 ip address 200.1.3.1/24
 no shutdown
exit
end

R2

configure terminal
interface ge0
 ip address 100.1.2.2/24
 no shutdown
exit
!
interface ge1
 ip address 200.1.2.2/24
 no shutdown
exit
!
interface ge2
 ip address 200.1.3.2/24
 no shutdown
exit
end

3) پیکربندی اینترفیس‌های LAN در VRF ها

چرا: هر VRF باید اینترفیس LAN خود را داشته باشد.

R1

configure terminal
interface ge5
 ip vrf forwarding VRF-A
 ip address 1.1.1.1/24
 no shutdown
exit
!
interface ge6
 ip vrf forwarding VRF-B
 ip address 1.2.1.1/24
 no shutdown
exit
!
interface ge7
 ip vrf forwarding VRF-C
 ip address 1.3.1.1/24
 no shutdown
exit
end

R2

configure terminal
interface ge5
 ip vrf forwarding VRF-A
 ip address 2.1.1.1/24
 no shutdown
exit
!
interface ge6
 ip vrf forwarding VRF-B
 ip address 2.2.1.1/24
 no shutdown
exit
!
interface ge7
 ip vrf forwarding VRF-C
 ip address 2.3.1.1/24
 no shutdown
exit
end

4) پیکربندی WireGuard برای لینک 1 (VRF-A)

چرا: لینک WireGuard اول برای VRF-A اختصاص داده می‌شود. این لینک در حالت Routing Mode کار می‌کند (نه OSPF).

تولید کلیدهای WireGuard

ابتدا باید کلیدهای خصوصی WireGuard را در روترها تولید کنیم. برای هر لینک WireGuard، یک کلید خصوصی نیاز است.

R1 - تولید کلید WireGuard برای لینک 1

configure terminal
crypto key generate x25519 label wgkey-r1-100
exit
end

این دستور کلید خصوصی WireGuard را تولید و با نام wgkey-r1-100 ذخیره می‌کند.

برای مشاهده کلید عمومی (Public Key) که باید به طرف مقابل داده شود:

show crypto key wgkey-r1-100

کلید عمومی نمایش داده شده را یادداشت کنید. این کلید را در پیکربندی R2 استفاده خواهید کرد.

R1 - پیکربندی اینترفیس WireGuard برای VRF-A

configure terminal
interface wireguard100
 ip vrf forwarding VRF-A
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r1-100
 wireguard port 10100
 wireguard peer R2-WG1
  public-key <کلید_عمومی_R2_را_اینجا_وارد_کنید>
  endpoint 100.1.2.2 port 10100
  vrf default
  allowed-ip 10.0.1.2/32
 no shutdown
 ip address 10.0.1.1/32
exit
end

نکته: مقدار <کلید_عمومی_R2_را_اینجا_وارد_کنید> را با کلید عمومی که از R2 دریافت می‌کنید جایگزین کنید.

R2 - تولید کلید WireGuard برای لینک 1

configure terminal
crypto key generate x25519 label wgkey-r2-100
exit
end

برای مشاهده کلید عمومی:

show crypto key wgkey-r2-100

کلید عمومی را یادداشت کنید و در پیکربندی R1 استفاده کنید.

R2 - پیکربندی اینترفیس WireGuard برای VRF-A

configure terminal
interface wireguard100
 ip vrf forwarding VRF-A
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r2-100
 wireguard port 10100
 wireguard peer R1-WG1
  public-key <کلید_عمومی_R1_را_اینجا_وارد_کنید>
  endpoint 100.1.2.1 port 10100
  vrf default
  allowed-ip 10.0.1.1/32
 no shutdown
 ip address 10.0.1.2/32
exit
end

5) پیکربندی WireGuard برای لینک 2 (VRF-B)

چرا: لینک WireGuard دوم برای VRF-B اختصاص داده می‌شود.

R1 - تولید کلید WireGuard برای لینک 2

configure terminal
crypto key generate x25519 label wgkey-r1-200
exit
end

R1 - پیکربندی اینترفیس WireGuard برای VRF-B

configure terminal
interface wireguard200
 ip vrf forwarding VRF-B
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r1-200
 wireguard port 10200
 wireguard peer R2-WG2
  public-key <کلید_عمومی_R2_را_اینجا_وارد_کنید>
  endpoint 200.1.2.2 port 10200
  vrf default
  allowed-ip 10.0.2.2/32
 no shutdown
 ip address 10.0.2.1/32
exit
end

R2 - تولید کلید WireGuard برای لینک 2

configure terminal
crypto key generate x25519 label wgkey-r2-200
exit
end

R2 - پیکربندی اینترفیس WireGuard برای VRF-B

configure terminal
interface wireguard200
 ip vrf forwarding VRF-B
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r2-200
 wireguard port 10200
 wireguard peer R1-WG2
  public-key <کلید_عمومی_R1_را_اینجا_وارد_کنید>
  endpoint 200.1.2.1 port 10200
  vrf default
  allowed-ip 10.0.2.1/32
 no shutdown
 ip address 10.0.2.2/32
exit
end

6) پیکربندی WireGuard برای لینک 3 (VRF-C)

چرا: لینک WireGuard سوم برای VRF-C اختصاص داده می‌شود.

R1 - تولید کلید WireGuard برای لینک 3

configure terminal
crypto key generate x25519 label wgkey-r1-300
exit
end

R1 - پیکربندی اینترفیس WireGuard برای VRF-C

configure terminal
interface wireguard300
 ip vrf forwarding VRF-C
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r1-300
 wireguard port 10300
 wireguard peer R2-WG3
  public-key <کلید_عمومی_R2_را_اینجا_وارد_کنید>
  endpoint 200.1.3.2 port 10300
  vrf default
  allowed-ip 10.0.3.2/32
 no shutdown
 ip address 10.0.3.1/32
exit
end

R2 - تولید کلید WireGuard برای لینک 3

configure terminal
crypto key generate x25519 label wgkey-r2-300
exit
end

R2 - پیکربندی اینترفیس WireGuard برای VRF-C

configure terminal
interface wireguard300
 ip vrf forwarding VRF-C
 ip mtu 1420
 wireguard mode routing
 wireguard source 0.0.0.0
 wireguard private-key wgkey-r2-300
 wireguard port 10300
 wireguard peer R1-WG3
  public-key <کلید_عمومی_R1_را_اینجا_وارد_کنید>
  endpoint 200.1.3.1 port 10300
  vrf default
  allowed-ip 10.0.3.1/32
 no shutdown
 ip address 10.0.3.2/32
exit
end

7) پیکربندی IP SLA برای مانیتورینگ لینک‌های WireGuard

چرا: برای تشخیص قطعی تونل‌های WireGuard، باید از IP SLA استفاده کنیم. IP SLA به‌صورت دوره‌ای به آدرس IP اینترفیس WireGuard طرف مقابل در همان VRF پینگ می‌زند و وضعیت تونل را بررسی می‌کند.

نکته مهم: IP SLA باید در همان VRF که WireGuard در آن قرار دارد اجرا شود تا بتواند به آدرس IP اینترفیس WireGuard طرف مقابل دسترسی داشته باشد.

R1 - IP SLA برای لینک 1 (WireGuard 100 در VRF-A)

configure terminal
ip sla 1
 icmp-echo 10.0.1.2
  vrf VRF-A
  frequency 5
exit
!
ip sla schedule 1 start-time now life forever
exit
end

این IP SLA به آدرس 10.0.1.2 (آدرس IP اینترفیس wireguard100 روی R2) در VRF-A پینگ می‌زند. اگر تونل WireGuard فعال باشد، این پینگ موفق خواهد بود.

R1 - IP SLA برای لینک 2 (WireGuard 200 در VRF-B)

configure terminal
ip sla 2
 icmp-echo 10.0.2.2
  vrf VRF-B
  frequency 5
exit
!
ip sla schedule 2 start-time now life forever
exit
end

این IP SLA به آدرس 10.0.2.2 (آدرس IP اینترفیس wireguard200 روی R2) در VRF-B پینگ می‌زند.

R1 - IP SLA برای لینک 3 (WireGuard 300 در VRF-C)

configure terminal
ip sla 3
 icmp-echo 10.0.3.2
  vrf VRF-C
  frequency 5
exit
!
ip sla schedule 3 start-time now life forever
exit
end

این IP SLA به آدرس 10.0.3.2 (آدرس IP اینترفیس wireguard300 روی R2) در VRF-C پینگ می‌زند.

R2 - IP SLA برای لینک 1 (WireGuard 100 در VRF-A)

configure terminal
ip sla 1
 icmp-echo 10.0.1.1
  vrf VRF-A
  frequency 5
exit
!
ip sla schedule 1 start-time now life forever
exit
end

این IP SLA به آدرس 10.0.1.1 (آدرس IP اینترفیس wireguard100 روی R1) در VRF-A پینگ می‌زند.

R2 - IP SLA برای لینک 2 (WireGuard 200 در VRF-B)

configure terminal
ip sla 2
 icmp-echo 10.0.2.1
  vrf VRF-B
  frequency 5
exit
!
ip sla schedule 2 start-time now life forever
exit
end

R2 - IP SLA برای لینک 3 (WireGuard 300 در VRF-C)

configure terminal
ip sla 3
 icmp-echo 10.0.3.1
  vrf VRF-C
  frequency 5
exit
!
ip sla schedule 3 start-time now life forever
exit
end

نکته مهم: IP SLA باید در همان VRF که WireGuard در آن قرار دارد اجرا شود. این باعث می‌شود که IP SLA بتواند به آدرس IP اینترفیس WireGuard طرف مقابل دسترسی داشته باشد و وضعیت تونل را به‌درستی بررسی کند.

8) پیکربندی Track Objects

چرا: Track Objects وضعیت IP SLA ها را ردیابی می‌کنند و در صورت قطع شدن، Script های مربوطه را اجرا می‌کنند.

R1 - Track Objects پایه

configure terminal
track 10 ip sla 1 reachability
exit
!
track 20 ip sla 2 reachability
exit
!
track 30 ip sla 3 reachability
exit
end

این Track Objects وضعیت هر لینک را به‌صورت جداگانه ردیابی می‌کنند.

9) پیکربندی Track List برای منطق Failover

چرا: برای پیاده‌سازی منطق Failover پیچیده (مثل “اگر لینک 1 و 2 هر دو قطع شدند”)، باید از Track List با منطق boolean استفاده کنیم.

R1 - Track List برای A (لینک 1 قطع است)

configure terminal
track 11 list boolean or
 object 10 not
exit
!
track 1 list boolean and upscript script:TRACK1_UP downscript script:TRACK1_DOWN
 object 10
exit
!
track 2 list boolean and upscript script:TRACK2_UP downscript script:TRACK2_DOWN
 object 10 not
 object 20
exit
!
track 3 list boolean and upscript script:TRACK3_UP downscript script:TRACK3_DOWN
 object 10 not
 object 20 not
 object 30
exit
end

توضیح منطق Track:

  • Track 1: وقتی لینک 1 (object 10) Up است → Script TRACK1_UP اجرا می‌شود (A از لینک 1 استفاده می‌کند)

  • Track 2: وقتی لینک 1 قطع است (object 10 not) و لینک 2 Up است (object 20) → Script TRACK2_UP اجرا می‌شود (A از لینک 2 استفاده می‌کند)

  • Track 3: وقتی لینک 1 و 2 هر دو قطع هستند (object 10 not, object 20 not) و لینک 3 Up است (object 30) → Script TRACK3_UP اجرا می‌شود (A از لینک 3 استفاده می‌کند)

R1 - Track List برای B (لینک 2)

configure terminal
track 4 list boolean and upscript script:TRACK4_UP downscript script:TRACK4_DOWN
 object 20
exit
!
track 5 list boolean and upscript script:TRACK5_UP downscript script:TRACK5_DOWN
 object 20 not
 object 30
exit
end

توضیح منطق Track:

  • Track 4: وقتی لینک 2 (object 20) Up است → Script TRACK4_UP اجرا می‌شود (B از لینک 2 استفاده می‌کند)

  • Track 5: وقتی لینک 2 قطع است (object 20 not) و لینک 3 Up است (object 30) → Script TRACK5_UP اجرا می‌شود (B از لینک 3 استفاده می‌کند)

R1 - Track List برای C (لینک 3)

configure terminal
track 6 list boolean and upscript script:TRACK6_UP downscript script:TRACK6_DOWN
 object 30
exit
end

توضیح منطق Track:

  • Track 6: وقتی لینک 3 (object 30) Up است → Script TRACK6_UP اجرا می‌شود (C از لینک 3 استفاده می‌کند)

10) ایجاد Script های Track

چرا: Script ها در هنگام تغییر وضعیت Track اجرا می‌شوند و Route ها را به‌صورت خودکار اضافه یا حذف می‌کنند.

R1 - Script TRACK1_UP (A از لینک 1)

این Script وقتی لینک 1 Up است اجرا می‌شود و Route VRF-A را از طریق لینک 1 تنظیم می‌کند:

enable
conf t
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
no ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

این Script:

  1. Route قبلی به شبکه کلاینت R2 (2.1.1.0/24) از طریق لینک 2 یا 3 را حذف می‌کند

  2. Route جدید به شبکه کلاینت R2 از طریق لینک 1 را اضافه می‌کند

  3. Route برگشت به شبکه کلاینت R1 (1.1.1.0/24) را از VRF-B و VRF-C حذف می‌کند (با اشاره به ge5 که interface کلاینت A است)

R1 - Script TRACK1_DOWN (لینک 1 قطع شد)

این Script وقتی لینک 1 قطع می‌شود اجرا می‌شود:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
exit
end

این Script فقط Route به شبکه کلاینت R2 از طریق لینک 1 را حذف می‌کند. Track 2 یا 3 سپس Route جدید و Route برگشت را اضافه می‌کنند.

R1 - Script TRACK2_UP (A از لینک 2)

این Script وقتی لینک 1 قطع است و لینک 2 Up است اجرا می‌شود:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
exit
end

این Script:

  1. Route به شبکه کلاینت R2 (2.1.1.0/24) را از طریق لینک 2 (که در VRF-B است) تنظیم می‌کند

  2. Route برگشت به شبکه کلاینت R1 (1.1.1.0/24) را در VRF-B اضافه می‌کند (با اشاره به ge5 که interface کلاینت A است)

R1 - Script TRACK2_DOWN

enable
conf t
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
no ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
exit
end

این Script Route و Route برگشت را از VRF-B حذف می‌کند.

R1 - Script TRACK3_UP (A از لینک 3)

این Script وقتی لینک 1 و 2 هر دو قطع هستند و لینک 3 Up است اجرا می‌شود:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

این Script:

  1. Route به شبکه کلاینت R2 (2.1.1.0/24) را از طریق لینک 3 (که در VRF-C است) تنظیم می‌کند

  2. Route برگشت به شبکه کلاینت R1 (1.1.1.0/24) را در VRF-C اضافه می‌کند (با اشاره به ge5 که interface کلاینت A است)

R1 - Script TRACK3_DOWN

enable
conf t
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
no ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

R1 - Script TRACK4_UP (B از لینک 2)

enable
conf t
no ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
exit
end

R1 - Script TRACK4_DOWN

enable
conf t
no ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
exit
end

R1 - Script TRACK5_UP (B از لینک 3)

enable
conf t
no ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
ip route 1.2.1.0/24 ge6 vrf VRF-C nexthop-vrf VRF-B
exit
end

این Script Route به شبکه کلاینت R2 (2.2.1.0/24) را از طریق لینک 3 منتقل می‌کند و Route برگشت به شبکه کلاینت R1 (1.2.1.0/24) را در VRF-C اضافه می‌کند (با اشاره به ge6 که interface کلاینت B است).

R1 - Script TRACK5_DOWN

enable
conf t
no ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
no ip route 1.2.1.0/24 ge6 vrf VRF-C nexthop-vrf VRF-B
exit
end

R1 - Script TRACK6_UP (C از لینک 3)

enable
conf t
ip route 2.3.1.0/24 10.0.3.2 vrf VRF-C nexthop-vrf VRF-C
exit
end

R1 - Script TRACK6_DOWN

enable
conf t
no ip route 2.3.1.0/24 10.0.3.2 vrf VRF-C nexthop-vrf VRF-C
exit
end

11) ثبت Script ها در سیستم

چرا: Script ها باید در سیستم ثبت شوند تا Track Objects بتوانند به آن‌ها ارجاع دهند و در زمان تغییر وضعیت، دستورات را اجرا کنند.

در روتر SooDar، برای مدیریت Script ها از دستورات زیر استفاده می‌شود:

edit script:scriptname

برای ایجاد یا ویرایش یک Script. این دستور محیط ویرایشگر nano را باز می‌کند تا بتوانید دستورات را وارد یا ویرایش کنید.

more script:scriptname

برای نمایش محتوای یک Script موجود.

del script:scriptname

برای حذف یک Script از سیستم.

dir script:

برای نمایش لیست تمام Script های موجود در سیستم.

R1 - ثبت Script TRACK1_UP

برای ثبت Script TRACK1_UP، دستور زیر را اجرا کنید:

edit script:TRACK1_UP

سپس در محیط nano که باز می‌شود، محتوای زیر را paste کنید:

enable
conf t
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
no ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

برای ذخیره و خروج از nano: Ctrl+X، سپس Y، و Enter.

R1 - ثبت Script TRACK1_DOWN

edit script:TRACK1_DOWN

محتوای Script:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
exit
end

R1 - ثبت Script TRACK2_UP

edit script:TRACK2_UP

محتوای Script:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
exit
end

R1 - ثبت Script TRACK2_DOWN

edit script:TRACK2_DOWN

محتوای Script:

enable
conf t
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
no ip route 1.1.1.0/24 ge5 vrf VRF-B nexthop-vrf VRF-A
exit
end

R1 - ثبت Script TRACK3_UP

edit script:TRACK3_UP

محتوای Script:

enable
conf t
no ip route 2.1.1.0/24 10.0.1.2 vrf VRF-A nexthop-vrf VRF-A
no ip route 2.1.1.0/24 10.0.2.2 vrf VRF-A nexthop-vrf VRF-B
ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

R1 - ثبت Script TRACK3_DOWN

edit script:TRACK3_DOWN

محتوای Script:

enable
conf t
no ip route 2.1.1.0/24 10.0.3.2 vrf VRF-A nexthop-vrf VRF-C
no ip route 1.1.1.0/24 ge5 vrf VRF-C nexthop-vrf VRF-A
exit
end

R1 - ثبت Script TRACK4_UP

edit script:TRACK4_UP

محتوای Script:

enable
conf t
no ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
exit
end

R1 - ثبت Script TRACK4_DOWN

edit script:TRACK4_DOWN

محتوای Script:

enable
conf t
no ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
exit
end

R1 - ثبت Script TRACK5_UP

edit script:TRACK5_UP

محتوای Script:

enable
conf t
no ip route 2.2.1.0/24 10.0.2.2 vrf VRF-B nexthop-vrf VRF-B
ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
ip route 1.2.1.0/24 ge6 vrf VRF-C nexthop-vrf VRF-B
exit
end

R1 - ثبت Script TRACK5_DOWN

edit script:TRACK5_DOWN

محتوای Script:

enable
conf t
no ip route 2.2.1.0/24 10.0.3.2 vrf VRF-B nexthop-vrf VRF-C
no ip route 1.2.1.0/24 ge6 vrf VRF-C nexthop-vrf VRF-B
exit
end

R1 - ثبت Script TRACK6_UP

edit script:TRACK6_UP

محتوای Script:

enable
conf t
no ip route 2.3.1.0/24 10.0.2.2 vrf VRF-C nexthop-vrf VRF-B
ip route 2.3.1.0/24 10.0.3.2 vrf VRF-C nexthop-vrf VRF-C
exit
end

R1 - ثبت Script TRACK6_DOWN

edit script:TRACK6_DOWN

محتوای Script:

enable
conf t
no ip route 2.3.1.0/24 10.0.3.2 vrf VRF-C nexthop-vrf VRF-C
exit
end

بررسی Script های ثبت شده

بعد از ثبت تمام Script ها، می‌توانید لیست آن‌ها را مشاهده کنید:

dir script:

برای نمایش محتوای یک Script:

more script:TRACK1_UP

نکته مهم: تمام Script های بالا را برای R2 نیز باید ثبت کنید، با این تفاوت که شبکه‌های مقصد معکوس می‌شوند (به جای 2.x.1.0/24 از 1.x.1.0/24 استفاده کنید و Route های برگشت را برعکس تنظیم کنید).

صحت‌سنجی و تست

1) بررسی وضعیت WireGuard

برای بررسی وضعیت لینک‌های WireGuard:

show interface wireguard100
show interface wireguard200
show interface wireguard300

تمام اینترفیس‌های WireGuard باید Up باشند و Peer ها متصل باشند.

2) بررسی وضعیت IP SLA

برای بررسی وضعیت IP SLA ها:

show ip sla statistics 1
show ip sla statistics 2
show ip sla statistics 3

برای جزئیات بیشتر از IP SLA:

show ip sla statistics 1 details
show ip sla configuration 1

تمام IP SLA ها باید در وضعیت “Success” یا “reachable” باشند.

3) بررسی وضعیت Track

برای بررسی وضعیت Track Objects:

show track 1
show track 2
show track 3
show track 4
show track 5
show track 6

همچنین می‌توانید وضعیت Track Objects پایه را بررسی کنید:

show track 10
show track 20
show track 30

Track 1، 4 و 6 باید Up باشند (لینک‌های 1، 2 و 3 فعال). خروجی show track شامل وضعیت فعلی (Up/Down)، Object ها و Script های متصل است.

4) بررسی Routing Table

برای بررسی Route های نصب شده:

R1 - VRF-A

show ip route vrf VRF-A

باید Route 10.1.2.0/24 از طریق 10.0.1.2 (لینک 1) مشاهده شود.

R1 - VRF-B

show ip route vrf VRF-B

باید Route 10.2.2.0/24 از طریق 10.0.2.2 (لینک 2) مشاهده شود.

R1 - VRF-C

show ip route vrf VRF-C

باید Route 10.3.2.0/24 از طریق 10.0.3.2 (لینک 3) مشاهده شود.

5) تست Failover - قطع لینک 1

برای تست Failover، می‌توانید لینک WireGuard 1 را shutdown کنید:

configure terminal
interface wireguard100
 shutdown
exit
end

پس از چند ثانیه:

  1. IP SLA 1 باید Fail شود

  2. Track 10 باید Down شود

  3. Track 1 باید Down شود و Script TRACK1_DOWN اجرا شود

  4. Track 2 باید Up شود و Script TRACK2_UP اجرا شود

  5. Route VRF-A باید از طریق 10.0.2.2 (لینک 2) باشد

برای بررسی:

show ip route vrf VRF-A

باید Route 10.1.2.0/24 از طریق 10.0.2.2 با (vrf VRF-B) مشاهده شود (Route Leakage).

6) تست Failover - برگشت لینک 1

برای برگرداندن لینک 1:

configure terminal
interface wireguard100
 no shutdown
exit
end

پس از چند ثانیه:

  1. IP SLA 1 باید Success شود

  2. Track 10 باید Up شود

  3. Track 1 باید Up شود و Script TRACK1_UP اجرا شود

  4. Track 2 باید Down شود

  5. Route VRF-A باید به 10.0.1.2 (لینک 1) برگردد

7) تست Failover - قطع لینک 2

برای تست Failover لینک 2:

configure terminal
interface wireguard200
 shutdown
exit
end

پس از چند ثانیه:

  • Route VRF-B باید از طریق 10.0.3.2 (لینک 3) باشد

  • Route VRF-A (اگر قبلاً از لینک 2 استفاده می‌کرد) باید از طریق لینک 3 باشد

8) تست اتصال با Ping

برای تست اتصال بین شبکه‌ها:

ping vrf VRF-A 10.1.2.1
ping vrf VRF-B 10.2.2.1
ping vrf VRF-C 10.3.2.1

تمام Ping ها باید موفق باشند.

نکته: در SooDar، فرمت صحیح ping با VRF این است: ping vrf <VRF-NAME> <IP> [count <number>]

9) تست Route Leakage

برای بررسی Route Leakage:

show ip route vrf VRF-A

اگر VRF-A از لینک 2 یا 3 استفاده می‌کند، باید (vrf VRF-B) یا (vrf VRF-C) در Route مشاهده شود.

نکات مهم

1) Route Leakage با nexthop-vrf

وقتی یک VRF می‌خواهد از اینترفیس WireGuard در VRF دیگری استفاده کند، باید از nexthop-vrf استفاده شود. این باعث می‌شود Route Leakage بین VRF ها انجام شود.

2) منطق Track List

Track List با منطق boolean امکان پیاده‌سازی منطق پیچیده Failover را فراهم می‌کند. استفاده از not برای تشخیص قطع بودن لینک و and برای ترکیب شرایط ضروری است.

3) اولویت Script ها

Script های Track باید Route های قبلی را حذف کنند و سپس Route جدید را اضافه کنند تا از Conflict جلوگیری شود.

4) Metric در Route ها

می‌توانید از Metric در Route ها استفاده کنید تا اولویت Route ها مشخص شود. Route با Metric کمتر اولویت بیشتری دارد.

جمع‌بندی

در این کارگاه، نحوه پیاده‌سازی یک سیستم Failover و Load Balancing پیشرفته با استفاده از ترکیب Track، WireGuard، VRF و Scripting در روتر SooDar را فرا گرفتید.

مزایای کلیدی این روش:

  • Failover خودکار: در صورت قطع لینک، ترافیک به‌صورت خودکار به لینک جایگزین منتقل می‌شود

  • Load Balancing: هر شبکه از لینک اختصاصی خود استفاده می‌کند

  • Route Leakage: امکان استفاده از لینک‌های VRF های دیگر در صورت نیاز

  • قابلیت Scripting: پیکربندی‌های پیچیده با Script انجام می‌شوند

  • پایش مداوم: IP SLA وضعیت لینک‌ها را به‌صورت مداوم بررسی می‌کند

این روش برای شبکه‌های سازمانی که نیاز به ارتباط پایدار و امن بین سایت‌های مختلف دارند، بسیار مناسب است.