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

Ключ

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

...

Шаг

Описание

Команда

Ключи

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Указать pre-shared-key для настраиваемого туннеля (необязательно).esr(config-wireguard-server-peer)# pre-shared-key <TYPE> <WORD>

<TYPE> – тип аргумента, устанавливаемый в качестве симметричного ключа:

  • ascii-text – указать симметричный ключ в виде ASCII-текста, который будет сконвертирован в формат Base64;
  • base64 – указать симметричный ключ в формате Base64;
  • encrypted – указать симметричный ключ в зашифрованном виде.

<WORD> - вводимый симметричный ключ. В зависимости от типа аргумента имеет длину 32 символа для ascii-text, 44 символа для формата base64 и 64 символа для зашифрованного  вида. 

13Указать список IP-адресов, которым будет разрешено находиться внутри туннеля.

esr(config-wireguard-server-peer)# access-addresses <TYPE> 
{<FROM-ADDR> - <TO-ADDR> | <OBJ-GROUP-NETWORK-NAME> | <ADDR/LEN>}

<TYPE> – тип аргумента, устанавливаемый в качестве адреса:

  • address-range – указать диапазон IPv4-адресов;
  • object-group – указать имя профиля;
  • prefix – указать адрес подсети и префикс.

<FROM-ADDR> – начальный IP-адрес диапазона;
<TO-ADDR> – конечный IP-адрес диапазона;

<OBJ-GROUP-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа;

<ADDR/LEN> – IP-адрес и маска подсети.

14Включить туннель.esr(config-wireguard-server-peer)# enable

...

Настроить WireGuard-сервер на маршрутизаторе для подключения удаленных пользователей к ЛВСсерверам организации.

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

Image RemovedImage Added

Решение:

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

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

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

Блок кода
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

Scroll Pagebreak

Очистить счётчики сессий WireGuard-сервера можно командой:

Блок кода
esr# clear remote-access counters wireguard server WG

Конфигурацию WireGuard-сервера можно посмотреть командой:

Блок кода
esr# show remote-access configuration wireguard WG

Настройка клиента удаленного доступа по протоколу PPPoE

PPPoE – это туннелирующий протокол (tunneling protocol), который позволяет инкапсулировать IP PPP через соединения Ethernet и обладает программными возможностями PPP-соединений, что позволяет использовать его для виртуальных соединений на соседнюю Ethernet-машину и устанавливать соединение точка-точка, которое используется для транспортировки IP-пакетов, а также работает с возможностями PPP. Это позволяет применять традиционное PPP-ориентированное ПО для настройки соединения, которое использует не последовательный канал, а пакетно-ориентированную сеть (например, Ethernet), чтобы организовать классическое соединение с логином и паролем для Интернет-соединений. Кроме того, IP-адрес по другую сторону соединения назначается, только когда PPPoE-соединение открыто, позволяя динамическое переиспользование IP-адресов.

Алгоритм настройки

...

Шаг

...

Описание

...

Команда

...

Ключи

...

1

...

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

...

esr(config)# tunnel pppoe <PPPoE>

...

<PPPoE> – порядковый номер туннеля от 1 до 10.

...

2

...

Указать описание конфигурируемого клиента (необязательно).

...

esr(config-pppoe)# description <DESCRIPTION>

...

<DESCRIPTION> – описание PPPoE-туннеля, задаётся строкой до 255 символов.

...

3

...

Указать имя экземпляра VRF, в котором будут использоваться PPPoE-клиент (необязательно).

...

esr(config-pppoe)# ip vrf forwarding <VRF>

...

<VRF> – имя VRF, задается строкой до 31 символа.

...

4

...

Указать интерфейс, через который будет устанавливаться PPPoE соединение.

...

esr(config-pppoe)# interface <IF>

...

<IF> – интерфейс или группа интерфейсов.

...

5

...

Указать имя пользователя и пароль для подключения к PPPoE-серверу.

...

esr(config-pppoe)# username <NAME> password ascii-text
{ <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> }

...

<NAME> – имя пользователя, задаётся строкой до 31 символа;

<CLEAR-TEXT> – пароль, задаётся строкой [8 .. 64] символов;

<ENCRYPTED-TEXT> – зашифрованный пароль, задаётся строкой [16..128] символов.

...

6

...

Включить PPPoE-туннель в зону безопасности и настроить правила взаимодействия между зонами (см. раздел Конфигурирование Firewall).

...

esr(config-pppoe)# security-zone <NAME>

...

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

...

7

...

Активировать конфигурируемый профиль.

...

esr(config-pppoe)# enable

...

8

...

Указать метод аутентификации (необязательно).

...

esr(config-pppoe)# authentication method <METHOD>

...

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap.

Значение по умолчанию: chap.

...

9

...

Игнорировать dns-сервер через данный PPoE-туннель (необязательно).

...

esr(config-pppoe)# ignore nameserver

...

10

...

Включить отказ от получения маршрута по умолчанию от PPPoE-сервера (необязательно).

...

esr(config-pppoe)# ignore-default-route

...

11

...

Указать интервал времени, за который усредняется статистика о нагрузке (необязательно).

...

esr(config-pppoe)# load-average <TIME>

...

<TIME> – интервал времени в секундах от 5 до 150 (по умолчанию 5 с).

...

12

...

Указать размер MTU (MaximumTransmitionUnit) для PPPoE-туннеля.
MTU более 1500 будет активно только если применена команда "system jumbo-frames"
(необязательно).

...

esr(config-pppoe)# mtu <MTU>

...

<MTU> – значение MTU, принимает значения в диапазоне [552..1500].

Значение по умолчанию: 1500.

...

esr(config-pppoe)# ppp failure-count <NUM>

...

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

...

14

...

esr(config-pppoe)# ppp timeout keepalive <TIME >

...

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

...

esr(config-pppoe)# ip tcp adjust-mss <MSS>

...

<MSS> – значение MSS, принимает значения в диапазоне [500..1460].

Значение по умолчанию: 1460.

...

esr(config-pppoe)# history statistics

...

Также для PPPoE-клиента возможно настроить:

Пример настройки

Задача:

Настроить PPPoE-клиент на маршрутизаторе.

  • Учетные записи для подключения – tester;
  • Пароли учетных записей – password;
  • Подключение должно осуществляться с интерфейса gigabitethernet 1/0/7.
Примечание

Интерфейс, с которого будет осуществляться РРРоЕ-соединение, должен работать в режиме routerport (кроме случаев использования bridge).

Image Removed

Решение:

Предварительно должен быть настроен PPPoE-сервер с соответствующими учетными записями. Также на устройстве должны быть настроены зоны безопасности и описаны правила их взаимодействия.

Зайдем в режим конфигурирования PPPoE-туннеля и зададим пользователя и пароль для подключения к PPPoE-серверу:

Блок кода
esr# configure
esr(config)# tunnel pppoe 1
esr(config-pppoe)# username tester password ascii-text password

Scroll Pagebreak

Укажем интерфейс, через который будет устанавливаться PPPoE-соединение:

Блок кода
esr(config-pppoe)# interface gigabitethernet 1/0/7
esr(config- pppoe)# enable

Настроим зону безопасности,:

Блок кода
esr(config-pppoe)# security-zone untrust

Опционально для PPPoE-туннеля можно указать следующие параметры:

Изменить метод аутентификации:

Блок кода
esr(config-pppoe)# authentication method 
  METHOD  Select PPP authentication method:
                chap
                mschap
                mschap-v2
                eap
                pap

Игнорировать полученный маршрут по умолчанию, выданные РРРоЕ-сервером:

Блок кода
esr(config-pppoe)# ignore-default-route

Переопределить значение поля MSS (Maximum segment size) во входящих TCP-пакетах:

Блок кода
esr(config-pppoe)# ip tcp adjust-mss 1452

Указать размер MTU (Maximum Transmition Unit):

Блок кода
esr(config-pppoe)# mtu 1496

Изменить количество неудачных data-link тестов перед разрывом сессии:

Блок кода
esr(config-pppoe)# ppp failure-count 15

Установить интервал времени в секундах, по истечении которого маршрутизатор отправляет keepalive-сообщение:

Блок кода
esr(config-pppoe)# ppp timeout keepalive 15

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

Блок кода
esr# show tunnels status pppoe 1

Счетчики входящих и отправленных пакетов PPPoE-туннеля можно посмотреть командой:

Блок кода
esr# show tunnels counters pppoe 1

Scroll Pagebreak

Конфигурацию PPPoE-туннеля можно посмотреть командой:

Блок кода
esr# show tunnels configuration pppoe 1

Настройка клиента удаленного доступа по протоколу PPTP

PPTP (англ. Point-to-Point Tunneling Protocol) – туннельный протокол типа точка-точка, позволяющий устанавливать защищённое соединение за счёт создания специального туннеля в обычной незащищенной сети. PPTP помещает (инкапсулирует) кадры PPP в IP-пакеты для передачи по глобальной IP-сети, например, Интернет. PPTP может также использоваться для организации туннеля между двумя локальными сетями. РРТР использует дополнительное TCP-соединение для обслуживания туннеля.

Алгоритм настройки

...

Шаг

...

Описание

...

Команда

...

Ключи

...

1

...

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

...

esr(config)# tunnel pptp <INDEX>

...

<INDEX> – идентификатор туннеля в диапазоне: [1..10].

...

2

...

Указать описание конфигурируемого туннеля (необязательно).

...

esr(config-pptp)# description <DESCRIPTION>

...

<DESCRIPTION> – описание туннеля, задается строкой до 255 символов.

...

3

...

Указать экземпляр VRF, в котором будет работать данный PPTP-туннель (не обязательно).

...

esr(config-pptp)# ip vrf forwarding <VRF>

...

<VRF> – имя VRF, задается строкой до 31 символа.

...

4

...

Включить PPTP-туннель в зону безопасности и настроить правила взаимодействия между зонами или отключить firewall (см. раздел Конфигурирование Firewall).

...

esr(config-pptp)# security-zone <NAME>

...

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

...

esr(config-pptp)# ip firewall disable

...

          

...

5

...

Установить удаленный IP-адрес для установки туннеля.

...

esr(config-pptp)# remote address <ADDR>

...

<ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255].

...

6

...

Установить размер MTU (MaximumTransmitionUnit) для туннеля (необязательно)

...

esr(config-pptp)# mtu <MTU>

...

<MTU> – значение MTU, принимает значения в диапазоне [552..10000].

Значение по умолчанию: 1500.

...

7

...

Указать пользователя и установить пароль в открытой или зашифрованной форме для аутентификации удаленной стороны.

...

esr(config-pptp)# username <NAME> password ascii-text
{ <WORD> | encrypted <HEX> }

...

<NAME> – имя пользователя, задается строкой до 31 символа.

<WORD> – пароль в открытой форме, задается строкой [8..64] символов, может включать символы [0-9a-fA-F].

<HEX> – пароль в зашифрованной форме, задается строкой [16..128] символов.

...

8

...

Активировать туннель.

...

esr(config-pptp)# enable

...

esr(config-pptp)# ip tcp adjust-mss <MSS>

...

<MSS> – значение MSS, принимает значения в диапазоне [500..1460].

Значение по умолчанию: 1460.

...

10

...

Игнорировать dns-сервер через данный PPTP-туннель (необязательно).

...

esr(config-pptp)# ignore nameserver

...

11

...

Игнорировать маршрут по умолчанию через данный PPTP-туннель (необязательно)

...

esr(config-pptp)# ignore-default-route

...

12

...

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

...

esr(config-pptp)# load-average <TIME>

...

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

...

13

...

Указать метод аутентификации (необязательно).

...

esr(config-pptp)# authentication method <METHOD>

...

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap.

Значение по умолчанию: chap.

...

esr(config-pptp)# history statistics

...

esr(config-pptp)# ppp timeout keepalive <TIME >

...

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

...

esr(config-pptp)# ppp failure-count <NUM>

...

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

Пример настройки

Задача:

Настроить PPTP-туннель на маршрутизаторе:

  • адрес PPTP-сервера 20.20.0.1;
  • учетная запись для подключения – логин: ivan, пароль: simplepass.

Image Removed

Решение:

Создадим туннель PPTP:

Блок кода
esr(config)# tunnel pptp 1 

Укажем учетную запись (пользователя Ivan) для подключения к серверу:

Блок кода
esr(config-pptp)# username ivan password ascii-text simplepass

Укажем удаленный шлюз:

Блок кода
esr(config-pptp)# remote address 20.20.0.1

Укажем зону безопасности:

Блок кода
esr(config-pptp)# security-zone VPN

Включим туннель PPTP:

Блок кода
esr(config-pptp)# enable

Scroll Pagebreak

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

Блок кода
esr# show tunnels status pptp

Счетчики входящих и отправленных пакетов можно посмотреть командой:

Блок кода
esr# show tunnels counters pptp

Конфигурацию туннеля можно посмотреть командой:

Блок кода
esr# show tunnels configuration pptp

Настройка клиента удаленного доступа по протоколу L2TP

L2TP (англ. Layer 2 Tunneling Protocol – протокол туннелирования второго уровня) – туннельный протокол, использующийся для поддержки виртуальных частных сетей. L2TP помещает (инкапсулирует) кадры PPP в IP-пакеты для передачи по глобальной IP-сети, например, Интернет. L2TP может также использоваться для организации туннеля между двумя локальными сетями. L2ТР использует дополнительное UDP-соединение для обслуживания туннеля. L2TP-протокол не предоставляет средств шифрования данных и поэтому он обычно используется в связке с группой протоколов IPsec, которая предоставляет безопасность на пакетном уровне.

Алгоритм настройки

...

Шаг

...

Описание

...

Команда

...

Ключи

...

1

...

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

...

esr(config)# tunnel l2tp <INDEX>

...

<INDEX> – идентификатор туннеля в диапазоне: [1..10].

...

2

...

Указать экземпляр VRF, в котором будет работать данный L2TP-туннель (необязательно).

...

esr(config-l2tp)# ip vrf forwarding <VRF>

...

<VRF> – имя VRF, задаётся строкой до 31 символа.

...

3

...

Указать описание конфигурируемого туннеля (необязательно).

...

esr(config-l2tp)# description <DESCRIPTION>

...

<DESCRIPTION> – описание туннеля, задается строкой до 255 символов.

...

4

...

Включить L2TP-туннель в зону безопасности и настроить правила взаимодействия между зонами или отключить firewall (см. раздел Конфигурирование Firewall).

...

esr(config-l2tp)# security-zone <NAME>

...

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

...

esr(config-l2tp)# ip firewall disable

...

5

...

Установить удаленный IP-адрес для установки туннеля.

...

esr(config-l2tp)# remote address <ADDR>

...

<ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255].

...

6

...

Указать пользователя и установить пароль в открытой или зашифрованной форме для аутентификации удалённой стороны.

...

esr(config-l2tp)# username <NAME> password ascii-text
{ <WORD> | encrypted <HEX> }

...

<NAME> – имя пользователя, задается строкой до 31 символа.

<WORD> – пароль в открытой форме, задается строкой [8..64] символов, может включать символы [0-9a-fA-F].

<HEX> – пароль в зашифрованной форме, задается строкой [16..128] символов.

...

7

...

Выбрать метод аутентификации по ключу для IKE-соединения.

...

esr(config-l2tp)# ipsec authentication
method pre-shared-key

...

8

...

Указать общий секретный ключ для аутентификации, который должен совпадать у обоих сторон, устанавливающих туннель.

...

esr(config-l2tp)# ipsec authentication pre-shared-key
{ ascii-text { <TEXT> | encrypted <ENCRYPTED-TEXT> } |
hexadecimal {<HEX> | encrypted <ENCRYPTED-HEX> } }

...

<TEXT> – строка [1..64] ASCII-символов;

<HEX> – число размером [1..32] байт, задаётся строкой [2..128] символов в шестнадцатеричном формате (0xYYYY...) или (YYYY...);

<ENCRYPTED-TEXT> – зашифрованный пароль размером [1..32] байт, задаётся строкой [2..128] символов;

<ENCRYPTED-HEX> – зашифрованное число размером [2..64] байт, задаётся строкой [2..256] символов.

...

<NAME> – имя ранее созданного профиля протокола IKE, задаётся строкой до 31 символа.

...

esr(config-l2tp)# ipsec proposal <NAME>

...

<NAME> – имя ранее созданного профиля IPsec, задаётся строкой до 31 символа. 

...

<PORT> – номер UDP-порта, задаётся в диапазоне [1024..65535].

Значение по умолчанию: 1701.

...

13

...

Активировать туннель.

...

esr(config-l2tp)# enable

...

14

...

Установить размер MTU (MaximumTransmitionUnit) для туннеля (необязательно).

...

esr(config-l2tp)# mtu <MTU>

...

<MTU> – значение MTU, принимает значения в диапазоне [552..10000].

Значение по умолчанию: 1500.

...

15

...

Игнорировать dns-сервер через данный L2TP-туннель (необязательно).

...

esr(config-l2tp)# ignore nameserver

...

16

...

Игнорировать маршрут по умолчанию через данный L2TP-туннель (необязательно)

...

esr(config-l2tp)# ignore-default-route

...

17

...

Указать метод аутентификации (необязательно).

...

esr(config-l2tp)# authentication method <METHOD>

...

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap

Значение по умолчанию: chap.

...

18

...

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

...

esr(config-l2tp)# load-average <TIME>

...

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

...

crypto generate private-key x25519 filename wg_server_private.key
esr# crypto generate public-key x25519 private-key wg_server_private.key filename wg_server_public.key

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

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

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

Блок кода
esr(config)# object-group network WG_CLIENTS
esr(config-object-group-network)# ip address-range 10.40.0.10-10.40.0.20

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

Блок кода
esr(config)# remote-access wireguard WG
esr(config-wireguard-server)# local-address 110.0.0.1/30
esr(config-wireguard-server)# port 43020
esr(config-wireguard-server)# mtu 1420

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

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

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

Блок кода
esr(config-wireguard-server)# peer 1
esr(config-wireguard-server-peer)# public-key wg_client_public.key
esr(config-wireguard-server-peer)# access-addresses object-group WG_CLIENTS

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

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

Включим туннель и 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

Scroll Pagebreak

Пример настройки правил Firewall для совместной работы с WireGuard-сервером

Задача:

Настроить правила  Firewall таким образом, чтобы разрешить обращения клиентов на 80 порт сервера 10.50.0.10, остальное взаимодействие запретить.

Решение:

Создадим зоны безопасности WAN, SERVERS, WIREGUARD и назначим их на соответствующие интерфейсы и включим Firewall:

Блок кода
esr(config)# security zone WAN
esr(config-security-zone)# exit
esr(config)# security zone SERVERS
esr(config-security-zone)# exit
esr(config)# security zone WIREGUARD 
esr(config-security-zone)# exit
esr(config)# interface gigabitethernet 1/0/1
esr(config-if-gi)# security-zone WAN
esr(config-if-gi)# no ip firewall disable
esr(config-if-gi)# exit
esr(config)# interface gigabitethernet 1/0/2
esr(config-if-gi)# security-zone SERVERS 
esr(config-if-gi)# no ip firewall disable
esr(config-if-gi)# exit
esr(config)# remote-access wireguard WG 
esr(config-wireguard-server)# security-zone WIREGUARD 
esr(config-wireguard-server)# no ip firewall disable
esr(config-wireguard-server)# exit

Создадим правила, разрешающие работу WireGuard:

Блок кода
esr(config)# security zone-pair WAN self 
esr(config-security-zone-pair)# rule 10
esr(config-security-zone-pair-rule)# description "Permit wireguard-traffic"
esr(config-security-zone-pair-rule)# action permit
esr(config-security-zone-pair-rule)# match protocol udp
esr(config-security-zone-pair-rule)# match destination-port port-range 43020
esr(config-security-zone-pair-rule)# enable
esr(config-security-zone-pair-rule)# exit
esr(config-security-zone-pair)# rule 100
esr(config-security-zone-pair-rule)# action deny
esr(config-security-zone-pair-rule)# enable
esr(config-security-zone-pair-rule)# exit
esr(config-security-zone-pair)# exit

Scroll Pagebreak

Создадим правила, разрешающие обращения на 80 порт сервера 10.50.0.10 из туннеля WireGuard:

Блок кода
esr(config)# security zone-pair WIREGUARD SERVERS
esr(config-security-zone-pair)# rule 10
esr(config-security-zone-pair-rule)# action permit
esr(config-security-zone-pair-rule)# match protocol tcp
esr(config-security-zone-pair-rule)# match destination-address address-range 10.50.0.10
esr(config-security-zone-pair-rule)# match destination-port port-range 80
esr(config-security-zone-pair-rule)# enable
esr(config-security-zone-pair-rule)# exit
esr(config-security-zone-pair)# rule 100
esr(config-security-zone-pair-rule)# action deny
esr(config-security-zone-pair-rule)# enable
esr(config-security-zone-pair-rule)# exit
esr(config-security-zone-pair)# exit

 Проверим работоспособность:

Блок кода
esr@client:~$ ping 10.50.0.10 -c 4
PING 10.50.0.10 (10.50.0.10) 56(84) bytes of data.

--- 10.50.0.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3090ms


esr@client:~$ hping3 10.50.0.10 -c 4 -S -p 80
HPING 10.50.0.10 (ens3 10.50.0.10): S set, 40 headers + 0 data bytes
len=46 ip=10.50.0.10 ttl=62 DF id=0 sport=80 flags=RA seq=0 win=0 rtt=2.0 ms
len=46 ip=10.50.0.10 ttl=62 DF id=0 sport=80 flags=RA seq=1 win=0 rtt=2.8 ms
len=46 ip=10.50.0.10 ttl=62 DF id=0 sport=80 flags=RA seq=2 win=0 rtt=2.6 ms
len=46 ip=10.50.0.10 ttl=62 DF id=0 sport=80 flags=RA seq=3 win=0 rtt=2.3 ms

--- 10.50.0.10 hping statistic ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 2.0/2.4/2.8 ms

Настройка клиента удаленного доступа по протоколу PPPoE

PPPoE – это туннелирующий протокол (tunneling protocol), который позволяет инкапсулировать IP PPP через соединения Ethernet и обладает программными возможностями PPP-соединений, что позволяет использовать его для виртуальных соединений на соседнюю Ethernet-машину и устанавливать соединение точка-точка, которое используется для транспортировки IP-пакетов, а также работает с возможностями PPP. Это позволяет применять традиционное PPP-ориентированное ПО для настройки соединения, которое использует не последовательный канал, а пакетно-ориентированную сеть (например, Ethernet), чтобы организовать классическое соединение с логином и паролем для Интернет-соединений. Кроме того, IP-адрес по другую сторону соединения назначается, только когда PPPoE-соединение открыто, позволяя динамическое переиспользование IP-адресов.

Алгоритм настройки

Шаг

Описание

Команда

Ключи

1

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

esr(config)# tunnel pppoe <PPPoE>

<PPPoE> – порядковый номер туннеля от 1 до 10.

2

Указать описание конфигурируемого клиента (необязательно).

esr(config-pppoe)# description <DESCRIPTION>

<DESCRIPTION> – описание PPPoE-туннеля, задаётся строкой до 255 символов.

3

Указать имя экземпляра VRF, в котором будут использоваться PPPoE-клиент (необязательно).

esr(config-pppoe)# ip vrf forwarding <VRF>

<VRF> – имя VRF, задается строкой до 31 символа.

4

Указать интерфейс, через который будет устанавливаться PPPoE соединение.

esr(config-pppoe)# interface <IF>

<IF> – интерфейс или группа интерфейсов.

5

Указать имя пользователя и пароль для подключения к PPPoE-серверу.

esr(config-pppoe)# username <NAME> password ascii-text
{ <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> }

<NAME> – имя пользователя, задаётся строкой до 31 символа;

<CLEAR-TEXT> – пароль, задаётся строкой [8 .. 64] символов;

<ENCRYPTED-TEXT> – зашифрованный пароль, задаётся строкой [16..128] символов.

6

Включить PPPoE-туннель в зону безопасности и настроить правила взаимодействия между зонами (см. раздел Конфигурирование Firewall).

esr(config-pppoe)# security-zone <NAME>

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

7

Активировать конфигурируемый профиль.

esr(config-pppoe)# enable


8

Указать метод аутентификации (необязательно).

esr(config-pppoe)# authentication method <METHOD>

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap.

Значение по умолчанию: chap.

9

Игнорировать dns-сервер через данный PPoE-туннель (необязательно).

esr(config-pppoe)# ignore nameserver


10

Включить отказ от получения маршрута по умолчанию от PPPoE-сервера (необязательно).

esr(config-pppoe)# ignore-default-route


11

Указать интервал времени, за который усредняется статистика о нагрузке (необязательно).

esr(config-pppoe)# load-average <TIME>

<TIME> – интервал времени в секундах от 5 до 150 (по умолчанию 5 с).

12

Указать размер MTU (MaximumTransmitionUnit) для PPPoE-туннеля.
MTU более 1500 будет активно только если применена команда system jumbo-frames
(необязательно).

esr(config-pppoe)# mtu <MTU>

<MTU> – значение MTU, принимает значения в диапазоне [552..1500].

Значение по умолчанию: 1500.

13Изменить количество неудачных data-link тестов перед разрывом сессии (необязательно).

esr(config-pppoe)# ppp failure-count <NUM>

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

14

Изменить интервал времени в секундах, по истечении которого маршрутизатор отправляет keepalive-сообщение (необязательно).

esr(config-pppoe)# ppp timeout keepalive <TIME >

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

15Переопределить значение поля MSS (Maximum segment size) во входящих TCP-пакетах (необязательно).

esr(config-pppoe)# ip tcp adjust-mss <MSS>

<MSS> – значение MSS, принимает значения в диапазоне [500..1460].

Значение по умолчанию: 1460.

16Включить запись статистики использования текущего туннеля (необязательно).

esr(config-pppoe)# history statistics


Также для PPPoE-клиента возможно настроить:

Scroll Pagebreak

Пример настройки

Задача:

Настроить PPPoE-клиент на маршрутизаторе.

  • Учетные записи для подключения – tester;
  • Пароли учетных записей – password;
  • Подключение должно осуществляться с интерфейса gigabitethernet 1/0/7.
Примечание

Интерфейс, с которого будет осуществляться РРРоЕ-соединение, должен работать в режиме routerport (кроме случаев использования bridge).

Image Added

Решение:

Предварительно должен быть настроен PPPoE-сервер с соответствующими учетными записями. Также на устройстве должны быть настроены зоны безопасности и описаны правила их взаимодействия.

Зайдем в режим конфигурирования PPPoE-туннеля и зададим пользователя и пароль для подключения к PPPoE-серверу:

Блок кода
esr# configure
esr(config)# tunnel pppoe 1
esr(config-pppoe)# username tester password ascii-text password

Укажем интерфейс, через который будет устанавливаться PPPoE-соединение:

Блок кода
esr(config-pppoe)# interface gigabitethernet 1/0/7
esr(config- pppoe)# enable

Настроим зону безопасности,:

Блок кода
esr(config-pppoe)# security-zone untrust

Scroll Pagebreak

Опционально для PPPoE-туннеля можно указать следующие параметры:

  • Изменить метод аутентификации:

    Блок кода
    esr(config-pppoe)# authentication method 
      METHOD  Select PPP authentication method:
                    chap
                    mschap
                    mschap-v2
                    eap
                    pap


  • Игнорировать полученный маршрут по умолчанию, выданные РРРоЕ-сервером:

    Блок кода
    esr(config-pppoe)# ignore-default-route


  • Переопределить значение поля MSS (Maximum segment size) во входящих TCP-пакетах:

    Блок кода
    esr(config-pppoe)# ip tcp adjust-mss 1452


  • Указать размер MTU (Maximum Transmition Unit):

    Блок кода
    esr(config-pppoe)# mtu 1496


  • Изменить количество неудачных data-link тестов перед разрывом сессии:

    Блок кода
    esr(config-pppoe)# ppp failure-count 15


  • Установить

...

  • интервал времени в секундах, по истечении которого маршрутизатор отправляет keepalive-сообщение

...

  • :

    Блок кода
    esr(config-

...

  • pppoe)# ppp timeout keepalive

...

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

  •  15


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

Блок кода
esr# show tunnels status pppoe 1

Счетчики входящих и отправленных пакетов PPPoE-туннеля можно посмотреть командой:

Блок кода
esr# show tunnels counters pppoe 1

Конфигурацию PPPoE-туннеля можно посмотреть командой:

Блок кода
esr# show tunnels configuration pppoe 1

Scroll Pagebreak

Настройка клиента удаленного доступа по протоколу PPTP

PPTP (англ. Point-to-Point Tunneling Protocol) – туннельный протокол типа точка-точка, позволяющий устанавливать защищённое соединение за счёт создания специального туннеля в обычной незащищенной сети. PPTP помещает (инкапсулирует) кадры PPP в IP-пакеты для передачи по глобальной IP-сети, например, Интернет. PPTP может также использоваться для организации туннеля между двумя локальными сетями. РРТР использует дополнительное TCP-соединение для обслуживания туннеля.

Алгоритм настройки

Шаг

Описание

Команда

Ключи

1

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

esr(config)# tunnel pptp <INDEX>

<INDEX> – идентификатор туннеля в диапазоне: [1..10].

2

Указать описание конфигурируемого туннеля (необязательно).

esr(config-pptp)# description <DESCRIPTION>

<DESCRIPTION> – описание туннеля, задается строкой до 255 символов.

3

Указать экземпляр VRF, в котором будет работать данный PPTP-туннель (не обязательно).

esr(config-pptp)# ip vrf forwarding <VRF>

<VRF> – имя VRF, задается строкой до 31 символа.

4

Включить PPTP-туннель в зону безопасности и настроить правила взаимодействия между зонами или отключить firewall (см. раздел Конфигурирование Firewall).

esr(config-pptp)# security-zone <NAME>

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

esr(config-pptp)# ip firewall disable

          

5

Установить удаленный IP-адрес для установки туннеля.

esr(config-pptp)# remote address <ADDR>

<ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255].

6

Установить размер MTU (MaximumTransmitionUnit) для туннеля (необязательно)

esr(config-pptp)# mtu <MTU>

<MTU> – значение MTU, принимает значения в диапазоне [552..10000].

Значение по умолчанию: 1500.

7

Указать пользователя и установить пароль в открытой или зашифрованной форме для аутентификации удаленной стороны.

esr(config-pptp)# username <NAME> password ascii-text
{ <WORD> | encrypted <HEX> }

<NAME> – имя пользователя, задается строкой до 31 символа.

<WORD> – пароль в открытой форме, задается строкой [8..64] символов, может включать символы [0-9a-fA-F].

<HEX> – пароль в зашифрованной форме, задается строкой [16..128] символов.

8

Активировать туннель.

esr(config-pptp)# enable


9Переопределить значение поля MSS (Maximum segment size) во входящих TCP-пакетах (необязательно).

esr(config-pptp)# ip tcp adjust-mss <MSS>

<MSS> – значение MSS, принимает значения в диапазоне [500..1460].

Значение по умолчанию: 1460.

10

Игнорировать dns-сервер через данный PPTP-туннель (необязательно).

esr(config-pptp)# ignore nameserver


11

Игнорировать маршрут по умолчанию через данный PPTP-туннель (необязательно)

esr(config-pptp)# ignore-default-route


12

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

esr(config-pptp)# load-average <TIME>

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

13

Указать метод аутентификации (необязательно).

esr(config-pptp)# authentication method <METHOD>

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap.

Значение по умолчанию: chap.

14Включить запись статистики использования текущего туннеля (не обязательно).

esr(config-pptp)# history statistics


15Изменить интервал времени в секундах, по истечении которого маршрутизатор отправляет keepalive-сообщение (необязательно).

esr(config-pptp)# ppp timeout keepalive <TIME >

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

16Изменить количество неудачных data-link тестов перед разрывом сессии (необязательно).

esr(config-pptp)# ppp failure-count <NUM>

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

Пример настройки

Задача:

Настроить PPTP-туннель на маршрутизаторе:

  • адрес PPTP-сервера 20.20.0.1;
  • учетная запись для подключения – логин: ivan, пароль: simplepass.

Image Added


Решение:

Создадим туннель PPTP:

Блок кода
esr(config)# tunnel pptp 1 

Укажем учетную запись (пользователя Ivan) для подключения к серверу:

Блок кода
esr(config-pptp)# username ivan password ascii-text simplepass

Укажем удаленный шлюз:

Блок кода
esr(config-pptp)# remote address 20.20.0.1

Укажем зону безопасности:

Блок кода
esr(config-pptp)# security-zone VPN

Включим туннель PPTP:

Блок кода
esr(config-pptp)# enable

Scroll Pagebreak

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

Блок кода
esr# show tunnels status pptp

Счетчики входящих и отправленных пакетов можно посмотреть командой:

Блок кода
esr# show tunnels counters pptp

Конфигурацию туннеля можно посмотреть командой:

Блок кода
esr# show tunnels configuration pptp

Настройка клиента удаленного доступа по протоколу L2TP

L2TP (англ. Layer 2 Tunneling Protocol – протокол туннелирования второго уровня) – туннельный протокол, использующийся для поддержки виртуальных частных сетей. L2TP помещает (инкапсулирует) кадры PPP в IP-пакеты для передачи по глобальной IP-сети, например, Интернет. L2TP может также использоваться для организации туннеля между двумя локальными сетями. L2ТР использует дополнительное UDP-соединение для обслуживания туннеля. L2TP-протокол не предоставляет средств шифрования данных и поэтому он обычно используется в связке с группой протоколов IPsec, которая предоставляет безопасность на пакетном уровне.

Алгоритм настройки

Шаг

Описание

Команда

Ключи

1

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

esr(config)# tunnel l2tp <INDEX>

<INDEX> – идентификатор туннеля в диапазоне: [1..10].

2

Указать экземпляр VRF, в котором будет работать данный L2TP-туннель (необязательно).

esr(config-l2tp)# ip vrf forwarding <VRF>

<VRF> – имя VRF, задаётся строкой до 31 символа.

3

Указать описание конфигурируемого туннеля (необязательно).

esr(config-l2tp)# description <DESCRIPTION>

<DESCRIPTION> – описание туннеля, задается строкой до 255 символов.

4

Включить L2TP-туннель в зону безопасности и настроить правила взаимодействия между зонами или отключить firewall (см. раздел Конфигурирование Firewall).

esr(config-l2tp)# security-zone <NAME>

<NAME> – имя зоны безопасности, задаётся строкой до 31 символа.

esr(config-l2tp)# ip firewall disable


5

Установить удаленный IP-адрес для установки туннеля.

esr(config-l2tp)# remote address <ADDR>

<ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255].

6

Указать пользователя и установить пароль в открытой или зашифрованной форме для аутентификации удалённой стороны.

esr(config-l2tp)# username <NAME> password ascii-text
{ <WORD> | encrypted <HEX> }

<NAME> – имя пользователя, задается строкой до 31 символа.

<WORD> – пароль в открытой форме, задается строкой [8..64] символов, может включать символы [0-9a-fA-F].

<HEX> – пароль в зашифрованной форме, задается строкой [16..128] символов.

7

Выбрать метод аутентификации по ключу для IKE-соединения.

esr(config-l2tp)# ipsec authentication
method pre-shared-key


8

Указать общий секретный ключ для аутентификации, который должен совпадать у обоих сторон, устанавливающих туннель.

esr(config-l2tp)# ipsec authentication pre-shared-key
{ ascii-text { <TEXT> | encrypted <ENCRYPTED-TEXT> } |
hexadecimal {<HEX> | encrypted <ENCRYPTED-HEX> } }

<TEXT> – строка [1..64] ASCII-символов;

<HEX> – число размером [1..32] байт, задаётся строкой [2..128] символов в шестнадцатеричном формате (0xYYYY...) или (YYYY...);

<ENCRYPTED-TEXT> – зашифрованный пароль размером [1..32] байт, задаётся строкой [2..128] символов;

<ENCRYPTED-HEX> – зашифрованное число размером [2..64] байт, задаётся строкой [2..256] символов.

9Ограничить используемые методы аутентификации и шифрования протокола IKE (необязательно).esr(config-l2tp)# ipsec ike proposal <NAME>

<NAME> – имя ранее созданного профиля протокола IKE, задаётся строкой до 31 символа.

10Включить пересогласование ключей до разрыва IKE-соединения (необязательно)esr(config-l2tp)# ipsec ike rekey enable


11Ограничить используемые методы аутентификации и шифрования протокола IPsec (не обязательно).

esr(config-l2tp)# ipsec proposal <NAME>

<NAME> – имя ранее созданного профиля IPsec, задаётся строкой до 31 символа. 

12Определяется номер UDP-порта по которому устанавливается соединение с l2tp-сервером (необязательно).esr(config-l2tp)# port <PORT>

<PORT> – номер UDP-порта, задаётся в диапазоне [1024..65535].

Значение по умолчанию: 1701.

13

Активировать туннель.

esr(config-l2tp)# enable


14

Установить размер MTU (MaximumTransmitionUnit) для туннеля (необязательно).

esr(config-l2tp)# mtu <MTU>

<MTU> – значение MTU, принимает значения в диапазоне [552..10000].

Значение по умолчанию: 1500.

15

Игнорировать dns-сервер через данный L2TP-туннель (необязательно).

esr(config-l2tp)# ignore nameserver


16

Игнорировать маршрут по умолчанию через данный L2TP-туннель (необязательно)

esr(config-l2tp)# ignore-default-route


17

Указать метод аутентификации (необязательно).

esr(config-l2tp)# authentication method <METHOD>

<METHOD> – метод аутентификации, возможные значения: chap, mschap, mschap-v2, eap, pap

Значение по умолчанию: chap.

18

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

esr(config-l2tp)# load-average <TIME>

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

19Изменить интервал времени в секундах, по истечении которого маршрутизатор отправляет keepalive-сообщение (необязательно).

esr(config-l2tp)# ppp timeout keepalive <TIME >

<TIME> – время в секундах, задается в диапазоне [1..32767].

Значение по умолчанию: 10.

20Изменить количество неудачных data-link тестов перед разрывом сессии (необязательно).

esr(config-l2tp)# ppp failure-count <NUM>

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

Также для L2TP-клиента возможно настроить QoS в базовом или расширенном режимах (см. раздел Управление QoS).

Пример настройки

Задача:

Настроить PPTP-туннель на маршрутизаторе:

  • адрес PPTP-сервера 20.20.0.1;
  • учетная запись для подключения – логин: ivan, пароль: simplepass

Image Added

Решение:

Создадим туннель L2TP:

Блок кода
esr(config)# tunnel l2tp 1 

Укажем учетную запись (пользователя Ivan) для подключения к серверу:

Блок кода
esr(config-l2tp)# username ivan password ascii-text simplepass

Укажем удаленный шлюз:

Блок кода
esr(config-l2tp)# remote address 20.20.0.1

Укажем зону безопасности:

Блок кода
esr(config-l2tp)# security-zone VPN

Укажем метод аутентификации IPsec:

Блок кода
esr(config-l2tp)# ipsec authentication method pre-shared-key

Укажем ключ безопасности для IPsec:

Блок кода
esr(config-l2tp)# ipsec authentication pre-shared-key ascii-text password

Включим туннель L2TP:

Блок кода
esr(config-l2tp)# enable

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

Блок кода
esr# show tunnels status l2tp

Счетчики входящих и отправленных пакетов можно посмотреть командой:

Блок кода
esr# show tunnels counters l2tp

Конфигурацию туннеля можно посмотреть командой:

Блок кода
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-peer)# description <DESCRIPTION><DESCRIPTION> – описание туннеля, задается строкой до 255 символов.

10

Задать значение keepalive (необязательно). esr(config-wireguard-peer)# keepalive timeout <SEC><SEC> – количество секунд, принимает значения [1..32767].
11Указать публичный ключ WireGuard-пира.esr(config-wireguard-peer)# public-key <NAME><NAME> –  имя приватного ключа, задается строкой до 31 символа.
12Указать pre-shared-key для настраиваемого пира (необязательно).esr(config-wireguard-peer)# pre-shared-key <TYPE> <WORD>

<TYPE> – тип аргумента, устанавливаемый в качестве симметричного ключа:

  • ascii-text – указать симметричный ключ в виде ASCII-текста, который будет сконвертирован в формат Base64;
  • base64 – указать симметричный ключ в формате Base64;
  • encrypted – указать симметричный ключ в зашифрованном виде.

<WORD> - вводимый симметричный ключ. В зависимости от типа аргумента имеет длину 32 символа для ascii-text, 44 символа для формата base64 и 64 символа для зашифрованного  вида. 

13Указать IP-адрес удаленного пира.esr(config-wireguard-peer)# remote address <ADDR><ADDR> – IP-адрес локального шлюза, задается в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255].
14Указать UDP-порт удаленного пира.esr(config-wireguard-peer)# remote port <PORT><PORT>– UDP-порт, принимает значения [1..65535].
15Указать список IP-адресов, которым будет разрешено находиться внутри туннеля.esr(config-wireguard-peer)# access-addresses <TYPE> 
{<FROM-ADDR> - <TO-ADDR> | <OBJ-GROUP-NETWORK-NAME> | <ADDR/LEN>}

<TYPE> – тип аргумента, устанавливаемый в качестве адреса:

  • address-range – указать диапазон IPv4-адресов;
  • object-group – указать имя профиля;
  • prefix – указать адрес подсети и префикс.

<FROM-ADDR> – начальный IP-адрес диапазона;
<TO-ADDR> – конечный IP-адрес диапазона;

<OBJ-GROUP-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа;

<ADDR/LEN> – IP-адрес и маска подсети.

16Активировать пир.esr(config-wireguard-peer)# enable

17

Активировать туннель.

esr(config-wireguard)# enable


18

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

esr(config-wireguard)# load-average <TIME>

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

19Включить запись статистики использования текущего туннеля (необязательно).

esr(config-wireguard)# history statistics


Scroll Pagebreak

Пример настройки

Задача:

Настроить WireGuard-клиента на маршрутизаторе:

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

Image Added

Решение:

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

Блок кода
esr# 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_client_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

Scroll Pagebreak

Создадим 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=

Включим пир и 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

Scroll Pagebreak

С помощью команды 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-l2tp)# ppp failure-count <NUM>

...

<NUM> – количество неудачных data-link тестов, задается в диапазоне [1..100].

Значение по умолчанию: 10.

...

Также для L2TP-клиента возможно настроить QoS в базовом или расширенном режимах (см. раздел Управление QoS).

Пример настройки

Задача:

Настроить PPTP-туннель на маршрутизаторе:

  • адрес PPTP-сервера 20.20.0.1;
  • учетная запись для подключения – логин: ivan, пароль: simplepass

Image Removed

Решение:

Создадим туннель L2TP:

Блок кода
esr(config)# tunnel l2tp 1 

Укажем учетную запись (пользователя Ivan) для подключения к серверу:

Блок кода
esr(config-l2tp)# username ivan password ascii-text simplepass

Укажем удаленный шлюз:

Блок кода
esr(config-l2tp)# remote address 20.20.0.1

Укажем зону безопасности:

Блок кода
esr(config-l2tp)# security-zone VPN

Укажем метод аутентификации IPsec:

Блок кода
esr(config-l2tp)# ipsec authentication method pre-shared-key

Укажем ключ безопасности для IPsec:

Блок кода
esr(config-l2tp)# ipsec authentication pre-shared-key ascii-text password

Включим туннель L2TP:

Блок кода
esr(config-l2tp)# enable

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

Блок кода
esr# show tunnels status l2tp

Счетчики входящих и отправленных пакетов можно посмотреть командой:

Блок кода
esr# show tunnels counters l2tp

Конфигурацию туннеля можно посмотреть командой:

Блок кода
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

...

7

...

8

...

<COUNT> – номер соответствующего пира, принимает значения [1..16].

...

10

...

<TYPE> – тип аргумента, устанавливаемый в качестве симметричного ключа:

  • ascii-text – указать симметричный ключ в виде ASCII-текста, который будет сконвертирован в формат Base64;
  • base64 – указать симметричный ключ в формате Base64;
  • encrypted – указать симметричный ключ в зашифрованном виде.

<WORD> - вводимый симметричный ключ. В зависимости от типа аргумента имеет длину 32 символа для ascii-text, 44 символа для формата base64 и 64 символа для зашифрованного  вида. 

...

<TYPE> – тип аргумента, устанавливаемый в качестве адреса:

  • address-range – указать диапазон IPv4-адресов;
  • object-group – указать имя профиля;
  • prefix – указать адрес подсети и префикс.

<FROM-ADDR> – начальный IP-адрес диапазона;
<TO-ADDR> – конечный IP-адрес диапазона;

<OBJ-GROUP-NAME> – имя профиля IP-адресов, задаётся строкой до 31 символа;

<ADDR/LEN> – IP-адрес и маска подсети.

...

17

...

Активировать туннель.

...

esr(config-wireguard)# enable

...

18

...

Задать интервал времени, за который усредняется статистика о нагрузке на туннель (необязательно).

...

esr(config-wireguard)# load-average <TIME>

...

<TIME> – интервал в секундах, принимает значения [5..150]

Значение по умолчанию: 5.

...

esr(config-wireguard)# history statistics

Пример настройки

Задача:

Настроить WireGuard-клиента на маршрутизаторе:

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

...

Решение:

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

  • загрузить на 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-туннель:

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

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

...