wireguard-routing
آموزش راه اندازی تونل wireguard-routing در سودار
پروتکل wireguard فقط static route را پشتیبانی می کند و شما با اضافه کردن allowed-ip ها در تونل route های استاتیک از طریق تونل وایرگارد ایجاد می کنید . در روتر سودار امکان اجرای ospf در وایرگارد و در واقع Dynamic routing در تونل وایرگارد فراهم شده است .
فرض کنید در سناریو زیر قصد داریم بین روتر ها تونل وایرگارد در حالت routing ایجاد کنیم به نحوی که ارتباط شبکه های پشتی روتر از طریق تونل برقرار شود :
در این سناریو ما :
در هر روتر یک تونل 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
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