...
Блок кода |
---|
esr# show tunnels configuration l2tp |
Настройка клиента удаленного доступа по протоколу WireGuard
WireGuard — простой, быстрый и современный VPN, использующий современную криптографию (ChaCha20, Poly1305, Curve25519, BLAKE2s, SipHash24, HKDF). WireGuard надежно инкапсулирует IP-пакеты поверх UDP. В основе WireGuard лежит концепция под названием «Маршрутизация криптоключей», которая работает путем связывания открытых ключей со списком IP-адресов туннеля, которым разрешено находиться внутри туннеля. Каждый сетевой интерфейс имеет закрытый ключ и список пиров. У каждого узла есть открытый ключ. Открытые ключи короткие и простые и используются узлами для аутентификации друг друга. Их можно передавать для использования в файлах конфигурации любым внешним методом, аналогично тому, как можно отправить открытый ключ SSH для доступа к серверу.
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Создать WireGuard-туннель и перейти в режим его конфигурирования. | esr(config)# tunnel wireguard <INDEX> | <INDEX> – идентификатор туннеля в диапазоне: [1..16]. |
2 | Указать экземпляр VRF, в котором будет работать данный Wireguard-туннель (не обязательно). | esr(config-wireguard)# ip vrf forwarding <VRF> | <VRF> – имя VRF, задаётся строкой до 31 символа. |
3 | Указать описание конфигурируемого туннеля (не обязательно). | esr(config-wireguard)# description <DESCRIPTION> | <DESCRIPTION> – описание туннеля, задается строкой до 255 символов. |
4 | Включить Wireguard-туннель в зону безопасности и настроить правила взаимодействия между зонами или отключить firewall (см. раздел Конфигурирование Firewall). | esr(config-wireguard)# security-zone <NAME> | <NAME> – имя зоны безопасности, задаётся строкой до 31 символа. |
esr(config-wireguard)# ip firewall disable | |||
5 | Определить статический IP-адрес конфигурируемого туннеля (обязательно). | esr(config-wireguard)# ip address <ADDR/LEN> | <ADDR/LEN> – IP-адрес и длина маски подсети, задаётся в виде AAA.BBB.CCC.DDD/EE, где каждая часть AAA – DDD принимает значения [0..255] и EE принимает значения [1..32]. |
6 | Задать MTU (не обязательно). | esr(config-wireguard)# mtu <MTU> | <MTU> – 552–10000. Значение по умолчанию: 1500. |
7 | Указать приватный ключ WireGuard-клиента (обязательно). | esr(config-wireguard)# private-key <NAME> | <NAME> – имя приватного ключа, задается строкой до 31 символа. |
8 | Перейти к настройке разрешенных пиров | esr(config-wireguard)# peer <COUNT> | <COUNT> – номер соответствующего пира, принимает значения [1..16]. |
9 | Указать описание пира (не обязательно). | esr(config-wireguard-tunnel-peer)# description <DESCRIPTION> | <DESCRIPTION> – описание туннеля, задается строкой до 255 символов. |
10 | Задать значение keepalive (не обязательно). | esr(config-wireguard-tunnel-peer)# keepalive timeout <SEC> | <SEC> – количество секунд, принимает значения [1..32767]. |
11 | Указать публичный ключ WireGuard-пира (обязательно). | esr(config-wireguard-tunnel-peer)# public-key <NAME> | <NAME> – имя приватного ключа, задается строкой до 31 символа. |
12 | Указать IP-адрес удаленного пира (обязательно). | esr(config-wireguard-tunnel-peer)# remote address <ADDR> | <ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
13 | Указать UDP-порт удаленного пира (обязательно) | esr(config-wireguard-tunnel-peer)# remote port <PORT> | <PORT>– UDP-порт, принимает значения [1..65535]. |
14 | Указать список IP-адресов, которым будет разрешено находиться внутри туннеля (обязательно). | esr(config-wireguard-tunnel-peer)# subnet <OBJ-GROUPNETWORK-NAME> | <OBJ-GROUP-NETWORKNAME> – имя профиля IPадресов, содержащего префиксы подсетей назначения, задается строкой до 31 символа. |
15 | Активировать пир (обязательно). | esr(config-wireguard-tunnel-peer)# enable | |
16 | Активировать туннель. | esr(config-wireguard)# enable | |
17 | Задать интервал времени, за который усредняется статистика о нагрузке на туннель (не обязательно). | esr(config-wireguard)# load-average <TIME> | <TIME> – интервал в секундах, принимает значения [5..150] Значение по умолчанию: 5. |
18 | Включить запись статистики использования текущего туннеля (не обязательно). | esr(config-wireguard)# history statistics |
Пример настройки
Задача:
Настроить WireGuard-клиента на маршрутизаторе:
- адресация внутри туннеля – 10.10.10.0/24;
- порт подключения к серверу – 43020;
- адрес WireGuard-клиента внутри туннеля – 10.10.10.2;
- адрес удаленного сервера – 178.47.26.133.
Drawio | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Решение:
Предварительно нужно выполнить следующие действия:
- загрузить на 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-tunnel-peer)# public-key server.pub
esr(config-wireguard-tunnel-peer)# subnet server_wg
esr(config-wireguard-tunnel-peer)# remote address 178.47.26.133
esr(config-wireguard-tunnel-peer)# remote port 43020 |
Включим пир и WireGuard-туннель:
Блок кода |
---|
esr(config-wireguard-tunnel-peer)# enable
esr(config-wireguard-tunnel-peer)# exit
esr(config-wireguard)# enable |
Счётчики сессий WireGuard-туннеля можно посмотреть командой:
Блок кода |
---|
esr# show tunnels counters wireguard 1 |
Scroll Pagebreak |
---|
Очистить счётчики сессий WireGuard-туннеля можно командой:
Блок кода |
---|
esr# clear tunnels counters wireguard 1 |
Конфигурацию WireGuard-туннеля можно посмотреть командой:
Блок кода |
---|
esr# show tunnels configuration wireguard 1 |