...
Шаг | Описание | Команда | Ключи |
|---|---|---|---|
1 | Создать профиль OpenVPN-сервера. | esr(config)# remote-access openvpn <NAME> | <NAME> – имя профиля OpenVPN-сервера, задаётся строкой до 31 символа. |
2 | Указать описание конфигурируемого сервера (необязательно). | esr(config-openvpn-server)# description <DESCRIPTION> | <DESCRIPTION> – описание OpenVPN-сервера, задаётся строкой до 255 символов. |
3 | Указать подсеть, из которой выдаются IP-адреса пользователям (только для tunnel ip). | esr(config-openvpn-server)# network <ADDR/LEN> | <ADDR/LEN> – адрес подсети, имеет следующий формат: AAA.BBB.CCC.DDD/EE – IP-адрес подсети с маской в форме префикса, где AAA-DDD принимают значения [0..255] и EE принимает значения [16..29]. |
4 | Указать инкапсулируемый протокол. | esr(config-openvpn-server)# protocol <PROTOCOL> | <PROTOCOL> – тип инкапсуляции, возможные значения:
|
5 | Определить тип соединения с частной сетью через OpenVPN-сервер. | esr(config-openvpn-server)# tunnel <TYPE> | <TYPE> – инкапсулирующий протокол, принимает значения:
|
6 | Указать список IP-адресов, из которого OpenVPN-сервером выдаются динамические IP-адреса удаленным пользователям в режиме L2 (только для tunnel ethernet). | esr(config-openvpn-server)# address-range <FROM-ADDR>-<TO-ADDR> | <FROM-ADDR> – начальный IP-адрес диапазона, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; <TO-ADDR> – конечный IP-адрес диапазона, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
7 | Включить клиентские соединения по OpenVPN в L2-домен (только для tunnel ethernet). | esr(config-openvpn-server)# bridge-group <BRIDGE-ID> | <BRIDGE-ID> – идентификационный номер моста. |
8 | Указать сертификаты и ключи. | esr(config-openvpn-server)# crypto <CERTIFICATE-TYPE> <NAME> | <CERTIFICATE-TYPE> – тип сертификата или ключа, может принимать следующие значения:
<NAME> – имя сертификата или ключа, задаётся строкой до 31 символа. |
| 9 | Указать контейнер PKCS12 (необязательно.) Примечание: контейнер обязательно должен включать в себя сертификат удостоверяющего центра, публичный сертификат сервера и приватный ключ сервера. Применение сертификатов или контейнера является взаимоисключающим, т. е. необходимо указывать или сертификаты, или контейнер. | esr(config-openvpn-server)# crypto pfx <NAME> [password ascii-text <PASSWORD>] | <NAME> – имя PKCS12-контейнера, задаётся строкой до 31 символа. <PASSWORD> – пароль от PKCS12-контейнера. |
10 | Выбрать алгоритм шифрования, используемый при передачи данных. | esr(config-openvpn-server)# encryption algorithm <ALGORITHM> | <ALGORITHM> – идентификатор протокола шифрования, принимает значения: 3des,blowfish128, aes128. |
11 | Включить OpenVPN-сервер в зону безопасности и настроить правила взаимодействия между зонами (см. раздел Конфигурирование Firewall). | esr(config-openvpn-server)# security-zone <NAME> | <NAME> – имя зоны безопасности, задаётся строкой до 31 символа. |
12 | Определить дополнительные параметры для указанного пользователя OpenVPN-сервера (при использовании локальной базы для аутентификации пользователей). | esr(config-openvpn-server)# username < NAME > | <NAME> – имя пользователя, задаётся строкой до 31 символа. |
13 | Определить подсеть для указанного пользователя OpenVPN-сервера. | esr(config-openvpn-user)# subnet <ADDR/LEN> | <ADDR/LEN> – адрес подсети, имеет следующий формат: |
14 | Определить статический IP-адрес для указанного пользователя OpenVPN-сервера. | esr(config-openvpn-user)# ip address <ADDR> | <ADDR> – адрес имеет следующий формат: |
15 | Включить профиль OpenVPN-сервера. | esr(config-openvpn-server)# enable | |
16 | Включить блокировку передачи данных между клиентами (необязательно). | esr(config-openvpn-server)# client-isolation | |
17 | Устанавливается максимальное количество одновременных пользовательских сессий (необязательно). | esr(config-openvpn-server)# client-max <VALUE> | <VALUE> – максимальное количество пользователей, принимает значения [1..65535]. |
18 | Включается механизм сжатия передаваемых данных между клиентами и сервером OpenVPN (необязательно). | esr(config-openvpn-server)# compression | |
19 | Указать список DNS-серверов, которые будут использовать удаленные пользователи (необязательно). | esr(config-openvpn-server)# dns-server <ADDR> | <ADDR> – IP-адрес DNS-сервера, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]; |
20 | Указать TCP-/UDP-порт, который будет прослушиваться OpenVPN-сервером (необязательно). | esr(config-openvpn-server)# port <PORT> | <PORT> – TCP-/UDP-порт, принимает значения [1..65535]. Значение по умолчанию: 1194. |
21 | Включить анонсирование маршрута по умолчанию для OpenVPN-соединений, что приводит к замене маршрута по умолчанию на клиентской стороне (необязательно). | esr(config-openvpn-server)# redirect-gateway | |
22 | Включить анонсирование указанных подсетей, шлюзом является IP-адрес OpenVPN-сервера (необязательно). | esr(config-openvpn-server)# route <ADDR/LEN> | <ADDR/LEN> – адрес подсети, имеет следующий формат: AAA.BBB.CCC.DDD/EE – IP-адрес подсети с маской в форме префикса, где AAA-DDD принимают значения [0..255] и EE принимает значения [1..32]. |
23 | Указать временной интервал, по истечению которого встречная сторона считается недоступной (необязательно). | esr(config-openvpn-server)# timers holdtime <TIME> | <TIME> – время в секундах, принимает значения [2..65535]. Значение по умолчанию: 120. |
24 | Указать временной интервал, по истечению которого идет проверка соединения со встречной стороной (необязательно). | esr(config-openvpn-server)# timers keepalive <TIME> | <TIME> – время в секундах, принимает значения [1..65535]. Значение по умолчанию: 10. |
25 | Разрешить подключаться к OpenVPN-серверу нескольким пользователям с одним сертификатом. | esr(config-openvpn-server)# duplicate-cn | |
26 | Указать список WINS-серверов, которые будут использовать удаленные пользователи (необязательно). | esr(config-openvpn-server)# wins-server <ADDR> | <ADDR> – IP-адрес WINS-сервера, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
| 27 | Изменить алгоритм аутентификации OpenVPN-клиентов (необязательно). | esr(config-openvpn-server)# authentication algorithm <ALGORITHM> | <ALGORITHM> – алгоритм аутентификации:
Значение по умолчанию: sha. |
...
Настройка сервера удаленного доступа к корпоративной сети по WireGuard-протоколу
WireGuard – простой, быстрый и современный VPN, использующий современную криптографию (ChaCha20, Poly1305, Curve25519, BLAKE2s, SipHash24, HKDF). WireGuard надежно инкапсулирует IP-пакеты поверх UDP. В основе WireGuard лежит концепция под названием «Маршрутизация криптоключей», которая работает путем связывания открытых ключей со списком IP-адресов туннеля, разрешенным находиться внутри туннеля. Каждый сетевой интерфейс имеет закрытый ключ и список пиров. У каждого узла есть открытый ключ. Открытые ключи короткие и простые и используются узлами для аутентификации друг друга. Их можно передавать для использования в файлах конфигурации любым внешним методом аналогично тому, как можно отправить открытый ключ SSH для доступа к серверу.
Алгоритм настройки
| Якорь | ||||
|---|---|---|---|---|
|
Шаг | Описание | Команда | Ключи |
|---|---|---|---|
1 | Создать профиль WireGuard-сервера. | esr(config)# remote-access wireguard <NAME> | <NAME> – имя профиля WireGuard-сервера, задаётся строкой до 31 символа. |
2 | Указать описание конфигурируемого сервера (необязательно). | esr(config-wireguard-server)# description <DESCRIPTION> | <DESCRIPTION> – описание WireGuard-сервера, задаётся строкой до 255 символов. |
3 | Определить статический IP-адрес конфигурируемого сервера. | esr(config-wireguard-server)# local-address <ADDR/LEN> | <ADDR/LEN> – IP-адрес и длина маски подсети, задаётся в виде AAA.BBB.CCC.DDD/EE, где каждая часть AAA – DDD принимает значения [0..255] и EE принимает значения [1..32]. |
| 4 | Указать UDP-порт, который будет прослушиваться WireGuard-сервером (необязательно). | esr(config-wireguard-server)# port <PORT> | <PORT> – UDP-порт, принимает значения [1..65535]. |
| 5 | Отключить функции Firewall или включить WireGuard-сервер в зону безопасности и настроить правила взаимодействия между зонами (см. раздел Конфигурирование Firewall). | esr(config-wireguard-server)# ip firewall disable | |
| esr(config-wireguard-server)# security-zone <NAME> | <NAME> – имя зоны безопасности, задаётся строкой до 31 символа. | ||
| 6 | Задать MTU (необязательно). | esr(config-wireguard-server)# mtu <MTU> | <MTU> – 552–10000. Значение по умолчанию: 1500. |
| 7 | Указать приватный ключ WireGuard-сервера. | esr(config-wireguard-server)# private-key <NAME> | <NAME> – имя приватного ключа, задаётся строкой до 31 символа. |
| 8 | Включить профиль WireGuard-сервера. | esr(config-wireguard-server)# enable | |
| 9 | Перейти к настройке разрешённых туннелей WireGuard-сервера. | esr(config-wireguard-server)# peer <COUNT> | <COUNT> – номер соответствующего пира, принимает значения [1..16]. |
| 10 | Указать описание туннеля (необязательно). | esr(config-wireguard-server-peer)# description <DESCRITPION> | <DESCRIPTION> – описание WireGuard-сервера, задаётся строкой до 255 символов. |
| 11 | Указать публичный ключ туннеля. | esr(config-wireguard-server-peer)# public-key <NAME> | <NAME> – имя публичного ключа, задаётся строкой до 31 символа. |
| 12 | Указать список IP-адресов, которым будет разрешено находиться внутри туннеля. | esr(config-wireguard-server-peer)# access-addresses <TYPE> | <TYPE> – <TYPE> – тип аргумента, устанавливаемый в качестве адреса:
<FROM-ADDR> – начальный IP-адрес диапазона; <OBJ-GROUP-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа; <ADDR/LEN> – IP-адрес и маска подсети. |
| 13 | Включить туннель. | esr(config-wireguard-server-peer)# enable |
Пример настройки
Задача:
Настроить WireGuard-сервер на маршрутизаторе для подключения удаленных пользователей к ЛВС.
- адресация внутри туннеля – 10.10.10.0/24;
- порт подключения к серверу – 43020;
- адрес WireGuard-сервера внутри туннеля – 10.10.10.1.
Решение:
Предварительно нужно выполнить следующие действия:
- загрузить на ESR приватный ключ сервера и публичный ключ клиента;
- создать object-group network, в которой будет указан список IP-адресов, которым будет разрешено проходить через туннель.
Импортируйте по tftp приватный ключ сервера и публичный ключ клиента:
| Блок кода |
|---|
esr# copy tftp://192.168.16.10:/server.priv crypto:private-key/server.priv esr# copy tftp://192.168.16.10:/client.pub crypto:public-key/client.pub |
Создайте object-group network, в которой будет указан список IP-адресов, которым будет разрешено проходить через туннель:
| Блок кода |
|---|
esr(config)# object-group network client_wg esr(config-object-group-network)# ip address-range 10.10.10.2 |
Создайте профиль WireGuard-сервера, задайте локальный адрес сервера, порт для прослушивания и выставьте MTU:
| Блок кода |
|---|
esr(config)# remote-access wireguard WG esr(config-wireguard-server)# local-address 10.10.10.1/24 esr(config-wireguard-server)# port 43020 esr(config-wireguard-server)# mtu 1420 |
Укажите приватный ключ сервера и отключите Firewall:
| Блок кода |
|---|
esr(config-wireguard-server)# private-key server.priv esr(config-wireguard-server)# ip firewall disable |
Перейдите в настройки разрешённого туннеля, укажите связку публичного ключа клиента и разрешённого IP-адреса:
| Блок кода |
|---|
esr(config-wireguard-server)# peer 1 esr(config-wireguard-server-peer)# public-key client.pub esr(config-wireguard-server-peer)# access-addresses object-group client_wg |
Включите туннель и WireGuard-сервер:
| Блок кода |
|---|
esr(config-wireguard-server-peer)# enable esr(config-wireguard-server-peer)# exit esr(config-wireguard-server)# enable |
После применения конфигурации маршрутизатор будет прослушивать порт 43020.
Счётчики сессий WireGuard-сервера можно посмотреть командой:
| Блок кода |
|---|
esr# show remote-access counters wireguard server WG |
Очистить счётчики сессий WireGuard-сервера можно командой:
| Блок кода |
|---|
esr# clear remote-access counters wireguard server WG |
Конфигурацию WireGuard-сервера можно посмотреть командой:
| Блок кода |
|---|
esr# show remote-access configuration wireguard WG |
...
