...
- адресация внутри туннеля – 10110.100.100.0/2430;
- порт подключения к серверу – 43020;
- адрес WireGuard-клиента внутри туннеля – 10.10.10туннеля – 110.0.0.2;
- адрес удаленного сервера – 178.47.26.133.
...
- сервера – 212.0.50.9.
Решение:
Создадим ключевую пару 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-туннеля можно посмотреть командой:
...
