wireguard normal
آموزش راه اندازی تونل wireguard در سودار
فرض کنید در سناریو زیر قصد داریم دو تونل wireguard بزنیم که دو شبکه پشتی هر روتر در vrf جداگانه قرار داشته باشند و هر کدام از تونل مربوط به خود برای ارتباط استفاده کنند و هیچ ارتباطی به شبکه دیگر نتواند برقرار کند :
ابتدا در هر روتر ۳ vrf جداگانه می سازیم . یک vrf برای شبکه بین روتر ها (اینترنت یا public) و برای هر شبکه پشت روتر هم یک vrf جداگانه می سازیم :
soodar1(config)# vrf pub
soodar1(config)# vrf green
soodar1(config)# vrf red
soodar2(config)# vrf pub
soodar2(config)# vrf green
soodar2(config)# vrf red
اینترفیس ها را در vrf مربوطه قرار می دهیم (در اینجا pub برای شبکه public و دو vrf دیگر برای شبکه private استفاده می شوند):
soodar1(config)# interface ge0
soodar1(config-if)# ip vrf forwarding pub
soodar1(config-if)# ip address 200.1.2.1/24
soodar1(config-if)# q
soodar1(config)# interface ge1
soodar1(config-if)# ip vrf forwarding green
soodar1(config-if)# ip address 1.1.1.1/24
soodar1(config-if)# q
soodar1(config)# interface ge2
soodar1(config-if)# ip vrf forwarding red
soodar1(config-if)# ip address 1.2.1.1/24
soodar1(config-if)# q
soodar2(config)# interface ge0
soodar2(config-if)# ip vrf forwarding pub
soodar2(config-if)# ip address 200.1.2.2/24
soodar2(config-if)# q
soodar2(config)# interface ge1
soodar2(config-if)# ip vrf forwarding green
soodar2(config-if)# ip address 2.1.1.1/24
soodar2(config-if)# q
soodar2(config)# interface ge2
soodar2(config-if)# ip vrf forwarding red
soodar2(config-if)# ip address 2.2.1.1/24
soodar2(config-if)# q
ساخت تونل wireguard
در این سناریو ما :
نیاز به دو تونل wg داریم تا دو شبکه متفاوت در vrf جداگانه را به هم وصل کند .
هر اینترفیس تونل باید در یک vrf قرار بگیرد .
باید route هایی که از طریق هر تونل عبور کنند را مشخص کنیم
به صورت پیش فرض از الگوریتم استاندارد خود wireguard برای رمزنگاری استفاده می شود اما در صورت نیاز می توان از الگوریتم بومی نیز استفاده کرد .
ساخت کلید wg
در ابتدا برای هر تونل یک کلید wg تولید می کنیم .
نکته
دقت شود که کلید حتما باید از نوع x25519 انتخاب گردد.
soodar1(config)# crypto key generate x25519 label wg10
informational-ZEBRA: new X25519 key wg10 generated
soodar1(config)# crypto key generate x25519 label wg11
informational-ZEBRA: new X25519 key wg11 generated
soodar1(config-if)# do sh crypto key wg10
Keypair Label: wg10
Algorithm: X25519
Public key: A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
soodar1(config-if)# do sh crypto key wg11
Keypair Label: wg11
Algorithm: X25519
Public key: 4161E811D7BEE4AA61E2079FAE1A76ED03E5F21CEC38B1A70D9C2781247D7D5A
soodar1(config-if)#
soodar2(config)# crypto key generate x25519 label wg20
informational-ZEBRA: new X25519 key wg20 generated
soodar2(config)# crypto key generate x25519 label wg21
informational-ZEBRA: new X25519 key wg21 generated
soodar2(config)# do sh crypto key wg20
Keypair Label: wg20
Algorithm: X25519
Public key: 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
soodar2(config)# do sh crypto key wg21
Keypair Label: wg21
Algorithm: X25519
Public key: 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
ساخت اینترفیس wireguard
اینترفیس تونل باید در vrf ی قرار بگیرد که قرار است ترافیک شبکه private مربوط به همان vrf را از خود عبور دهد (ge1 , 1.1.1.1/24)
کلیدی که قرار است برای این تونل استفاده شود را مشخص می کنیم . public key این کلید در تنظیمات تونل طرف مقابل استفاده می شود
پورتی که روی آن گوش می کنیم و بسته ها را با آن پورت مقصد قبول می کنیم را هم مشخص می کنیم این پورت در طرف مقابل تونل در بخشpeer ها باید مد نظر گرفته شود
یک ip هم به اینترفیس اختصاص می دهیم
soodar1(config)# interface wireguard10
soodar1(config-if)# ip vrf forwarding green
soodar1(config-if)# wireguard source 200.1.2.1
soodar1(config-if)# wireguard private-key wg10
soodar1(config-if)# wireguard port 1212
soodar1(config-if)# ip address 10.0.12.12/32
soodar1(config-if)# end
soodar1#
soodar2(config)# interface wireguard20
soodar2(config-if)# ip vrf forwarding green
soodar2(config-if)# wireguard source 200.1.2.2
soodar2(config-if)# wireguard private-key wg20
soodar2(config-if)# wireguard port 2121
soodar2(config-if)# ip address 10.0.12.21/32
soodar2(config-if)# q
soodar2(config)#
افزودن peer
اطلاعات مربوط به طرف مقابل تونل را را در این بخش مشخص می کنیم .
ابتدا یک نام برای peer مشخص می کنیم .
public-key مربوط به peer را که قبلا در peer اضافه شده است را تنظیم می کنیم (با دستور sh crypto key KEYNAME می توان public key کلید را مشاهده کرد) .
آدرس شبکه هایی که قرار است از این تونل route شود و همچنین از این تونل به مقصد ما پذیرفته شود را در allowed ip اضافه می کنیم .
نکته
دقت شود اگر بسته ای از طریق تونل به هر نحوی به ما برسد اما آن آدرس جزو allowed ip های ما نباشد، drop خواهد شد .
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 2121
soodar1(config-wg-peer)# allowed-ip 2.1.1.0/24
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)# endpoint 200.1.2.1 port 1212
soodar2(config-wg-peer)# allowed-ip 1.1.1.0/24
soodar2(config-wg-peer)# end
soodar2#
مشاهده وضعیت تونل
برای مشاهده وضعیت تونل های 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#
توجه
Connected: True مشخص می کند که تونل وصل شده است .
در نمایش وضعیت اینترفیس هم اینترفیس wireguard در vrf مربوطه قرار دارد و up شده است .
soodar1(config)# show int vrf all brief
Interface Status VRF Addresses
--------- ------ --- ---------
pimreg up default
Interface Status VRF Addresses
--------- ------ --- ---------
ge1 up green 1.1.1.1/24
green up green
pimreg300 up green
wireguard10 up green 10.0.0.1/32
Interface Status VRF Addresses
--------- ------ --- ---------
ge0 up pub 200.1.2.1/24
pub up pub
Interface Status VRF Addresses
--------- ------ --- ---------
ge2 up red 1.2.1.1/24
red up red
soodar1#
افزودن تونل دوم
تنظیم تونل دوم هم مانند تونل اول اضافه می شود توجه شود که در تونل جدید باید از کلید های جدید استفاده شود :
soodar1(config)# interface wireguard11
soodar1(config-if)# ip vrf forwarding red
soodar1(config-if)# wireguard source 200.1.2.1
soodar1(config-if)# wireguard private-key wg11
soodar1(config-if)# wireguard port 4040
soodar1(config-if)# ip address 10.0.120.120/32
soodar1(config-if)# wireguard peer soodar2
soodar1(config-wg-peer)# public-key 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
soodar1(config-wg-peer)# allowed-ip 2.2.1.0/24
soodar1(config-wg-peer)# vrf pub
soodar1(config-if)# end
soodar1#
soodar2(config)# interface wireguard21
soodar2(config-if)# ip vrf forwarding red
soodar2(config-if)# wireguard source 200.1.2.2
soodar2(config-if)# wireguard private-key wg21
soodar2(config-if)# wireguard port 6060
soodar2(config-if)# ip address 10.0.120.210/32
soodar2(config-if)# wireguard peer soodar1
soodar2(config-wg-peer)# public-key 4161E811D7BEE4AA61E2079FAE1A76ED03E5F21CEC38B1A70D9C2781247D7D5A
soodar2(config-wg-peer)# allowed-ip 1.2.1.0/24
soodar2(config-wg-peer)# endpoint 200.1.2.1 port 4040
soodar2(config-wg-peer)# vrf pub
soodar2(config-wg-peer)# end
soodar2#
توجه
تنظیم endpoint در دو طرف تونل الزامی نیست و می توان تنها در یک طرف تونل آن را تنظیم کرد .
نمایش تنظیمات روتر ها
soodar1# show running-config
hostname soodar1
no zebra nexthop kernel enable
security passwords min-length 8
log syslog
log monitor
no banner motd
!
!
vrf pub
!
vrf green
!
vrf red
!
interface ge0 vrf pub
ip vrf forwarding pub
no shutdown
ip address 200.1.2.1/24
!
interface pub vrf pub
no ip address
no shutdown
!
interface ge1 vrf green
ip vrf forwarding green
no shutdown
ip address 1.1.1.1/24
!
interface green vrf green
no ip address
no shutdown
!
interface wireguard10 vrf green
ip vrf forwarding green
wireguard source 200.1.2.1
wireguard private-key wg10
wireguard port 1212
wireguard peer soodar2
public-key 045CB4AD197FD8C60B8AA0C966B625B3209570DFC42039CD9EC8983B6E818831
vrf pub
allowed-ip 2.1.1.0/24
no shutdown
ip address 10.0.12.12/32
!
interface ge2 vrf red
ip vrf forwarding red
no shutdown
ip address 1.2.1.1/24
!
interface red vrf red
no ip address
no shutdown
!
interface wireguard11 vrf red
ip vrf forwarding red
wireguard source 200.1.2.1
wireguard private-key wg11
wireguard port 4040
wireguard peer soodar2
public-key 10295CB9E3CE6AF124630E8351B5C46E0F54C107346F679BCEE9FAA970F16300
vrf pub
allowed-ip 2.2.1.0/24
no shutdown
ip address 10.0.120.120/32
!
line vty
!
end
soodar1#
soodar2# show running-config
hostname soodar2
no zebra nexthop kernel enable
security passwords min-length 8
log syslog
log monitor
no banner motd
!
!
vrf pub
!
vrf green
!
vrf red
!
interface ge0 vrf pub
ip vrf forwarding pub
no shutdown
ip address 200.1.2.2/24
!
interface pub vrf pub
no ip address
no shutdown
!
interface ge1 vrf green
ip vrf forwarding green
no shutdown
ip address 2.1.1.1/24
!
interface green vrf green
no ip address
no shutdown
!
interface wireguard20 vrf green
ip vrf forwarding green
wireguard source 200.1.2.2
wireguard private-key wg20
wireguard port 2121
wireguard peer soodar1
public-key A1D71640B325F3275C4C92431EF7A41DF5F25EF010FA7FAEB5F1214A34F80D76
endpoint 200.1.2.1 port 1212
vrf pub
allowed-ip 1.1.1.0/24
no shutdown
ip address 10.0.12.21/32
!
interface ge2 vrf red
ip vrf forwarding red
no shutdown
ip address 2.2.1.1/24
!
interface red vrf red
no ip address
no shutdown
!
interface wireguard21 vrf red
ip vrf forwarding red
wireguard source 200.1.2.2
wireguard private-key wg21
wireguard port 6060
wireguard peer soodar1
public-key 4161E811D7BEE4AA61E2079FAE1A76ED03E5F21CEC38B1A70D9C2781247D7D5A
endpoint 200.1.2.1 port 4040
vrf pub
allowed-ip 1.2.1.0/24
no shutdown
ip address 10.0.120.210/32
!
line vty
!
end
soodar2#
حذف تونل 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