Wireguard-routing

آموزش راه اندازی تونل wireguard-routing در سودار

پروتکل wireguard فقط static route را پشتیبانی می کند و شما با اضافه کردن allowed-ip ها در تونل route های استاتیک از طریق تونل وایرگارد ایجاد می کنید . در روتر سودار امکان اجرای ospf در وایرگارد و در واقع Dynamic routing در تونل وایرگارد فراهم شده است .

فرض کنید در سناریو زیر قصد داریم بین روتر ها تونل وایرگارد در حالت routing ایجاد کنیم به نحوی که ارتباط شبکه های پشتی روتر از طریق تونل برقرار شود :

wg

در این سناریو ما :

  • در هر روتر یک تونل wireguard می سازیم و در آن ۲ peer اضافه می کنیم . برای مثال در soodar1 روتر های soodar2 , soodar3 را به عنوان peer اضافه می کنیم .
  • سپس در تونل ospf را اجرا می کنیم
  • بررسی می کنیم که تونل ها وصل شده باشند
  • همسایگی ospf و جدول routing را بررسی کرده و تست ارتباط از درون تونل را انجام می دهیم

ساخت کلید wg

در ابتدا برای هر تونل یک کلید wg تولید می کنیم . دقت شود که کلید حتما باید از نوع x25519 انتخاب گردد :

دقت شود که کلید حتما باید از نوع x25519 انتخاب گردد.

soodar1(config)# crypto key generate x25519 label wg10
informational-ZEBRA: new X25519 key wg10 generated

soodar1(config-if)# do sh crypto key wg10
Keypair Label: wg10
  Algorithm:   X25519
  Public key:  A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76

soodar1(config-if)#
soodar2(config)# crypto key generate x25519 label wg20
informational-ZEBRA: new X25519 key wg20 generated

soodar2(config)# do sh crypto key wg20
Keypair Label: wg20
  Algorithm:   X25519
  Public key:  045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831

soodar2(config-if)#
soodar3(config)# crypto key generate x25519 label wg30
informational-ZEBRA: new X25519 key wg30 generated

soodar3(config-if)# do sh crypto key wg30
Keypair Label: wg30
  Algorithm:   X25519
  Public key:  10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300

soodar3(config-if)#

ساخت اینترفیس wireguard

  • قبل ساخت اینترفیس وایرگارد، ospf را فعال می کنیم تا بتوانیم بعدا از آن در اینترفیس وایرگارد استفاده کنیم.
  • کلیدی که قرار است برای این تونل استفاده شود را مشخص می کنیم . public key این کلید در تنظیمات تونل طرف مقابل استفاده می شود
  • پورتی که روی آن گوش می کنیم و بسته ها را با آن پورت مقصد قبول می کنیم را هم مشخص می کنیم این پورت در طرف مقابل تونل در بخش peer ها باید مد نظر گرفته شود
  • یک ip هم به اینترفیس اختصاص می دهیم . netmask این ip حتما باید 32 باشد .
soodar1(config)# router ospf
soodar1(config-router)# ospf router-id 222.1.1.1
soodar1(config-router)# redistribute connected
soodar1(config-router)# q
soodar1(config)# interface wireguard10  
soodar1(config-if)# wireguard mode routing
soodar1(config-if)# wireguard source 0.0.0.0
soodar1(config-if)# wireguard private-key wg10
soodar1(config-if)# wireguard port 1100
soodar1(config-if)# ip address 10.0.0.10/32
soodar1(config-if)# ip ospf network point-to-multipoint
soodar1(config-if)# ip ospf area 0
soodar1(config-if)# end
soodar1# 
soodar2(config)# router ospf
soodar2(config-router)# ospf router-id 222.2.2.2
soodar2(config-router)# redistribute connected
soodar2(config-router)# q
soodar2(config)# interface wireguard20  
soodar2(config-if)# wireguard mode routing
soodar2(config-if)# wireguard source 0.0.0.0
soodar2(config-if)# wireguard private-key wg20
soodar2(config-if)# wireguard port 1200
soodar2(config-if)# ip address 10.0.0.20/32
soodar2(config-if)# ip ospf network point-to-multipoint
soodar2(config-if)# ip ospf area 0
soodar2(config-if)# q
soodar2(config)# 
soodar3(config)# router ospf
soodar3(config-router)# ospf router-id 222.3.3.3
soodar3(config-router)# redistribute connected
soodar3(config-router)# q
soodar3(config)# interface wireguard30  
soodar3(config-if)# wireguard mode routing
soodar3(config-if)# wireguard source 0.0.0.0
soodar3(config-if)# wireguard private-key wg30
soodar3(config-if)# wireguard port 1300
soodar3(config-if)# ip address 10.0.0.30/32
soodar3(config-if)# ip ospf network point-to-multipoint
soodar3(config-if)# ip ospf area 0
soodar3(config)# 

۱. تنظیم wireguard source 0.0.0.0 بدین معنی است که از هر اینترفیسی peer را پیدا کند تونل وصل می شود و به اینترفیس خاصی bind نمی شود. برای مثال soodar1 به soodar2 از طریق اینترفیس ge0 و به soodar3 از طریق اینترفیس ge1 وصل می شود .
۲. دقت شود چون دو نوع تونل وایرگارد در سودار وجود دارد (هم استاتیک و هم داینامیک) حتما wireguard mode routing را در اینترفیس وارد کنید .

افزودن peer

اطلاعات مربوط به طرف مقابل تونل را را در این بخش مشخص می کنیم .

  • ابتدا یک نام برای peer مشخص می کنیم .
  • public-key مربوط به peer را که قبلا در peer اضافه شده است را تنظیم می کنیم (با دستور sh crypto key KEYNAME می توان public key کلید را مشاهده کرد) .
  • آدرس ip مروبط به اینترفیس وایرگارد peer را در بخش allowed-ip اضافه می کنیم .
soodar1(config)# interface wireguard10  
soodar1(config-if)# wireguard peer soodar2
soodar1(config-wg-peer)# public-key 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
soodar1(config-wg-peer)# endpoint 200.1.2.2 port 1200
soodar1(config-wg-peer)# allowed-ip 10.0.0.20/32
soodar1(config-wg-peer)# vrf default
soodar1(config-wg-peer)# q


soodar1(config-if)# wireguard peer soodar3
soodar1(config-wg-peer)# public-key 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
soodar1(config-wg-peer)# allowed-ip 10.0.0.30/32
soodar1(config-wg-peer)# endpoint 200.1.3.3 port 1300
soodar1(config-wg-peer)# end
soodar1# 

soodar2(config)# interface wireguard20  
soodar2(config-if)# wireguard peer soodar1
soodar2(config-wg-peer)# public-key A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
soodar2(config-wg-peer)# allowed-ip 10.0.0.10/32
soodar2(config-wg-peer)# endpoint 200.1.2.1 port 1100
soodar2(config-wg-peer)# q
soodar2(config-if)# wireguard peer soodar3
soodar2(config-wg-peer)# public-key 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
soodar2(config-wg-peer)# allowed-ip 10.0.0.30/32
soodar2(config-wg-peer)# endpoint 200.2.3.3 port 3100
soodar2# 

soodar3(config)# interface wireguard30
soodar3(config-if)# wireguard peer soodar1
soodar3(config-wg-peer)# public-key A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
soodar3(config-wg-peer)# allowed-ip 10.0.0.10/32
soodar3(config-wg-peer)# endpoint 200.1.2.1 port 1100
soodar3(config-wg-peer)# q
soodar3(config-if)# wireguard peer soodar2
soodar3(config-wg-peer)# public-key 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
soodar3(config-wg-peer)# allowed-ip 10.0.0.20/32
soodar3(config-wg-peer)# endpoint 200.2.3.2 port 2100
soodar3# 

شما می توانید در هر اینترفیس وایرگاردی که می سازید peerهای متعددی اضافه نمایید یعنی با ساخت یک اینترفیس تونل و peer های مختلف چندین تونل ایجاد نمایید . البته می توان برای هر peer نیز اینترفیس جداگانه ای ساخت .

تنظیم vrf برای ارتباط با peer اگر route مربوط به peer در vrf خاصی وجود دارد (در اینجا در default قرار دارد) باید در تنظیمات peer مشخص کنیم که از کدام vrf برای ارتباط با peer استفاده کند. این موضوع در تنظیمات peer با دستور vrf default مشخص شده است .

مشاهده وضعیت تونل

برای مشاهده وضعیت تونل های wirguard می توان از دستور زیر استفاده کرد.

soodar1# sh wireguard 
Wireguard 10
  Source: 200.1.2.1
  Key: wg10
  Public key: A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
  Port: 1212

  Peer soodar2:
    Public key: 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
    Persistent keepalive: 10
    VRF: pub
    Connected: True
    Allowed IPs:
     - 2.1.1.0/24

soodar1# 
Wireguard 10
  Mode: Routing
  Source: 200.1.2.1
  Key: wg10
  Public key: A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
  Port: 1100

  Peer soodar2:
    Public key: 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
    Endpoint: 200.1.2.2
    Current Endpoint: 200.1.2.2
    Current Source: 200.1.2.1
    Persistent keepalive: 10
    Port: 1200
    VRF: default
    Connected: True
    Allowed IPs:
     - 10.0.0.20/32

  Peer soodar3:
    Public key: 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
    Endpoint: 200.1.3.3
    Current Endpoint: 200.1.3.3
    Current Source: 200.1.3.1
    Persistent keepalive: 10
    Port: 1300
    VRF: default
    Connected: True
    Allowed IPs:
     - 10.0.0.30/32

Connected: True مشخص می کند که تونل وصل شده است .

در نمایش وضعیت اینترفیس هم اینترفیس wireguard در vrf مربوطه قرار دارد و up شده است .

soodar1(config)# show int vrf all brief 
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
pimreg          up      default         
ge0             up      default             200.1.2.1/24
ge1             up      default             200.1.3.1/24
ge2             up      default             1.1.1.1/24
wireguard10     up      default             10.0.0.10/32

soodar1# 

حذف تونل wireguard

برای حذف تونل wireguard دستور زیر را وارد کنید :

soodar1(config)# int wireguard10 
soodar1(config-if)# shutdown 
informational-ZEBRA: Interface wireguard10 has gone DOWN
soodar1(config-if)# q
soodar1(config)# no int wireguard10 
informational-ZEBRA: vrf-change for wireguard10 vrf_id 6 -> 0
soodar1(config)# 

فعال کردن log های wireguard

با دستور زیر می توانید Log های مربوط به wireguard را فعال کنید:

soodar1# debug wireguard event