WireGuard
WireGuard — это крайне простой, быстрый и современный VPN, который использует передовые методы криптографии.
В системе ARMA Стена WireGuard функционирует путем добавления сетевого интерфейса, подобно ethN, который именуется как «wgN», где «N» — идентификатор, присвоенный интерфейсу (wg0, wg1, wg2, и т.д.).
Настройка интерфейса WireGuard
Указать IP-адрес для интерфейса:
set interfaces wireguard <wgN> address <address>где:
<wgN> - имя интерфейса WireGuard;
<address> - IP-адрес. Значение указывается в формате: <x.x.x.x/x> - для IPv4, <h:h:h:h:h:h:h:h/x> - для IPv6.
Добавить текстовое описание для интерфейса:
set interfaces wireguard <wgN> description <description>где <description> - текстовое описание интерфейса.
Генерация ключей (приватного и публичного) для использования в WireGuard:
admin@ngfwos:~$ generate pki wireguard key-pairПример генерации приватного и публичного ключа:
admin@ngfwos:~$ generate pki wireguard key-pair Private key: iP/CtqjqXCU2DZI6ne/Suz2XXXSaKtKDJYXUWuxBVWg= Public key: mnLBjPePCpki3wZ6gXXXfmZ9g/4ATKPKoTQdRMOq/Hw= admin@ngfwos:~$
Установить приватный ключ для интерфейса WireGuard:
set interfaces wireguard <wgN> private-key <private-key>где <private-key> - приватный ключ в кодировке Base64.
Генерация ключей (приватного и публичного) для использования в WireGuard и установка приватного ключа на интерфейс WireGuard:
admin@ngfwos:~$ generate pki wireguard key-pair install interface <wgN>Данная команда выполняет функции двух предшествующих. Она осуществляет генерацию ключей и сохраняет закрытый ключ в соответствующей секции конфигурационного файла.
Установить порт, который будет использоваться интерфейсом WireGuard для прослушивания входящих подключений:
set interfaces wireguard <wgN> port <1-65535>где <1-65535> - номер порта. Возможно указать значение в диапазоне от «1» до «65535».
Создать блок настроек удалённого узла (пир) в интерфейсе Wireguard:
set interfaces wireguard <wgN> peer <name>где <name> - имя пира, с которым будет установлен защищённый туннель.
7.1. Установить IP-адрес пира:
set interfaces wireguard <wgN> peer <name> address <address>где <address> - IP-адрес в формате <x.x.x.x> для IPv4 или <h:h:h:h:h:h:h:h> для IPv6.
7.2. Указать сети, которой разрешено проходить через пир:
set interfaces wireguard <wgN> peer <name> allowed-ips <address>где <address> - сети в формате <x.x.x.x/х> или <h:h:h:h:h:h:h:h/x>. Возможно определить и маршрутизировать несколько сетей.
Примечание
Возможно установить один и тот же параметр «allowed_ips» для нескольких пиров WireGuard.
7.3. Установить список IP-адресов или сетей, которые могут проходить через пир:
set interfaces wireguard <wgN> peer <name> allowed-ips <address>где <address> - адрес сети. Возможно определить и
7.4. Добавить текстовое описание для пира:
set interfaces wireguard <wgN> peer <name> description <description>7.5. Отключение пира с сохранением текущих настроек:
set interfaces wireguard <wgN> peer <name> disable7.6. Установить интервал отправки сообщений проверки соединения:
set interfaces wireguard <wgN> peer <name> persistent-keepalive <1-65535>где <1-65535> - значение интервала в секундах. Возможно указать значение в диапазоне от «1» до «65535».
7.7. Установить номер порта, используемого для соединения с пиром:
set interfaces wireguard <wgN> peer <name> port <1-65535>где <1-65535> - номер порта, по которому локальное устройство будет доступно для построения туннеля через интерфейс WireGuard. Возможно указать значение в диапазоне от «1» до «65535».
7.8. Указать открытый ключ пира в кодировке base64:
set interfaces wireguard <wgN> peer <name> public-key <public-key>где <public-key> - открытый ключ.
7.9. Установить предварительно согласованный ключ в кодировке base64 для пира:
set interfaces wireguard <wgN> peer <name> preshared-key <preshared-key>где <preshared-key> - предварительно согласованный ключ.
Параметр обеспечивает дополнительный уровень защиты для VPN-соединения посредством применения предварительно согласованного ключа для шифрования данных. Это означает, что сетевой трафик между узлами будет дополнительно защищён с использованием указанного ключа, что значительно усложняет возможность перехвата и дешифровки данных для потенциальных злоумышленников.
Указать размера MTU для интерфейса:
set interfaces wireguard <wgN> mtu <mtu>где <mtu> - размер MTU. Возможно указать значения в диапазоне от «68» до «16000».
Включает режим, при котором для каждого пира создается отдельный поток обработки на указанном интерфейсе:
set interfaces wireguard <wgN> per-client-threadПримечание
Опция per-client-thread является факультативной. Она позволяет каждому клиентскому соединению обрабатываться в отдельном потоке, что улучшает параллельную обработку и повышает общую производительность системы, особенно на многопроцессорных архитектурах с поддержкой многопоточности. Сегментация обработки запросов на уровне клиентских потоков может сократить время отклика системы за счёт уменьшения конкуренции за ресурсы центрального процессора между различными клиентскими соединениями.
Установить метку (firewall mark), которая будет присвоена всем пакетам, отправляемых через интерфейс:
set interfaces wireguard <wgN> fwmark <number>где <number> - 32-битное значение, устанавливаемое для всех исходящих пакетов. По умолчанию используется значение «0» - отключено.
Отключение интерфейса с сохранением текущих настроек:
set interfaces wireguard <wgN> disable
Дополнительные настройки интерфейса WireGuard
Установка значения TCP MSS:
set interfaces wireguard <wgN> ip adjust-mss <mss | clamp-mss-to-pmtu>где:
<mss> - значение MSS. Возможно указать значение в диапазоне от «536» до «65535».
<clamp-mss-to-pmtu> - автоматически устанавливать MSS в нужное значение.
Поскольку обнаружение PMTU в сети Интернет работает нестабильно, иногда возникает необходимость ограничить значение TCP MSS. Это поле находится в опциях TCP в части SYN-пакета. Установив значение MSS, система сообщает удалённой стороне, что не следует отправлять пакеты размером больше этого значения.
Установка тайм-аута записи в ARP-кэш для интерфейса:
set interfaces wireguard <wgN> ip arp-cache-timeout <1-86400>где <1-86400> - значение тайм-аута записи в ARP-кэш в секундах. Возможно указать значение в диапазоне от «1» до «86400». По умолчанию используется значение «30».
Отключить фильтрацию ARP на интерфейсе:
set interfaces wireguard <wgN> ip disable-arp-filterЕсли параметр не установлен (по умолчанию), это позволяет иметь несколько сетевых интерфейсов в одной подсети и отвечать на ARP для каждого интерфейса в зависимости от того, будет ли ядро направлять пакет с IP-адресом ARP через этот интерфейс. Для этого необходимо использовать маршрутизацию на основе источника.
Отключить переадресацию IP на интерфейсе:
set interfaces wireguard <wgN> ip disable-forwardingЕсли параметр установлен, интерфейс переходит в режим хоста, и переадресация IPv6 на этом интерфейсе отключается.
Включить направленную широковещательную пересылку на интерфейсе:
set interfaces wireguard <wgN> ip enable-directed-broadcastВ случае активации данной опции, входящие пакеты направленной широковещательной рассылки IP будут перенаправляться через указанный интерфейс. В случае если данный параметр не задан (по умолчанию), входящие пакеты направленной широковещательной рассылки IP не будут передаваться.
Включить прием ARP пакетов на интерфейсе:
set interfaces wireguard <wgN> ip enable-arp-acceptОпределяет поведение для ARP-пакетов, IP-записи которых ещё не присутствуют в ARP-таблице. Если эта настройка включена, то создаются новые записи в ARP-таблице. Как ответы, так и запросы типа Gratuitous ARP будут вызывать обновление ARP-таблицы, если эта настройка включена. Если в ARP-таблице уже содержится IP-адрес кадра Gratuitous ARP, то ARP-таблица будет обновлена независимо от того, включена или выключена эта настройка.
Включить анонсирование ARP пакетов на интерфейсе:
set interfaces wireguard <wgN> ip enable-arp-announceЕсли параметр не задан, используется любой локальный адрес, который настроен на любом интерфейсе. Если параметр установлен, рекомендуется избегать использования локальных адресов, которые не входят в подсеть цели для данного интерфейса. Этот режим полезен, когда целевые узлы, доступные через данный интерфейс, требуют, чтобы IP-адрес источника в ARP-запросах был частью их логической сети, настроенной на принимающем интерфейсе. При генерации запроса система проверяем все подсети, включающие целевой IP-адрес, и сохраняем адрес источника, если он принадлежит такой подсети. Если подходящей подсети не найдено, система выбирает адрес источника в соответствии с правилами для уровня 2.
Включить игнорирование ARP пакетов на интерфейсе:
set interfaces wireguard <wgN> ip enable-arp-ignoreДанный параметр определяет режимы отправки ответов на ARP-запросы, которые разрешают локальные целевые IP-адреса. Если параметр включён, ответ будет отправлен только в том случае, если целевой IP-адрес является локальным адресом, настроенным на входящем интерфейсе. Если параметр отключён (по умолчанию), ответ будет получен для любого локального целевого IP-адреса, настроенного на любом интерфейсе.
Включить прокси ARP на интерфейсе:
set interfaces wireguard <wgN> ip enable-proxy-arpПрокси ARP позволяет интерфейсу отвечать своим MAC-адресом на ARP-запросы IP-адресов назначения в подсетях, подключенных к другим интерфейсам системы. Последующие пакеты, отправленные на эти IP-адреса назначения, пересылаются системой соответствующим образом.
Включить прокси ARP частного VLAN на интерфейсе:
set interfaces wireguard <wgN> ip proxy-arp-pvlanРазрешить ответы ARP-прокси с того же интерфейса, с которого был получен ARP-запрос или запрос на предложение. Это необходимо для поддержки функций Ethernet-коммутаторов, описанных в RFC 3069, где отдельные порты не могут напрямую связываться друг с другом, но могут связываться с вышестоящим маршрутизатором. Как указано в RFC 3069, этого можно достичь путём включения прокси-ARP.
Необязательно использовать вместе с proxy_arp.
Включить политику проверки источника по обратному пути, как указано в RFC 3704:
set interfaces wireguard <wgN> ip|ipv6 source-validation <strict | loose | disable>где <strict | loose | disable> - режим проверки источника. Возможно указать следующие значения:
strict - каждый входящий пакет проверяется по FIB, и принимается только если пришёл через оптимальный (наилучший) обратный путь, определенный в таблице маршрутизации. Все пакеты, не удовлетворяющие этому условию, автоматически отбрасываются.
loose - адрес источника каждого входящего пакета также проверяется по FIB, и если адрес источника не достижим ни через один интерфейс, проверка пакета будет неудачной.
disable - нет проверки источника.
В настоящее время в RFC 3704 рекомендуется включать strict режим для предотвращения подмены IP адресов в результате DDos атак. При использовании асимметричной или другой сложной маршрутизации рекомендуется использовать loose режим.
Включить получение IPv6-адреса с помощью автоконфигурации без статического изменения (SLAAC):
set interfaces wireguard <wgN> ipv6 address autoconfВ соответствии с RFC 4862, хосты IPv6 могут автоматически настраиваться при подключении к сети IPv6 с использованием протокола Neighbor Discovery Protocol (NDP) через сообщения ICMPv6 об обнаружении маршрутизатора. При первом подключении к сети хост отправляет многоадресный запрос link-local router solicitation для получения параметров конфигурации. Маршрутизаторы отвечают на этот запрос пакетом router advertisement, содержащим параметры конфигурации уровня Интернета.
Примечание
Данный метод автоматически отключает пересылку трафика IPv6 на сетевом интерфейсе.
Включить префикс EUI-64 на основе MAC адреса для IPv6 адреса интерфейса:
set interfaces wireguard <wgN> ipv6 address eui64 <prefix>где <prefix> - cеть IPv6 в формате <h:h:h:h:h:h:h:h/64>.
Удалить локальный адрес IPv6 по умолчанию для интерфейса:
set interfaces wireguard <wgN> ipv6 address no-default-link-local
Отключить IP переадресацию на интерфейсе:
set interfaces wireguard <wgN> ipv6 disable-forwardingВ случае установки, интерфейс будет переведен в режим хоста, а переадресация IPv6 на данном интерфейсе будет отключена.
Установить значения TCP MSS:
set interfaces wireguard <wgN> ipv6 adjust-mss <mss | clamp-mss-to-pmtu>где:
<mss> - значение MSS. Возможно указать значение в диапазоне от «536» до «65535».
<clamp-mss-to-pmtu> - автоматически устанавливать MSS в нужное значение.
Принимать обнаружение дублирующегося адреса:
set interfaces wireguard <wgN> ipv6 accept-dad <0-2>где <0-2> - режим приёма DAD. Возможно указать следующие значения:
0 - отключить DAD;
1 - включить DAD (по умолчанию);
2 - включить DAD и отключить работу IPv6, если обнаружен дублированный MAC-адрес link-local.
Установить количество сообщений NS для отправки при выполнении DAD:
set interfaces wireguard <wgN> ipv6 dup-addr-detect-transmits <n>где <n> - количество NS-сообщений. В случае установки значения «0», функция обнаружения дубликатов адресов (DAD) будет отключена. По умолчанию используется значение «1».
Настроить временя достижимости для IPv6-адресов на интерфейсе WireGuard:
set interfaces wireguard <wgN> ipv6 base-reachable-time <1-86400>где <1-86400> - время в секундах, в течение которого соседний узел считается достижимым после последнего успешного обмена сообщениями. Возможно указать значение в диапазоне от «1» до «86400». По умолчанию используется значение «30». Это значение используется для расчёта времени жизни записей в таблице соседей.
Разместить интерфейс в указанном экземпляре VRF:
set interfaces wireguard <wgN> vrf <vrf>где <vrf> - имя экземпляра VRF.
SPAN
Функция зеркалирования интерфейсов в ARMA Стена позволяет копировать входящий и исходящий трафик интерфейса на другой интерфейс. Функция используется для анализа трафика и должна поддерживаться принимающим устройством, например, коммутатором.
Для настройки зеркалирования интерфейса WireGuard для входящего трафика необходимо ввести команду:
set interfaces wireguard <wgN> mirror ingress eth1Входящий трафик на интерфейсе «wgN» копируется на интерфейс «eth1». Интерфейсы приведены в качестве примера.
Для настройки зеркалирования интерфейса WireGuard для исходящего трафика необходимо ввести команду:
set interfaces wireguard <wgN> mirror egress eth1Исходящий трафик на интерфейсе «wgN» копируется на интерфейс «eth1». Интерфейсы приведены в качестве примера.
Настройка WireGuard в режиме «сеть - сеть»
В качестве примера настройки WireGuard в режиме «сеть - сеть» будет использоваться схема стенда, представленная на рисунке (см. Рисунок – Схема стенда для настройки VPN в режиме «сеть - сеть»).

Рисунок – Схема стенда для настройки VPN в режиме «сеть - сеть»
Генерация ключей
Для генерации ключей на обоих ARMA Стена необходимо в режиме эксплуатации ввести следующую команду:
admin@ngfwos:~$ generate pki wireguard key-pair
Автоматически будет выведено содержимое закрытого и открытого ключей – «Private key» и «Public key» соответственно.
Настройка ARMA Стена 1
Настройка туннеля
Для конфигурирования туннельного интерфейса ARMA Стена 1 необходимо ввести следующие команды:
set interfaces wireguard wg01 address 192.168.0.1/24 set interfaces wireguard wg01 description 'VPN-to-Client' set interfaces wireguard wg01 peer Client address 203.0.113.2 set interfaces wireguard wg01 peer Client allowed-ips 10.0.2.0/24 set interfaces wireguard wg01 peer Client port 51820 set interfaces wireguard wg01 peer Client public-key 'ExAmpLekeyCl' set interfaces wireguard wg01 port 51820 set interfaces wireguard wg01 private-key 'ExAmpLePrivatekeyS'где:
«192.168.0.1/24» – локальный IP-адрес;
«VPN-to-Client» – описание интерфейса «wg01»;
«10.0.2.0/24» – удалённая сеть;
«192.168.0.0/24» – туннельная сеть;
«203.0.113.2» – IP-адрес интерфейса ARMA Стена 2 с доступом к сети Интернет;
«51820» – порт;
«ExAmpLekeyCl» – содержимое открытого ключа ARMA Стена 2;
«ExAmpLePrivatekeyS» – содержимое закрытого ключа ARMA Стена 1.
Зафиксировать изменения с помощью ввода команд «commit» и «save».
Настройка статического маршрута
Для настройки статического маршрута на ARMA Стена 1 необходимо ввести следующую команду:
set protocols static route 10.0.2.0/24 interface wg01где «10.0.2.0/24» – удалённая сеть.
Зафиксировать изменения с помощью ввода команд «commit» и «save».
Настройка ARMA Стена 2
Настройка туннеля
Для конфигурирования туннельного интерфейса ARMA Стена 2 необходимо ввести следующие команды:
set interfaces wireguard wg01 address 192.168.0.2/24 set interfaces wireguard wg01 description 'VPN-to-Server' set interfaces wireguard wg01 peer Server address 198.51.100.51 set interfaces wireguard wg01 peer Server allowed-ips 10.0.1.0/24 set interfaces wireguard wg01 peer Server port 51820 set interfaces wireguard wg01 peer Server public-key "ExAmpLekeyS" set interfaces wireguard wg01 port 51820 set interfaces wireguard wg01 private-key 'ExAmpLePrivatekeyCl'где:
«192.168.0.2/24» – локальный IP-адрес;
«VPN-to-Server» – описание интерфейса «wg01»;
«10.0.1.0/24» – удалённая сеть;
«192.168.0.0/24» – туннельная сеть;
«198.51.100.51» – IP-адрес интерфейса ARMA Стена 1 с доступом к сети Интернет;
«51820» – порт;
«ExAmpLekeyS» – содержимое открытого ключа ARMA Стена 1;
«ExAmpLePrivatekeyCl» – содержимое закрытого ключа ARMA Стена 2.
Зафиксировать изменения с помощью ввода команд «commit» и «save».
Настройка статического маршрута
Для настройки статического маршрута на ARMA Стена 2 необходимо ввести следующую команду:
set protocols static route 10.0.1.0/24 interface wg01где «10.0.1.0/24» – удалённая сеть.
Зафиксировать изменения с помощью ввода команд «commit» и «save».