Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

  • адресация внутри туннеля – 10110.100.100.0/2430;
  • порт подключения к серверу – 43020;
  • адрес WireGuard-клиента внутри туннеля – 10.10.10туннеля – 110.0.0.2;
  • адрес удаленного сервера – 178.47.26.133.

...

  • сервера – 212.0.50.9.

Image Added

Решение:

Создадим ключевую пару x25519, которая будет использоваться в работе WireGuard

Решение:

Предварительно нужно выполнить следующие действия:

  • загрузить на ESR приватный ключ клиента и публичный ключ сервера;
  • создать object-group network, в которой будет указан список IP-адресов, которым будет разрешено проходить через туннель.

Импортируем по tftp приватный ключ клиента и публичный ключ сервера:

Блок кода
esr# copy tftp://192.168.16.10:/client.priv crypto:private-key/client.priv
esr# copy tftp://192.168.16.10:/server.pub crypto:public-key/server.pub

Создадим object-group network, в которой будет указан список IP-адресов, которым будет разрешено проходить через туннель:

Блок кода
esr(config)# object-group network server_wg
esr(config-object-group-network)# ip address-range 10.10.10.1

Создадим WireGuard-туннель, зададим локальный адрес и выставим MTU:

Блок кода
esr(config)# tunnel wireguard 1
esr(config-wireguard)# ip address 10.10.10.2/24
esr(config-wireguard)# mtu 1420

Укажем приватный ключ клиента и отключим Firewall:

Блок кода
esr(config-wireguard)# private-key client.priv
esr(config-wireguard)# ip firewall disable

Перейдем в настройки разрешённого пира, укажем связку публичного ключа сервера и разрешённого IP-адреса, а также укажем адрес и порт удаленного сервера:

Блок кода
esr(config-wireguard)# peer 1
esr(config-wireguard-peer)# public-key server.pub
esr(config-wireguard-peer)# access-addresses object-group server_wg
esr(config-wireguard-peer)# remote address 178.47.26.133
esr(config-wireguard-peer)# remote port 43020

Scroll Pagebreak

Включим пир и WireGuard-туннель:

crypto generate private-key x25519 filename wg_client_private.key
esr# crypto generate public-key x25519 private-key wg_client_private.key filename wg_client_public.key

Для успешной работы необходимо совершить обмен открытыми криптографическими ключами с удаленной стороной любым удобным способом. На данном этапе настройки открытым криптографическим ключом является файл с именем wg_server_public.key, который хранится в crypto:public-key:

Блок кода
esr# show crypto certificates public-key
File name                                                                                                       
--------------------------------------------------------------------------------------------------------------  
wg_client_public.key

Создадим object-group network, в которой будет указан список IP-адресов, которым будет разрешено проходить через туннель:

Блок кода
esr(config)# object-group network WG_SERVERS
esr(config-object-group-network)# ip address-range 10.50.0.10-10.50.0.15

Создадим WireGuard-туннель, зададим локальный адрес и выставим MTU:

Блок кода
esr(config)# tunnel wireguard 1
esr(config-wireguard)# ip address 110.0.0.2/30
esr(config-wireguard)# mtu 1420

Укажем приватный ключ клиента и отключим Firewall:

Блок кода
esr(config-wireguard)# private-key wg_client_private.key
esr(config-wireguard)# ip firewall disable

Перейдем в настройки разрешённого пира, укажем связку публичного ключа сервера и разрешённого IP-адреса, а также укажем адрес и порт удаленного сервера:

Блок кода
esr(config-wireguard)# peer 1
esr(config-wireguard-peer)# public-key wg_server_public.key
esr(config-wireguard-peer)# access-addresses object-group WG_SERVERS 
esr(config-wireguard-peer)# remote address 212.0.50.9
esr(config-wireguard-peer)# remote port 43020

Для усиления криптостойкости установим заранее известный симметричный ключ:

Блок кода
esr(config-wireguard-peer)# pre-shared-key base64 r4u48oYTouJ+j1GrAtVWRIZqlQ2YLjEZEvc+Yttc6R4=

Scroll Pagebreak

Включим пир и WireGuard-туннель:

Блок кода
esr(config-wireguard-peer)# enable
esr(config-wireguard-peer)# exit
esr(config-wireguard)# enable

Попробуем отправить ICMP с рабочего ПК сотрудника (10.40.0.10) на удаленный сервер (10.50.0.10):

Блок кода
esr@client:~$ ping 10.50.0.10 -c 4
PING 10.50.0.10 (10.50.0.10) 56(84) bytes of data.
64 bytes from 10.50.0.10: icmp_seq=1 ttl=62 time=1.85 ms
64 bytes from 10.50.0.10: icmp_seq=2 ttl=62 time=1.47 ms
64 bytes from 10.50.0.10: icmp_seq=3 ttl=62 time=1.97 ms
64 bytes from 10.50.0.10: icmp_seq=4 ttl=62 time=1.72 ms

--- 10.50.0.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.465/1.753/1.974/0.188 ms

С помощью команды monitor, можно убедиться, что ICMP-пакеты проходят через wireguard туннель:

Блок кода
esr# monitor wireguard 1
06:54:36.536109 ip: (tos 0x0, ttl 63, id 22999, offset 0, flags [DF], proto ICMP (1), length 84)
    10.40.0.10 > 10.50.0.10: ICMP echo request, id 1568, seq 12, length 64
06:54:36.537358 ip: (tos 0x0, ttl 63, id 32883, offset 0, flags [none], proto ICMP (1), length 84)
    10.50.0.10 > 10.40.0.10: ICMP echo reply, id 1568, seq 12, length 64


esr# monitor gigabitethernet 1/0/1
06:54:36.536109 50:1f:e6:04:51:00 > 50:dd:a1:04:50:00, ethertype IPv4 (0x0800), length 170: (tos 0x0, ttl 64, id 21376, offset 0, flags [none], proto UDP (17), length 156)
    212.0.50.10.40548 > 212.0.50.9.43020: UDP, length 128
06:54:36.537358 50:dd:a1:04:50:00 > 50:1f:e6:04:51:00, ethertype IPv4 (0x0800), length 170: (tos 0x0, ttl 64, id 41730, offset 0, flags [none], proto UDP (17), length 156)
    212.0.50.9.43020 > 212.0.50.10.40548: UDP, length 128
Блок кода
esr(config-wireguard-peer)# enable
esr(config-wireguard-peer)# exit
esr(config-wireguard)# enable

Счётчики сессий WireGuard-туннеля можно посмотреть командой:

...