WireGuard использует постоянные ключи шифрования (публичные и приватные) для установления доверия между узлами сети. Это отличает его от традиционных протоколов типа OpenVPN или IPSec, где используется сложный процесс обмена ключами.

     Примечание :

  • Приватный ключ (хранится локально);
  • Публичный ключ (обмениваются друг с другом);
  • WireGuard - stateless VPN протокол, поэтому и сервер, и клиент всегда будут UP в ожидании инициализации соединения от другой стороны;

  • WireGuard Server - не может быть инициатором сессии, только клиент.

Схема примера

В примере для того, чтобы соединение установилось, был выключен firewall на всех интерфейсах - ip firewall disable;

Для того, чтобы firewall пропускал трафик, нужно в security zone-pair разрешить UDP порты wireguard'а;

По-умолчанию на ESR порт для сервера 5000, а для клиента - 0. Пакеты, приходящие на WG-интерфейс, инкапсулируются в UDP.

Генерируем ключи x25519 для WireGuard

На ESR реализован механизм генерации ключей для WireGuard. Поэтому первым делом сгенерируем публичные ключи для взаимного обмена между устройствами и приватные ключи для использования в конфигурации устройства, которые будут храниться в crypto:private-key/ и crypto:public-key/ соответственно. 

R2-WG-Server:

crypto generate private-key x25519 filename wg_server.priv                                 - Генерируем приватный ключ сервера;
crypto generate public-key x25519 private-key wg_server.priv filename wg_server.pub        - Генерируем публичный ключ на основе приватного;

Публичный ключ сервера необходимо загрузить на клиента.

R1-WG-Client:

crypto generate private-key x25519 filename wg_client_1.priv                               - Генерируем приватный ключ клиента;
crypto generate public-key x25519 private-key wg_client_1.priv filename wg_client_1.pub    - Генерируем публичный ключ клиента на основе приватного;

Публичный ключ клиента необходимо загрузить на сервер.

Настраиваем Wireguard Server - Remote Access

Создаем object-group network:

R2-WG-Server(config)# object-group network Client_1                                          - Задаем имя object-group;                  
R2-WG-Server(config-object-group-network)#   ip prefix 12.1.1.0/24                           - Сеть локального адреса;
R2-WG-Server(config-object-group-network)#   ip prefix 10.10.1.0/24                          - Сеть которая на стороне клиента.
R2-WG-Server(config-object-group-network)# exit

После добавления сети в object-group network, появляется статический маршрут с nexthop wg.
R2-WG-Server# show ip rou                                                                    - Смотрим таблицу маршрутизации.
Codes: C - connected, S - static, R - RIP derived,
       O - OSPF derived, IA - OSPF inter area route,
       E1 - OSPF external type 1 route, E2 - OSPF external type 2 route,
       B - BGP derived, D - DHCP derived, K - kernel route, V - VRRP route,
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area,
       H - NHRP, * - FIB route
S     * 0.0.0.0/0          [1/0]             via 192.168.10.1 on gi1/0/1       [static 2025-06-05] 
C     * 13.13.13.0/24      [0/0]             dev gi1/0/3                       [direct 2025-06-05] 
C     * 12.1.1.0/24        [0/0]             dev wg0                           [direct 2025-06-05] 
C     * 192.168.10.0/24    [0/0]             dev gi1/0/1                       [direct 2025-06-05] 
S     * 10.10.1.0/24       [40/0]            dev wg0                           [static 2025-06-05] 

Создаем профиль WireGuard-сервера:

R2-WG-Server(config)# remote-access wireguard VPN                                            - Задаем имя профиля;
R2-WG-Server(config-wireguard-server)# mtu 1420                                              - Задаем mtu;
R2-WG-Server(config-wireguard-server)# port 43020                                            - Задаем порт для прослушивания;
R2-WG-Server(config-wireguard-server)# local-address 12.1.1.1/24                             - Задаем локальный адрес туннеля;
R2-WG-Server(config-wireguard-server)# ip firewall disable                                   - В данном примере не используется firewall, поэтому выключаем его;
R2-WG-Server(config-wireguard-server)# private-key wg_server.priv                            - Указываем приватный ключ сервера;
R2-WG-Server(config-wireguard-server)# peer 1                                                - Перейти к настройке разрешённых туннелей WireGuard-сервера;
R2-WG-Server(config-wireguard-peer)# access-addresses object-group Client_1                  - Указываем список адресов, которые будут работать внутри туннеля;
R2-WG-Server(config-wireguard-peer)# public-key client.pub                                   - Указываем публичный ключ клиента;
R2-WG-Server(config-wireguard-peer)# enable                                                  - Активируем пир;
R2-WG-Server(config-wireguard-peer)# exit                                                    - exit;
R2-WG-Server(config-wireguard-server)# enable                                                - Активируем RA профиль.

Настраиваем Wireguard Tunnel

Создаем object-group network:

R1-WG-client(config)# object-group network Client_1                                          - Задаем имя object-group;                  
R1-WG-client(config-object-group-network)#   ip prefix 12.1.1.0/24                           - Сеть локального адреса;
R1-WG-client(config-object-group-network)#   ip prefix 13.13.13.0/24                         - Сеть которая на стороне сервера.
R1-WG-client(config-object-group-network)# exit

После добавления сети в object-group network, появляется статический маршрут с nexthop wg.
R1-WG-client# show ip rou                                                                    - Смотрим таблицу маршрутизации.
Codes: C - connected, S - static, R - RIP derived,
       O - OSPF derived, IA - OSPF inter area route,
       E1 - OSPF external type 1 route, E2 - OSPF external type 2 route,
       B - BGP derived, D - DHCP derived, K - kernel route, V - VRRP route,
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area,
       H - NHRP, * - FIB route
S     * 0.0.0.0/0          [1/0]             via 192.168.1.1 on gi1/0/1        [static 2025-06-05] 
S     * 13.13.13.0/24      [40/0]            dev wg1                           [static 2025-06-05] 
C     * 12.1.1.0/24        [0/0]             dev wg1                           [direct 2025-06-05] 
C     * 10.10.1.0/24       [0/0]             dev gi1/0/3                       [direct 2025-06-05] 
C     * 192.168.1.0/24     [0/0]             dev gi1/0/1                       [direct 2025-06-05] 

Создаем WireGuard-туннель и переходим в режим его конфигурирования.

R1-WG-client(config)# tunnel wireguard 1                                                     - Задаем имя профиля;
R1-WG-client(config-wireguard-server)# mtu 1420                                              - Задаем mtu;
R1-WG-client(config-wireguard-server)# local-address 12.1.1.2/24                             - Задаем локальный адрес туннеля;
R1-WG-client(config-wireguard-server)# ip firewall disable                                   - В данном примере не используется firewall, поэтому выключаем его;
R1-WG-client(config-wireguard-server)# private-key wg_client_1.priv                          - Задаем приватный ключ клиента;
R1-WG-client(config-wireguard-server)# peer 1                                                - Перейти к настройке разрешенных пиров;
R1-WG-сlient(config-wireguard-peer)# access-addresses object-group Client_1                  - Указываем список адресов, которые будут работать внутри туннеля;
R1-WG-сlient(config-wireguard-peer)# remote address 192.168.10.2                             - Указываем IP-адрес удаленного пира;
R1-WG-сlient(config-wireguard-peer)# remote port 43020                                       - Указываем UDP-порт удаленного пира;
R1-WG-сlient(config-wireguard-peer)# public-key server.pub                                   - Указываем публичный ключ сервера;
R1-WG-сlient(config-wireguard-peer)# enable                                                  - Активируем пир;	
R1-WG-сlient(config-wireguard-peer)# exit                                                    - exit;
R1-WG-client(config-wireguard-server)# enable                                                - Активируем туннель.

Диагностика со стороны сервера

R2-WG-Server# show remote-access configuration wireguard VPN                                 - Просмотр конфигурации WireGuard-сервера;
State:                     Enabled
VRF:                       --
Description:               --
Port:                      43020
MTU:                       1420
Local addres:              12.1.1.1/24
Security zone:             --
Private key:               wg_server.priv
Peer:                      1
 State:                    Enabled
 Description:              --
 Public key:               client.pub
 Access-addresses:         --
DNS servers:               --

R2-WG-Server# show remote-access counters wireguard server                                   - Просмотр счетчиков.
User            IP-address              Packets recv   Bytes recv   Err recv     MC recv      
-------------   ---------------------   ------------   ----------   ----------   ----------   
peer 1          12.1.1.0, ...           --             277836       --           --           

User            IP-address              Packets sent   Bytes sent   Err sent     
-------------   ---------------------   ------------   ----------   ----------   
peer 1          12.1.1.0, ...           --             277220       --       

Диагностика со стороны клиента

R1-WG-client# show tunnels counters wireguard 1                                              - Просмотр счетчиков;
Tunnel 'wireguard 1' counters:
    Packets received:                 2172
    Bytes received:                   277220
    Dropped on receive:               0
    Receive errors:                   0
    Multicasts received:              0
    Receive length errors:            0
    Receive buffer overflow errors:   0
    Receive CRC errors:               0
    Receive frame errors:             0
    Receive FIFO errors:              0
    Receive missed errors:            0
    Receive compressed:               0
    Packets transmitted:              2179
    Bytes transmitted:                277836
    Dropped on transmit:              0
    Transmit errors:                  0
    Transmit aborted errors:          0
    Transmit carrier errors:          0
    Transmit FIFO errors:             0
    Transmit heartbeat errors:        0
    Transmit window errors:           0
    Transmit comressed:               0
    Collisions:                       0

R1-WG-client# show tunnels configuration wireguard 1                                       - Просмотр конфигурации WireGuard-туннеля;
State:                   Enabled
Description:             --
VRF:                     --
Security zone:           --
IP address:              12.1.1.2/24
Port:                    0
MTU:                     1420

R1-WG-client# monitor wireguard 1 packets 4                                                - Монитор трафика
04:47:02.313266 ip: (tos 0x0, ttl 64, id 42452, offset 0, flags [DF], proto ICMP (1), length 84)
    12.1.1.1 > 12.1.1.2: ICMP echo request, id 1, seq 1, length 64
04:47:02.313373 ip: (tos 0x0, ttl 64, id 36092, offset 0, flags [none], proto ICMP (1), length 84)
    12.1.1.2 > 12.1.1.1: ICMP echo reply, id 1, seq 1, length 64
04:47:03.312672 ip: (tos 0x0, ttl 64, id 43327, offset 0, flags [DF], proto ICMP (1), length 84)
    12.1.1.1 > 12.1.1.2: ICMP echo request, id 1, seq 2, length 64
04:47:03.312705 ip: (tos 0x0, ttl 64, id 36974, offset 0, flags [none], proto ICMP (1), length 84)
    12.1.1.2 > 12.1.1.1: ICMP echo reply, id 1, seq 2, length 64


  • Нет меток