Построение L2 VPN туннеля между несколькими шлюзами «С-Терра Шлюз DP» в топологии звезда

Скачать в формате PDF

Настоящий документ содержит описание способа совместного использования Продуктов компании ООО «С-Терра СиЭсПи» и Продуктов третьих производителей.

ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов. Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.

Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах только после тестовой и/или опытной эксплуатации.

Введение

Данный сценарий описывает настройку «С-Терра Шлюз DP» для безопасного взаимодействия между защищаемыми подсетями центрального офиса и филиалов на втором уровне модели OSI (L2 VPN). Обеспечение безопасного взаимодействия достигается путем шифрования и туннелирования трафика с применением отечественных отраслевых стандартов ГОСТ и протокола IPsec. Безопасное взаимодействие между защищаемыми подсетями филиалов осуществляется через криптошлюз центрального офиса.

Все остальные соединения на третьем уровне модели OSI от/на «С-Терра Шлюз DP» разрешены, но защищаться при помощи IPsec не будут.

В рамках данного сценария для аутентификации партнеры будут использовать сертификаты. В качестве криптопровайдера будет использована криптографическая библиотека, разработанная компанией «С-Терра СиЭсПи». Криптошлюзы – «С-Терра Шлюз DP» версии 4.3.

Предварительные требования

Требования к материально-техническому обеспечению

Для переноса запросов и сертификатов между криптошлюзами и центром выпуска сертификатов требуется USB Flash накопитель.

Требования к квалификации администратора

Администратор должен обладать обширными знаниями в области сетевой информационной безопасности, иметь опыт работы с аналогичным оборудованием/программным обеспечением, знать и понимать следующие технологии и протоколы: PKI, IPsec, routing, switching.

Также администратор должен иметь опыт развертывания базового сценария, который описан в документе «Построение L2 VPN туннеля между двумя «С-Терра Шлюз DP».

Требования к инфраструктуре

1.    Требования к устройствам.

1.1.      «С-Терра Шлюз DP».

1.1.1      Устройства «С-Терра Шлюз DP» должны быть в заводском состоянии.

1.2.      Центр выпуска сертификатов.

1.2.1      Должен быть настроен центр выпуска сертификатов (удостоверяющий центр, далее УЦ) для IPsec. Устройство с именем Certification-authority на схеме.

1.2.2      Для выпуска цифровых сертификатов допускается использование встроенного в OC Windows Server 2008R2 (или новее) удостоверяющего центра совместно с сертифицированным СКЗИ «КриптоПро» CSP 4.0 (или новее).

1.2.3      Для тестовых целей можно использовать тестовый УЦ от «КриптоПро» (веб-интерфейс: https://www.cryptopro.ru/certsrv/certrqxt.asp).

Категорически запрещено использование тестового УЦ от «КриптоПро» в производственной (боевой) эксплуатации, так как в данном случае отсутствует возможность контролировать процесс выпуска сертификатов и, соответственно, процедуру аутентификации.

1.3.      HTTP сервер для распространения списка отозванных сертификатов.

1.3.1      Функционирующий HTTP сервер для распространения списка отозванных сертификатов (СОС). Устройство с именем CRL-distribution-point на схеме. Если по объективным причинам использование СОС не представляется возможным или не требуется, то проверку СОС можно отключить в CLI.

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

2.    Требования к сетевому взаимодействию.

2.1.      Между криптошлюзами должна быть обеспечена IP связность.


 

Схема взаимодействия

Рисунок 1. Схема взаимодействия


 

Общая логика работы

1.    Размещение устройств.

1.1.      В центральном офисе размещаются: центр выпуска сертификатов (Certification-authority), криптошлюз «С-Терра Шлюз 40G» (Hub1), коммутатор (Int-switch1-Hub1) и персональный компьютер (host-behind-hub1).

1.2.      В филиалах размещаются: криптошлюзы «С-Терра Шлюз 10G» (Spoke1 и Spoke2) и персональные компьютеры (host-behind-spoke1 и host-behind-spoke2).

1.3.      В неконтролируемом сегменте (синее облако на схеме) размещаются: HTTP сервер для распространения списка отозванных сертификатов (CRL-distribution-point), маршрутизатор (Router1).

2.    Подключение к сети Интернет.

2.В данном сценарии для эмуляции сети Интернет используются маршрутизатор Router1.

Подключение к сети Интернет на устройствах «С-Терра Шлюз DP» будет считаться успешным, если по протоколу ICMP (или «ping») будет доступен HTTP сервер для распространения списка отозванных сертификатов (устройство CRL-distribution-point на схеме).

2.1.      Криптошлюз Hub1 подключается к сети Интернет с помощью статической маршрутизации (маршрут по умолчанию через маршрутизатор Router1).

2.2.      Криптошлюз Spoke1 подключается к сети Интернет с помощью статической маршрутизации (маршрут по умолчанию через маршрутизатор Router1).

2.3.      Криптошлюз Spoke2 подключается к сети Интернет с помощью статической маршрутизации (маршрут по умолчанию через маршрутизатор Router1).

3.    L2 VPN/L3 VPN.

Общие сведения

Высокопроизводительный L2 VPN реализуется самим Продуктом «С-Терра Шлюз DP». Главное отличие «С-Терра Шлюз DP» от модуля «С-Терра L2», который реализует аналогичный функционал, – это производительность шифрования, которая может достигать 50 Gbit/s. Также важно понимать, что защищаемый при помощи «С-Терра Шлюз DP» транзитный L2 трафик не может быть обработан TCP/IP стеком операционной системы (например, нельзя применить к такому трафику правила iptables).

Логика обработка фреймов/пакетов

«С-Терра Шлюз DP» обрабатывает фреймы/пакеты следующим образом. Все фреймы, поступившие на LAN интерфейс, упаковываются в пакеты протокола EtherIP (протокол 97), далее эти пакеты зашифровываются в соответствии с политикой безопасности и отправляются с WAN интерфейса (пакеты с LAN интерфейса не могут попасть в TCP/IP стек ОС). Пакеты, поступившие на WAN интерфейс, делятся на две группы. К первой группе относятся транзитные зашифрованные пакеты L2 VPN, они расшифровываются и отправляются с LAN интерфейса, данные пакеты никогда не попадают в TCP/IP стек ОС. Ко второй группе относятся пакеты, которые предназначены в TCP/IP стек ОС, как правило это зашифрованный трафик (L3 VPN) для удаленного управления «С-Терра Шлюз DP» и открытый трафик (с некоторыми исключениями при работе криптошлюза за NAT).

Логика настройки шифрования

Настройка шифрования трафика производится в два этапа. Этап первый – настройка L2 части (либо data plane), которая частично осуществляется в процессе инициализации «С-Терра Шлюз DP» мастером настроек, либо полностью через конфигурационный файл /opt/VPNagent/etc/ipsm_dpdk.cfg. На втором этапе настраивается политика безопасности через консоль cisco-like.

Для шифрования транзитного L2 трафика (L2 VPN) крипто-карту нужно прикреплять ко всем специальным интерфейсам, которые имеют имя DP<N> (данные интерфейсы по сути являются ядрами процессора). Пример:

interface DP0

 crypto map L2VPN

 crypto ipsec stream-id 1000

!

interface DP1

 crypto map L2VPN

 crypto ipsec stream-id 1001

!

...

!

interface DP44

 crypto map L2VPN

 crypto ipsec stream-id 1044

!

Для организации защиты удаленного управления «С-Терра Шлюз DP» (L3 VPN) крипто-карту нужно прикреплять к интерфейсу, который имеет имя vEthernet<N> и соответствует WAN. Пример:

interface vEthernet0

 crypto map L3VPN

 ip address 172.16.1.2 255.255.255.0

 mtu 9000

!

Если для удаленного управления используется «С-Терра Клиент» под Windows c IKECFG адресом, то в качестве защищаемого Mgmt адреса «С-Терра Шлюз DP» нельзя указывать IP адрес на WAN интерфейсе. Создайте для этого на «С-Терра Шлюз DP» либо loopback интерфейс, либо назначьте адрес на свободный сетевой интерфейс (выполняется средствами ОС).

4.    Параметры безопасного взаимодействия.

Весь трафик на втором уровне модели OSI подсетей центрального офиса и филиалов защищается с использованием алгоритмов ГОСТ и протокола IPsec в туннельном режиме.

Инициировать защищенное соединение может как трафик из филиалов в центр, так и наоборот, из центра в филиалы.

4.1.      Параметры протокола IKE:

·         Аутентификация при помощи цифровых сертификатов, алгоритм подписи – ГОСТ Р 34.10-2012 (ключ 256 бит);

·         Алгоритм шифрования – ГОСТ 28147-89 (ключ 256 бит);

·         Алгоритм вычисления хеш-функции – ГОСТ Р 34.11-2012 ТК26 (ключ 256 бит);

·         Алгоритм выработки общего ключа (аналог алгоритма Диффи-Хеллмана) – VKO_GOSTR3410_2012_256 (ключ 256 бит).

4.2.      Параметры протокола ESP для L2 VPN:

·         Комбинированный алгоритм шифрования и имитозащиты (контроль целостности) – ГОСТ Р 34.12-2015 "Кузнечик" (ключ 256 бит).


 

Настройка стенда

Настройка устройства Router1

1.    Настройте IP адрес – 172.16.100.1 и маску – 255.255.255.0 на сетевом интерфейсе ens192.

2.    Настройте IP адрес – 172.16.101.1 и маску – 255.255.255.0 на сетевом интерфейсе ens193.

3.    Настройте IP адрес – 172.16.1.1 и маску – 255.255.255.0 на сетевом интерфейсе ens224.

4.    Настройте IP адрес – 172.16.2.1 и маску – 255.255.255.0 на сетевом интерфейсе ens256.

5.    Разрешите прохождение IP трафика.

Настройка устройства host-behind-hub1

1.    Настройте IP адрес – 192.168.100.100 и маску – 255.255.255.0 на сетевом интерфейсе.

2.    Разрешите прием и отправку ICMP пакетов.

Настройка устройства host-behind-spoke1

1.    Настройте IP адрес – 192.168.100.101 и маску – 255.255.255.0 на сетевом интерфейсе.

2.    Разрешите прием и отправку ICMP пакетов.

Настройка устройства host-behind-spoke2

1.    Настройте IP адрес – 192.168.100.102 и маску – 255.255.255.0 на сетевом интерфейсе.

2.    Разрешите прием и отправку ICMP пакетов.


 

Настройка криптошлюза Hub1

Настройка будет происходить локально при помощи консольного подключения.

Настройка может осуществляться и удаленно (по SSH), но исключительно по доверенному каналу связи. Доверенным каналом связи может считаться канал в пределах контролируемой зоны в случае отсутствия в нем нарушителя. Доверенным каналом связи также считается канал, защищенный при помощи протокола IPsec.

Начальные настройки

Дата и время на всех криптошлюзах и УЦ должны быть одинаковы, так как для аутентификации используются цифровые сертификаты, в которых зафиксированы дата и время начала их действия и окончания. Также одинаковые дата и время на всей инфраструктуре облегчают поиск неисправностей по лог-файлам.

1.    Войдите в CLI разграничения доступа. Для этого, после появления сообщения:

S-Terra administrative console

введите логин и пароль для CLI разграничения доступа:

Пользователь и пароль по умолчанию: administrator, s-terra. Обязательно смените пароль для пользователя administrator при помощи команды change user password.

login as: administrator

administrator's password:

 

############################################################

System is not initialized. Please run "initialize" command to start initializat

ion procedure.

############################################################

 

administrator@sterragate]

2.    Установите правильный тип терминала (для putty тип терминала xterm) и требуемую ширину (для удобства работы), например:

administrator@sterragate] terminal terminal-type xterm

administrator@sterragate] terminal width 150

3.    Установите нужную временную зону и правильные дату и время на криптошлюзе, используя консоль linux bash. Для этого выполните следующие команды.

3.1.      Войдите в linux bash.

administrator@sterragate] system

Entering system shell...

3.2.      Установите нужную временную зону:

root@sterragate:~# dpkg-reconfigure tzdata

3.3.      Проверьте при помощи команды date дату и время и если они неправильные то, установите верные значения (формат – месяц/день/год часы:минуты)::

root@sterragate:~# date -s "07/11/2024 10:32"

Thu Nov  7  10:32:00 MSK 2024

4.    Установите надежный пароль для пользователя root (под данным пользователем осуществляется доступ по SSH в linux bash):

root@sterragate:~# passwd

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully

5.    Выйдите из linux bash обратно в CLI разграничения доступа:

root@sterragate:~# exit

logout

Leaving system shell...

administrator@sterragate]

6.    Запустите процедуру инициализации, в процессе которой будет запущен мастер начальных настроек L2 (data plane):

administrator@sterragate] initialize

6.1.      Пройдите инициализацию биологического ДСЧ, нажимая предлагаемые клавиши:

Progress: [********  ]

Press key: i

6.2.      Введите лицензию на Продукт GATEDP:

You have to enter license for S-Terra Gate DP

Available product codes:

GATE

GATEDP

MVPN

Enter product code: GATEDP

Enter customer code: Customer

Enter license number: 1XX

Enter license code: 43XXX-XXXXX- XXXXX - XXXXX - XXXXX

Your license:

  CustomerCode = Customer

  ProductCode  = GATEDP

  LicenseNumber= 1XX

  LicenseCode  = 43XXX-XXXXX- XXXXX - XXXXX - XXXXX

Is the above data correct? Yes

Active license:

CustomerCode= Customer

ProductCode=GATEDP

LicenseNumber=1XX

LicenseCode=43XXX-XXXXX- XXXXX - XXXXX – XXXXX

6.3.      Нажмите Enter, после чего запустится мастер начальных настроек L2 (data plane). Данный мастер изменяет файл /opt/VPNagent/etc/ipsm_dpdk.cfg, который используется сервисом ipsmapp:

Configuring IPSM:

This script will stop ipsmapp daemon and create new ipsm_dpdk.cfg. All ipsmapp settings will be reset. Do you want to continue? [Yes]

Restoring interfaces settings

6.3.1      Укажите количество портов (количество физических LAN и WAN интерфейсов для L2 (Mgmt интерфейсы не учитываются):

Enter amount of ports (2-4) [2] : 4

6.3.2      Введите количество потоков для обработки трафика (количество потоков соответствует количеству DP<N> интерфейсов):

 

По умолчанию, число потоков (threads) N для обработки трафика вычисляется по следующей формуле:

N = nproc_all - 2 - 3*ports_num,

где:

nproc_all – количество вычислительных потоков процессоров (это значение можно посмотреть в выводе команды nproc --all в линукс консоли шлюза или рассчитать исходя из спецификации установленных в конкретную платформу процессоров),

ports_num – количество портов для L2, заданное на предыдущем шаге.

 

В зависимости от ситуации, это число можно изменять (только в меньшую сторону). В схеме звезда, число потоков (threads) на шлюзах следует задавать так, чтобы число потоков (threads) на центральном шлюзе соответствовало сумме потоков на филиальных шлюзах. Подробнее в примерах ниже.

 

Пример 1 (схема «звезда» с двумя лучами; центральный шлюз – DP 40G, филиальные шлюзы – DP 25G):

На центральном шлюзе установлены два 64-х ядерных процессора с включенным Hyper-Threading. Суммарное количество вычислительных потоков процессоров: 2*64*2 = 256. Число потоков (threads) доступных для L2 по умолчанию: 256 - 2 - 3*4 = 242.

На каждом из двух филиальных шлюзов установлен один 64-х ядерный процессор с включенным Hyper-Threading. Количество вычислительных потоков процессоров на каждом из этих шлюзов: 64*2 = 128, сответственно, число потоков для обработки трафика (threads) по умолчанию: 128 - 2 - 3*2 = 120. Следовательно, сумма потоков для обработки трафика (threads) на всех филиальных шлюзах: 240.

Таким образом, на центральном шлюзе число потоков для обработки трафика (threads) следует сделать равным 240, на каждом филиальном шлюзе оставить по умолчанию (120).

 

Пример 2 (схема «звезда» с тремя лучами; центральный шлюз – DP 40G, филиальные шлюзы – DP 10G):

На центральном шлюзе установлены два 64-х ядерных процессора с включенным Hyper-Threading. Суммарное количество вычислительных потоков процессоров: 2*64*2 = 256. Число потоков (threads) доступных для L2 по умолчанию: 256 - 2 - 3*6 = 236.

На каждом из трех филиальных шлюзов установлены два 22-х ядерных процессора с включенным Hyper-Threading. Количество вычислительных потоков процессоров на каждом из этих шлюзов: 2*22*2 = 88, сответственно, число потоков для обработки трафика (threads) по умолчанию: 88 - 2 - 3*2 = 80. Следовательно, сумма потоков для обработки трафика (threads) на всех филиальных шлюзах: 240.

Таким образом, на центральном шлюзе число потоков для обработки трафика (threads) следует сделать равным 234, на каждом филиальном шлюзе: 78.

 

В данном сценарии число потоков (threads) N для обработки трафика будет уменьшено в целях снижения объема конфигурации, и будет составлять 16 для центрального шлюза и 8 для каждого филиального шлюза.

threads (1-30) [30] : 16

6.3.3      Выберите из предложенного списка PCI адрес для WAN порта. PORT0 – первый WAN интерфейс.

Port#   pci_id      Configured

-       03:00.0    

-       04:00.0    

-       0b:00.0    

-       13:00.0    

-       1b:00.0    

Данный список сформирован из всех физических сетевых интерфейсов, которые есть в криптошлюзе. В каждом конкретном случае PCI адреса могут отличаться. PCI адреса интерфейсов для WAN и LAN портов указаны в документации на ПАК.

Configuring PORT0

Enter pci_id for WAN interface : 03:00.0

6.3.4      Укажите IP адрес для первого WAN интерфейса (в данном сценарии - 172.16.100.2). Данный IP адрес будет назначен на интерфейс vEthernet0:

Enter IP-address for WAN interface (l3_ip) : 172.16.100.2

6.3.5       Укажите маску для IP адреса первого WAN интерфейса (в данном сценарии - 24):

Enter netmask for WAN interface (l3_mask) (0-32) [24] : 24

6.3.6      Укажите адрес шлюза по умолчанию для транзитного L2 (data plane) зашифрованного трафика (в данном сценарии – 172.16.100.1):

Enter default gateway IP-address (gw_ip) : 172.16.100.1

6.3.7      Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

6.3.8      Выберите из вновь предложенного списка PCI адрес для первого LAN порта. PORT1 – первый LAN интерфейс:

Port#   pci_id      Configured

PORT0   03:00.0     *

-       04:00.0    

-       0b:00.0    

-       13:00.0    

-       1b:00.0    

Из списка выше видно, что первый WAN порт уже сконфигурирован (символ * в столбце Configured):

Configuring PORT1

Enter pci_id to pair with 03:00.0 : 04:00.0

6.3.9      Укажите IP адрес источника для EtherIP туннеля (в данном сценарии – 100.100.101.1):

Данный адрес может не присутствовать в системе и быть любым, но должен совпадать с l2_dst_ip на криптошлюзе, с которым будет настраиваться L2 VPN. В данном сценарии – это Spoke1.

Enter source IP-address for l2-tunnel (l2_src_ip) : 100.100.101.1

6.3.10   Укажите IP адрес назначения для EtherIP туннеля (в данном сценарии – 100.100.101.2):

Данный адрес должен совпадать с l2_src_ip на криптошлюзе, с которым будет настраиваться L2 VPN. В данном сценарии – это Spoke1.

Enter destination IP-address for l2-tunnel (l2_dst_ip) : 100.100.101.2

6.3.11   Задайте MTU для WAN и LAN интерфейсов (в данном сценарии – 9000):

Если есть возможность, то всегда указывайте MTU на WAN интерфейсе минимум на 100 (сто) байт больше, чем максимальный MTU на защищаемых устройствах, чтобы избежать фрагментации и увеличить производительность. В этом случае MTU на LAN интерфейсе указывайте как максимальный MTU на защищаемых устройствах. Например, если MTU на защищаемых устройствах 9000, то MTU для WAN – 9100, MTU для LAN – 9000. Проверить наличие или отсутствие фрагментации можно при помощи утилиты kstat_show (параметр «frag ok»).

Enter MTU for WAN interface (68-9700) [9700] : 9000

Enter MTU for LAN interface (68-9700) [9600] : 9000

6.3.12   Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

6.3.13   Выберите из списка PCI адрес для второго WAN порта. PORT2 – второй WAN интерфейс.

Port#   pci_id      Configured

PORT0   03:00.0     *

PORT1   04:00.0     *

-       0b:00.0    

-       13:00.0    

-       1b:00.0

Configuring PORT2

Enter pci_id for WAN interface : 0b:00.0

6.3.14   Укажите IP адрес для второго WAN интерфейса (в данном сценарии - 172.16.101.2). Данный IP адрес будет назначен на интерфейс vEthernet2:

Enter IP-address for WAN interface (l3_ip) : 172.16.101.2

6.3.15   Укажите маску для IP адреса второго WAN интерфейса (в данном сценарии - 24):

Enter netmask for WAN interface (l3_mask) (0-32) [24] : 24

6.3.16   Укажите адрес шлюза по умолчанию для транзитного L2 (data plane) зашифрованного трафика (в данном сценарии – 172.16.100.1):

Enter default gateway IP-address (gw_ip) : 172.16.101.1

6.3.17   Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

6.3.18   Выберите из вновь предложенного списка PCI адрес для второго LAN порта. PORT3 – второй LAN интерфейс:

Port#   pci_id      Configured

PORT0   03:00.0     *

PORT1   04:00.0     *

PORT2   0b:00.0     *

-       13:00.0    

-       1b:00.0    

Configuring PORT3

Enter pci_id to pair with 0b:00.0 : 13:00.0

6.3.19   Укажите IP адрес источника для EtherIP туннеля (в данном сценарии – 100.100.102.1):

Enter source IP-address for l2-tunnel (l2_src_ip) : 100.100.102.1

6.3.20   Укажите IP адрес назначения для EtherIP туннеля (в данном сценарии – 100.100.102.2):

Enter destination IP-address for l2-tunnel (l2_dst_ip) : 100.100.102.2

6.3.21   Задайте MTU для WAN и LAN интерфейсов (в данном сценарии – 9000):

Enter MTU for WAN interface (68-9700) [9700] : 9000

Enter MTU for LAN interface (68-9700) [9600] : 9000

6.3.22   Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

6.3.23   Дождитесь окончания процедуры инициализации и мастера настроек:

Please wait...

 

INFO: Non-DP interface (pci_id: 0000:1b:00.0) name eth4 is now persistent

 

Port#   pci_id      Configured

PORT0   03:00.0     *

PORT1   04:00.0     *

PORT2   0b:00.0     *

PORT3   13:00.0     *

-       1b:00.0    

OK

 

 

Initialization completed.

Some settings will take effect after OS reboot only.

 

Network traffic is blocked.

To unblock network traffic, please setup the network security policy

or use "run csconf_mgr activate" command to activate the predefined

permissive network security policy now.

6.3.24   Включите прохождение сетевого трафика, загрузив предопределенную разрешающую политику:

administrator@sterragate] run csconf_mgr activate

Начальные настройки завершены.

Если вы хотите заново запустить мастер начальных настроек L2 (data plane), то выполните:

administrator@sterragate] run /opt/VPNagent/bin/configure_dp.sh

Настройка L2

В данном разделе будут описаны:

·         настройка фрагментации;

·         настройка механизма Path MTU Discovery;

·         настройка механизма изменения MSS в TCP пакетах;

·         настройка распределения потоков обработки трафика по портам.

1.    Перейдите в linux bash:

administrator@Hub1] system

Entering system shell...

root@sterragate:~#

2.    Уменьшите время сборки фрагментированных пакетов:

root@sterragate:~# drv_mgr set frag_reassemble_timeout 2

Value of "frag_reassemble_timeout" is set to 2.

3.    Дальнейшие настройки осуществляются через файл /opt/VPNagent/etc/ipsm_dpdk.cfg:

root@sterragate:~# vim.tiny /opt/VPNagent/etc/ipsm_dpdk.cfg

3.1.      Включите фрагментацию. Для этого на первом и на втором WAN портах (PORT0 и PORT2) раскомментируйте (символ комментария - «;») параметр dp_frag_ip и в качестве значения укажите IP адрес WAN интерфейса криптошлюзов, с которымы будет настраиваться L2 VPN (в данном сценарии – это IP адресa 172.16.1.2 и 172.16.2.2 соответственно). Также раскомментируйте параметр dp_frag_natt и задайте значение yes:

[PORT0]

pci_id = 03:00.0        

outer = yes             

l3_ip = 172.16.100.2    

l3_mask = 24            

gw_ip = 172.16.100.1   

pair_port = 1           

mtu = 9000              

...

dp_frag_ip = 172.16.1.2

dp_frag_natt = yes

...

 

[PORT2]

pci_id = 0b:00.0

outer = yes

l3_ip = 172.16.101.2

l3_mask = 24

gw_ip = 172.16.101.1

pair_port = 3

mtu = 9000

...

dp_frag_ip = 172.16.2.2

dp_frag_natt = yes

3.2.      Включите механизм Path MTU Discovery и изменение MSS в TCP пакетах на LAN портах (PORT1 и PORT3). Для этого раскомментируйте параметры pmtud, mssfix и выставите им значения: для pmtud - «значение MTU порта минус 100» (в данном сценарии – это значение 8900), для mssfix - «значение MTU порта минус 140» (в данном сценарии – это значение 8860):

[PORT1]

pci_id = 04:00.0       

l2_src_ip = 100.100.101.1

l2_dst_ip = 100.100.101.2

pair_port = 0          

mtu = 9000             

...

pmtud = 8900           

mssfix = 8860          

...   

 

[PORT3]

pci_id = 13:00.0       

l2_src_ip = 100.100.102.1

l2_dst_ip = 100.100.102.2

pair_port = 2          

mtu = 9000             

...

pmtud = 8900           

mssfix = 8860          

...   

 

3.3.      Распределите потоки обработки трафика между LAN портами (PORT1 и PORT3). В данном сценарии на шлюзе Hub1 задано 16 потоков (threads), сответственно, на каждый порт будет отведено по 8 потоков. Раскомментируйте параметры thr_count (число потоков на данном порту) и thr_start (порядковый номер (начиная с нуля) потока обработки трафика, с которого начинается отсчет указанного в thr_count числа потоков)  и выставите им следующие значения. Для порта PORT1: thr_start – 0, thr_count – 8. Для порта PORT3: thr_start – 8, thr_count – 8.

[PORT1]

pci_id = 04:00.0        

l2_src_ip = 100.100.101.1

l2_dst_ip = 100.100.101.2

pair_port = 0           

mtu = 9000              

thr_start = 0           

thr_count = 8           

...

 

[PORT3]

pci_id = 13:00.0        

l2_src_ip = 100.100.102.1

l2_dst_ip = 100.100.102.2

pair_port = 2           

mtu = 9000              

thr_start = 8           

thr_count = 8           

Таким образом для первого LAN порта будут назначены потоки 0-7, для второго – 8-15.

3.4.      Для применения настроек перезапустите сервис ipsmapp:

root@sterragate:~# systemctl restart ipsmapp.service

4.    Выйдите из linux bash:

root@sterragate:~# exit

logout

Leaving system shell...

Настройка L2 (data plane) завершена.

Настройки PKI (запросы и сертификаты)

Продукт не поддерживает разностные (delta) списки отзыва сертификатов, только базовые. Учитывайте это при выборе или развертывании УЦ.

Для аутентификации партнеров по IPsec можно использовать только цифровые сертификаты, выпущенные при помощи сертифицированного СКЗИ.

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

Закрытый ключ для сертификата криптошлюза будет сгенерирован при помощи утилиты cert_mgr с использованием биологического датчика случайных чисел (БИО ДСЧ). Если на криптошлюзе установлен аппаратный датчик случайных чисел, то для выработки случайных чисел по умолчанию будет использоваться аппаратный датчик. Закрытый ключ может храниться либо на файловой системе устройства, либо на защищенном ключевом носителе (токен). В данном сценарии закрытый ключ будет располагаться в специальном контейнере на файловой системе устройства. Если требуется, чтобы контейнер располагался на токене, то смотрите описание параметра create утилиты cert_mgr на портале документации http://doc.s-terra.ru.

В момент генерации ключевой пары будет также сгенерирован запрос на локальный сертификат криптошлюза. Данный запрос для его последующей доставки на УЦ будет сохранен на USB Flash накопитель.

Настройка осуществляется в CLI разграничения доступа.

При выполнении сторонних команд в CLI разграничения доступа/консоли cisco-like перед командой нужно указывать ключевое слово run. Автодополнение для команд, указываемых после run не поддерживается.

1.    Генерация закрытого ключа и запроса на сертификат криптошлюза.

1.1.      Вставьте USB Flash накопитель в свободный USB порт криптошлюза (накопитель будет автоматически примонтирован).

1.2.      Определите имя (идентификатор) USB Flash накопителя на криптошлюзе:

administrator@sterragate] dir media:

    1  dr-x         4096  Thu Nov  7 10:40:32 2019  1482-7CB1

Имя (идентификатор) USB Flash накопителя - 1482-7CB1.

1.3.      Запустите процесс генерации закрытого ключа и запроса на сертификат криптошлюза с сохранением файла запроса на USB Flash накопителе (закрытый ключ остается на криптошлюзе):

administrator@sterragate] run cert_mgr create -subj "C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1" -GOST_R341012_256 -fb64 media:1482-7CB1/hub1.request

·         ключ subj задает отличительное имя сертификата (Distinguished Name, DN);

Отличительное имя сертификата должно быть уникальным для каждого устройства.

·         ключ -GOST_R341012_256 задает использование алгоритма подписи – ГОСТ Р 34.10-2012 (ключ 256 бит).

На УЦ для поддержки алгоритма ГОСТ Р 34.10-2012 (ключ 256 бит) должно быть установлено СКЗИ «КриптоПро CSP» версии 4.0 или новее.

·         ключ -fb64 задает месторасположение и формат представления запроса на сертификат; будет использован формат представления BASE64 с сохранением файла запроса в корень USB Flash накопителя под именем hub1.request.

Нажимайте предлагаемые клавиши на клавиатуре для инициализации БИО ДСЧ:

Progress: [********* ]

Press key: U

После завершения работы БИО ДСЧ файл запроса будет сохранен в корне USB Flash накопителя:

administrator@sterragate] dir media:1482-7CB1/

 1 -rwx 473 Thu Jul  4 10:40:32 2019 hub1.request

Настоятельно рекомендуется сохранить контейнер закрытого ключа при помощи утилиты cont_mgr. Контейнер может понадобиться в случае восстановления криптошлюза при отказе HDD/SSD диска. Носитель с файлом контейнера нужно хранить в защищенном и недоступном для третьих лиц месте.

1.4.      Отмонтируйте и извлеките USB Flash накопитель (посмотреть точки монтирования можно при помощи команды run mount):

administrator@sterragate] run umount /media/1482-7CB1

2.    Выпуск сертификата криптошлюза на УЦ и импортирование сертификатов УЦ и криптошлюза в базу Продукта.

2.1.      Доставьте файл запроса на УЦ и выпустите по нему сертификат криптошлюза.

2.2.      Скопируйте выпущенный сертификат для криптошлюза под именем hub1.cer и сертификат УЦ под именем ca.cer в корень USB Flash накопителя.

2.3.      Вновь вставьте USB Flash накопитель, содержащий файлы сертификатов, в свободный порт USB на криптошлюзе.

2.4.      Убедитесь в наличии сертификатов на USB Flash накопителе:

administrator@sterragate] dir media:1482-7CB1/

 1 -rwx 592 Thu Jul  4 10:40:32 2019 ca.cer

 2 -rwx 804 Thu Jul  4 10:40:32 2019 hub1.cer

 3 -rwx 473 Thu Jul  4 10:40:32 2019 hub1.request

Сохраняйте сертификаты. Они могу понадобиться в случае восстановления криптошлюза при отказе HDD/SSD диска.

2.5.      Импортируйте сертификат УЦ в базу Продукта:

administrator@sterragate] run cert_mgr import -f media:1482-7CB1/ca.cer -t

·         ключ –f задает месторасположение файла сертификата;

·         ключ –t используется для импортирования доверенного (trusted) сертификата УЦ.

2.6.      Импортируйте сертификат криптошлюза в базу Продукта:

administrator@sterragate] run cert_mgr import -f media:1482-7CB1/hub1.cer

2.7.      Убедитесь, что сертификаты успешно импортированы в базу Продукта:

administrator@sterragate] run cert_mgr show

Found 2 certificates. No CRLs found.

1 Status: trusted C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 Status: local   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

Видно, что сертификат УЦ импортирован как trusted, а сертификат криптошлюза как local (local означает, что для данного сертификата есть соответствующий ключевой контейнер).

2.8.      Выполните проверку статуса сертификатов в базе Продукта:

administrator@sterragate] run cert_mgr check

1 State: Inactive C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

                  Certificate can not be verified.

2 State: Inactive C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

                  Certificate can not be verified.

Видно, что все сертификаты имеют статус Inactive (неактивный) с пометкой: «Certificate can not be verified» (сертификат не может быть проверен). Причиной этому является включенный по умолчанию в консоли cisco-like механизм проверки списка отозванных сертификатов (далее СОС или CRL). Так как в базе Продукта СОС отсутствует, поэтому проверка не может быть осуществлена. Далее будет описан процесс настройки автоматической загрузки СОС и импортирование его в базу Продукта. Загрузка СОС осуществляется по протоколу HTTP с заданной периодичностью.

Настройка паролей доступа к консоли cisco-like

1.    Войдите в cisco-like консоль из CLI разграничения доступа:

Пользователь и пароль по умолчанию cscons, csp. Обязательно смените пароль для пользователя cscons, так как под этим пользователем осуществляется доступ по SSH в cisco-like консоль. Также не забудьте сменить enable пароль.

administrator@sterragate] configure

sterragate login: cscons

Password:

S-Terra Gate DP 4.3.XXXXX (amd64)

sterragate#

2.    Смените пароль для пользователя cscons и на enable:

sterragate#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

sterragate(config)#username cscons secret 0 ПАРОЛЬ

sterragate(config)#enable secret 0 ПАРОЛЬ

Настройка сетевых параметров

Настройка сетевых параметров проходит в два эта. Первый – настройка параметров sysctl и настройка Mgmt интерфейса (eth4) в linux bash (данный интерфейс не представлен на схеме). Второй – настройка маршрутизации в cisco-like консоли.

Первый этап.

1.    Перейдите в linux bash:

sterragate(config)#end

sterragate#exit

administrator@sterragate] system

Entering system shell...

2.    Откройте на редактирование конфигурационный файл /etc/sysctl.conf и добавьте в него следующий параметр:

net.ipv4.conf.all.arp_ignore=1

Пояснение: параметр arp_ignore=1 указывает системе отвечать только на те ARP запросы, у которых целевой IP адрес в запросе соответствует адресу сетевого интерфейса, на котором был получен данный запрос.

3.    Примените настройки sysctl выполнив следующую команду:

root@sterragate:~# sysctl -p

4.    Выведите список всех интерфейсов в системе и выберите незадействованный в L2. Незадействованные в L2 интерфейсы будут иметь имя ethN, а задействованные vEthN:

root@sterragate:~# ip address show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

6: eth4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    link/ether 00:50:56:9e:ef:20 brd ff:ff:ff:ff:ff:ff

7: vEth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:50:56:9e:a1:06 brd ff:ff:ff:ff:ff:ff

    inet 172.16.100.2/24 scope global vEth0

       valid_lft forever preferred_lft forever

8: vEth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:50:56:9e:b6:b1 brd ff:ff:ff:ff:ff:ff

9: vEth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:50:56:9e:41:ca brd ff:ff:ff:ff:ff:ff

    inet 172.16.101.2/24 scope global vEth2

       valid_lft forever preferred_lft forever

10: vEth3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:50:56:9e:44:e9 brd ff:ff:ff:ff:ff:ff

Видно, что интерфейс eth4 не задействован в L2. Интерфейсы vEthN задействованы в L2.

5.    Добавьте описание настроек интерфейса eth4 в файл /etc/network/interfaces за пределами секции, которая обозначается маркерами ###netifcfg-begin###, ###netifcfg-end###:

Mgmt интерфейс запрещено подключать к недоверенным сетям, так как Mgmt интерфейсы не контролируются средствами Продукта. Соответственно, добавлять Mgmt интерфейсы в cisco-like консоль нельзя. поэтому настройка таких интерфейсов должна происходить средствами ОС. Если требуется фильтровать пакеты, то используйте iptables (см. документ «Использование утилиты «iptables»).

...

source-directory /etc/network/interfaces.d

 

# loopback configuration

auto lo

iface lo inet loopback

 

# Mgmt interface.

auto eth4

iface eth4 inet static

address 192.168.253.1

netmask 255.255.255.0

 

###netifcfg-begin###

...

###netifcfg-end###

6.    Перезапустите сервис  networking для применения настроек:

root@sterragate:~# systemctl restart networking.service

7.    Убедитесь, что Mgmt адрес присутствует на интерфейсе eth4:

root@sterragate:~# ip address show dev eth4

4: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    link/ether 00:50:56:9e:ef:20 brd ff:ff:ff:ff:ff:ff

    inet 192.168.253.1/24 brd 10.0.255.255 scope global eth2

       valid_lft forever preferred_lft forever

Второй этап.

Изменения сетевых настроек в cisco-like консоли применяются сразу после ввода соответствующих команд. Политика безопасности применяется после выхода из режима конфигурирования.

1.    Перейдите в cisco-like консоль из linux bash:

root@sterragate:~# exit

logout

Leaving system shell...

administrator@sterragate] configure

sterragate login: cscons

Password:

Last login: Mon Mar  2 15:00:48 MSK 2020 on pts/0

S-Terra Gate DP 4.3.XXXXX (amd64)

sterragate#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

2.    Задайте имя устройства:

sterragate(config)#hostname Hub1

3.    Убедитесь, что WAN и LAN интерфейсы административно включены и line protocol (способность интерфейса передавать пакеты в данный момент) находится в состоянии up, а также на интерфейсе vEthernet0 присутствует WAN адрес криптошлюза:

Hub1(config)#do show interfaces vEthernet0

vEthernet0 is up, line protocol is up

  Hardware address is 0050.569e.a106

  Internet address is 172.16.100.2/24

  MTU 9000 bytes

Hub1(config)#do show interfaces vEthernet1

vEthernet1 is up, line protocol is up

  Hardware address is 0050.569e.b6b1

  MTU 9000 bytes

Hub1(config)#do show interfaces vEthernet2

vEthernet2 is up, line protocol is up

  Hardware address is 0050.569e.41ca

  Internet address is 172.16.101.2/24

  MTU 9000 bytes

Hub1(config)#do show interfaces vEthernet3

vEthernet3 is up, line protocol is up

  Hardware address is 0050.569e.44e9

  MTU 9000 bytes

Если line protocol находится в состоянии down, то проверьте подключение сетевого интерфейса криптошлюза к коммутационному или прочему оборудованию.

4.    Задайте маршрут по умолчанию через устройство Router1 для исходящего из TCP/IP стека ОС и транзитного Mgmt трафика (шлюз по умолчанию для зашифрованного транзитного L2 трафика задается в файле /opt/VPNagent/etc/ipsm_dpdk.cfg):

Hub1(config)#ip route 0.0.0.0 0.0.0.0 172.16.100.1

5.    Задайте статический маршрут до устройства Spoke1 через соответствующий интерфейс устройства Router1.

Hub1(config)#ip route 172.16.1.2 255.255.255.255 172.16.100.1

6.    Задайте статический маршрут до устройства Spoke2 через соответствующий интерфейс устройства Router1.

Hub1(config)#ip route 172.16.2.2 255.255.255.255 172.16.101.1

7.    Проверьте доступность устройства Router1:

Hub1(config)#do ping 172.16.100.1

PING 172.16.100.1 (172.16.100.1) 100(128) bytes of data.

108 bytes from 172.16.100.1: icmp_seq=1 ttl=64 time=1.13 ms

108 bytes from 172.16.100.1: icmp_seq=2 ttl=64 time=0.237 ms

108 bytes from 172.16.100.1: icmp_seq=3 ttl=64 time=0.192 ms

108 bytes from 172.16.100.1: icmp_seq=4 ttl=64 time=0.200 ms

108 bytes from 172.16.100.1: icmp_seq=5 ttl=64 time=0.299 ms

 

--- 172.16.100.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4078ms

rtt min/avg/max/mdev = 0.192/0.411/1.131/0.362 ms

Hub1(config)#do ping 172.16.101.1

PING 172.16.101.1 (172.16.101.1) 100(128) bytes of data.

108 bytes from 172.16.101.1: icmp_seq=1 ttl=64 time=0.288 ms

108 bytes from 172.16.101.1: icmp_seq=2 ttl=64 time=0.415 ms

108 bytes from 172.16.101.1: icmp_seq=3 ttl=64 time=0.494 ms

108 bytes from 172.16.101.1: icmp_seq=4 ttl=64 time=0.926 ms

108 bytes from 172.16.101.1: icmp_seq=5 ttl=64 time=0.534 ms

 

--- 172.16.101.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4010ms

rtt min/avg/max/mdev = 0.288/0.531/0.926/0.214 ms

 

Настройка шифрования

1.    Параметры IKE.

1.1.      Укажите в качестве типа идентификатора, используемого в рамках протокола IKE, отличительное имя (Distinguished Name, DN):

Hub1(config)#crypto isakmp identity dn

По умолчанию отличительное имя будет взято из сертификата устройства, например, для Hub1 это «C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1».

1.2.      Настройте параметры DPD (deep peer detection):

Hub1(config)#crypto isakmp keepalive 3 2

Hub1(config)#crypto isakmp keepalive retry-count 5

Пояснение:

Если в течение 3 секунд отсутствует входящий трафик в IPsec туннеле, то с интервалом в 2 секунды посылается 5 keepalive пакетов в рамках IKE туннеля, чтобы удостовериться в работоспособности туннеля. Если партнер не отвечает на keepalive пакеты, то соответствующий IKE туннель и связанные с ним IPsec туннели уничтожаются. В случае наличия исходящего защищаемого трафика происходит попытка создания новых IKE/IPsec туннелей.

1.3.      Включите фрагментацию IKE пакетов:

Hub1(config)#crypto isakmp fragmentation

1.4.      Включите случайный разброс времени жизни IKE и IPsec SA, чтобы снизить нагрузку на шлюз (позволяет избежать единовременное массовое пересоздания SA):

Hub1(config)#crypto isakmp security-association lifetime delta 50

1.5.      Увеличьте допустимое количество одновременно инициируемых IKE сессий (не путать с общим количеством IKE сессий) для всех партнёров (значение по умолчанию 30):

Hub1(config)#crypto isakmp initiator-sessions-max 100

1.6.      Увеличьте допустимое количество одновременных IKE обменов, проводимых шлюзом со всеми партнерами в качестве ответчика (не путать с общим количеством IKE сессий; значение по умолчанию 20):

Hub1(config)#crypto isakmp responder-sessions-max 100

1.7.      Создайте политику, описывающую параметры IKE туннеля:

Hub1(config)#crypto isakmp policy 1

Hub1(config-isakmp)# encryption gost

Hub1(config-isakmp)# hash gost341112-256-tc26

Hub1(config-isakmp)# authentication gost-sig

Hub1(config-isakmp)# group vko2

Hub1(config-isakmp)# exit

Рекомендуется использовать одну политику для IKE туннелей. Несколько политик может потребоваться в том случае, если необходимо обеспечить совместимость со старыми версиями Продуктов, в которых нет поддержки новых алгоритмов.

2.    Параметры IPsec для защиты транзитного L2 трафика.

2.1.      Задайте комбинированный алгоритм gost341215k-mgm шифрования и имитозащиты (набор преобразований) для защиты транзитного L2 трафика:

Hub1(config)#crypto ipsec transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM esp-gost341215k-mgm

Hub1(cfg-crypto-trans)#exit

2.2.      Создайте список доступа (ACL) для транзитного инкапсулированного в EtherIP пользовательского трафика, который нужно защищать между центральным офисом и первым филиалом:

Hub1(config)#ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE1

Hub1(config-ext-nacl)#remark EtherIP L2 tunnel

Hub1(config-ext-nacl)# permit 97 host 100.100.101.1 host 100.100.101.2

Hub1(config-ext-nacl)#exit

Hub1(config)#

2.3.      Создайте список доступа (ACL) для транзитного инкапсулированного в EtherIP пользовательского трафика, который нужно защищать между центральным офисом и вторым филиалом:

Hub1(config)#ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE2

Hub1(config-ext-nacl)#remark EtherIP L2 tunnel

Hub1(config-ext-nacl)# permit 97 host 100.100.102.1 host 100.100.102.2

Hub1(config-ext-nacl)#exit

Hub1(config)#

2.4.      Создайте крипто-карту (имя L2VPN_HUB1_AND_SPOKE1, раздел 1):

Hub1(config)#crypto map L2VPN_HUB1_AND_SPOKE1 1 ipsec-isakmp

2.4.1      Укажите список доступа для защищаемого трафика:

Hub1(config-crypto-map)# match address IPSEC_ACl_HUB1_AND_SPOKE1

2.4.2      Укажите при помощи какого набора алгоритмов нужно защищать трафик:

Hub1(config-crypto-map)# set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

2.4.3      Укажите IP адрес партнера по IPsec, это внешний IP адрес устройства Spoke1:

Hub1(config-crypto-map)# set peer 172.16.1.2

2.4.4      Задайте локальный IP адрес для IKE и IPsec пакетов.

Hub1(config-crypto-map)# set local-address 172.16.100.2

2.4.5      Увеличьте лимит по трафику до максимального значения для IPsec SA:

Hub1(config-crypto-map)#set security-association lifetime kilobytes 4294967295

2.4.6      Обязательно отключите историю удаленных туннелей (если не отключить, то могут быть проблемы с построением IPsec туннелей с устройствами, которые находятся за NAT):

Hub1(config-crypto-map)# set dead-connection history off

Hub1(config-crypto-map)#exit

2.5.      Создайте крипто-карту (имя L2VPN_HUB1_AND_SPOKE2, раздел 1):

Hub1(config)#crypto map L2VPN_HUB1_AND_SPOKE2 1 ipsec-isakmp

2.5.1      Укажите список доступа для защищаемого трафика:

Hub1(config-crypto-map)# match address IPSEC_ACl_HUB1_AND_SPOKE2

2.5.2      Укажите при помощи какого набора алгоритмов нужно защищать трафик:

Hub1(config-crypto-map)# set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

2.5.3      Укажите IP адрес партнера по IPsec, это внешний IP адрес устройства Spoke2:

Hub1(config-crypto-map)# set peer 172.16.2.2

2.5.4      Задайте локальный IP адрес для IKE и IPsec пакетов.

Hub1(config-crypto-map)# set local-address 172.16.101.2

2.5.5      Увеличьте лимит по трафику до максимального значения для IPsec SA:

Hub1(config-crypto-map)#set security-association lifetime kilobytes 4294967295

2.5.6      Обязательно отключите историю удаленных туннелей (если не отключить, то могут быть проблемы с построением IPsec туннелей с устройствами, которые находятся за NAT):

Hub1(config-crypto-map)# set dead-connection history off

Hub1(config-crypto-map)#exit

2.6.      Прикрепите крипто-карту L2VPN_HUB1_AND_SPOKE1 к DP интерфейсам из диапазона 0 – 7 (эти номера соответствуют потокам обработки трафика первого LAN порта (PORT1 в ipsm_dpdk.cfg)):

Hub1(config)# interface range DP 0 - 7

Hub1(config-if)# crypto map L2VPN_HUB1_AND_SPOKE1

Hub1(config-if)# exit

2.7.      Прикрепите крипто-карту L2VPN_HUB1_AND_SPOKE2 к DP интерфейсам из диапазона 8 – 15 (эти номера соответствуют потокам обработки трафика второго LAN порта (PORT3 в ipsm_dpdk.cfg)):

Hub1(config)# interface range DP 8 - 15

Hub1(config-if)# crypto map L2VPN_HUB1_AND_SPOKE2

Hub1(config-if)# exit

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

Hub1(config-if)#end

Настройка политики обработки СОС (CRL)

В целях безопасности настоятельно рекомендуется включать проверку списков отзыва сертификатов. Разностные списки отозванных сертификатов (delta CRL) не поддерживаются.

1.    Включите проверку СОС:

Hub1#configure terminal

Hub1(config)# crypto pki trustpoint s-terra_technological_trustpoint

Hub1(ca-trustpoint)# revocation-check crl

Если по обоснованным причинам использование СОС невозможно, то выключите проверку СОС и не включайте автоматическую загрузку СОС:

Hub1(ca-trustpoint)# revocation-check none

2.    Включите автоматическую загрузку и импортирование в базу Продукта списка отозванных сертификатов с HTTP сервера CRL_distribution_point:

Hub1(ca-trustpoint)# crl download group ROOTCA http://172.16.101.15/certcrl.crl

3.    Настройте периодичность загрузки СОС в 60 минут (по умолчанию 24 часа):

Hub1(ca-trustpoint)# crl download time 60

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

Hub1(ca-trustpoint)#end

5.    Проверьте загружен ли СОС в базу Продукта:

Hub1#run cert_mgr show

Found 2 certificates. Found 1 CRL.

1 Status: trusted C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 Status: local   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

3 CRL: C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

Если СОС не загрузился, то проверьте файл журнала, например:

Hub1#run grep getcrls_daemon /var/log/cspvpngate.log

Примечание: чтобы не ждать следующего периода загрузки СОС можно перезапустить сервис getcrls вручную:

Hub1#run systemctl restart getcrls.service

6.    Выполните проверку статуса сертификатов в базе Продукта:

Hub1#run cert_mgr check

1 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

Настройка криптошлюза Hub1 завершена.

В Приложении представлены тексты конфигураций для криптошлюза Hub1:

·         текст консоли cisco-like;

·         текст LSP;

·         Конфигурация L2 (data plane).


 

Настройка криптошлюза Spoke1

Начальные настройки

Начальные настройки производятся аналогично соответствующим настройкам на криптошлюзе Hub1 до момента настройки мастера настроек L2 (data plane).

1.1.      Запустится мастер начальных настроек L2 (data plane). Данный мастер изменяет файл /opt/VPNagent/etc/ipsm_dpdk.cfg, который используется сервисом ipsmapp:

Configuring IPSM:

This script will stop ipsmapp daemon and create new ipsm_dpdk.cfg. All ipsmapp settings will be reset. Do you want to continue? [Yes]

Restoring interfaces settings

1.1.1      Укажите количество портов (количество физических LAN и WAN интерфейсов для L2, Mgmt интерфейсы не учитываются):

Enter amount of ports (2-2) [2] : 2

1.1.2      Введите количество потоков обработки трафика (количество потоков соответствует количеству DP<N> интерфейсов):

Обратите внимание, что число потоков должно совпадать с числом потоков на первом LAN порту криптошлюза Hub1 (в данном сценарии это число – 8).

threads (1-36) [36] : 8

1.1.3      Выберите из предложенного списка PCI адрес для WAN порта. PORT0 – WAN интерфейс.

Port#   pci_id      Configured

-       03:00.0    

-       0b:00.0    

Данный список сформирован из всех физических сетевых интерфейсов, которые есть в криптошлюзе. В каждом конкретном случае PCI адреса могут отличаться.

Configuring PORT0

Enter pci_id for WAN interface : 03:00.0

1.1.4      Укажите IP адрес для первого WAN интерфейса (в данном сценарии - 172.16.1.2). Данный IP адрес будет назначен на интерфейс vEthernet0:

Enter IP-address for WAN interface (l3_ip) : 172.16.1.2

1.1.5       Укажите маску для IP адреса WAN интерфейса (в данном сценарии - 24):

Enter netmask for WAN interface (l3_mask) (0-32) [24] : 24

1.1.6      Укажите адрес шлюза по умолчанию для транзитного L2 (data plane) зашифрованного трафика (в данном сценарии – 172.16.1.1):

Enter default gateway IP-address (gw_ip) : 172.16.1.1

1.1.7      Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

1.1.8      Выберите из вновь предложенного списка PCI адрес для LAN порта. PORT1 – LAN интерфейс:

Port#   pci_id      Configured

PORT0   03:00.0     *

-       0b:00.0    

Из списка выше видно, что WAN порт уже сконфигурирован (символ * в столбце Configured):

Configuring PORT1

Enter pci_id to pair with 03:00.0 : 0b:00.0

1.1.9      Укажите IP адрес источника для EtherIP туннеля (в данном сценарии – 100.100.101.2):

Enter source IP-address for l2-tunnel (l2_src_ip) : 100.100.101.2

1.1.10   Укажите IP адрес назначения для EtherIP туннеля (в данном сценарии – 100.100.101.1):

Enter destination IP-address for l2-tunnel (l2_dst_ip) : 100.100.101.1

1.1.11   Задайте MTU для WAN и LAN интерфейсов (в данном сценарии – 9000):

Enter MTU for WAN interface (68-9700) [9700] : 9000

Enter MTU for LAN interface (68-9700) [9600] : 9000

1.1.12   Нажмите Enter, если все параметры введены верно:

Is the above data correct? [Yes]

1.1.13   Дождитесь окончания процедуры инициализации и мастера настроек:

Please wait...

 

Port#   pci_id      Configured

PORT0   03:00.0     *

PORT2   0b:00.0     *

OK

 

 

Initialization completed.

Some settings will take effect after OS reboot only.

 

Network traffic is blocked.

To unblock network traffic, please setup the network security policy

or use "run csconf_mgr activate" command to activate the predefined

permissive network security policy now.

1.1.14   Включите прохождение сетевого трафика, загрузив предопределенную разрешающую политику:

administrator@sterragate] run csconf_mgr activate

Начальные настройки завершены.

Настройка L2

Настройка параметров L2 производится аналогично настройкам L2 на криптошлюзе Hub1 до момента настройки распределения потоков обработки трафика по портам.

Параметры thr_start и thr_count задавать не требуется, по умолчанию все потоки будут назначены на LAN порт.

Настройки PKI (запросы и сертификаты)

Настройка производится аналогично настройкам на криптошлюзе Hub1.

Настройка паролей доступа к консоли cisco-like

Настройка производится аналогично настройкам на криптошлюзе Hub1.

Настройка сетевых параметров

Настройка производится аналогично настройкам на криптошлюзе Hub1.

Настройка шифрования

1.    Параметры IKE.
Настройка производится аналогично настройкам на криптошлюзе Hub1.

2.    Параметры IPsec для защиты транзитного L2 трафика.

2.1.      Задайте комбинированный алгоритм gost341215k-mgm шифрования и имитозащиты (набор преобразований) для защиты транзитного L2 трафика:

Spoke1(config)#crypto ipsec transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM esp-gost341215k-mgm

Spoke1(cfg-crypto-trans)# exit

2.2.      Создайте список доступа (ACL) для транзитного инкапсулированного в EtherIP пользовательского трафика, который нужно защищать между центральным офисом и первым филиалом:

Spoke1(config)#ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE1

Spoke1(config-ext-nacl)# remark EtherIP L2 tunnel

Spoke1(config-ext-nacl)# permit 97 host 100.100.101.2 host 100.100.101.1

Spoke1(config-ext-nacl)# exit

Spoke1(config)#

2.3.      Создайте крипто-карту (имя L2VPN_HUB1_AND_SPOKE1, раздел 1):

Spoke1(config)#crypto map L2VPN_HUB1_AND_SPOKE1 1 ipsec-isakmp

2.3.1      Укажите список доступа для защищаемого трафика:

Spoke1(config-crypto-map)# match address IPSEC_ACl_HUB1_AND_SPOKE1

2.3.2      Укажите при помощи какого набора алгоритмов нужно защищать трафик:

Spoke1(config-crypto-map)# set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

2.3.3      Укажите IP адрес партнера по IPsec, это внешний IP адрес первого WAN интерфейса криптошлюза Hub1:

Spoke1(config-crypto-map)# set peer 172.16.100.2

2.3.4      Увеличьте лимит по трафику до максимального значения для IPsec SA:

Spoke1(config-crypto-map)#set security-association lifetime kilobytes 4294967295

2.3.5      Обязательно отключите историю удаленных туннелей (если не отключить, то могут быть проблемы с построением IPsec туннелей с устройствами, которые находятся за NAT):

Spoke1(config-crypto-map)# set dead-connection history off

Spoke1(config-crypto-map)# exit

2.4.      Прикрепите крипто-карту L2VPN_HUB1_AND_SPOKE1 ко всем DP интерфейсам (они соответствуют потокам обработки трафика LAN порта (PORT1 в ipsm_dpdk.cfg)):

Spoke1(config)# interface range DP 0 - 7

Spoke1(config-if)# crypto map L2VPN_HUB1_AND_SPOKE1

Spoke1(config-if)# exit

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

Spoke1(config-if)# end

2.6.      Важно! Убедитесь, что значения параметра crypto ipsec stream-id на интерфейсах DP 0 – 7 криптошлюза Spoke1 совпадают со значениями на интерфейсах DP 0 – 7 криптошлюза Hub1. Проверить это можно в выводе команды show running-config:

Spoke1# show running-config

...

!

interface DP0

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1000

!

interface DP1

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1001

!

interface DP2

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1002

!

interface DP3

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1003

!

interface DP4

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1004

!

interface DP5

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1005

!

interface DP6

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1006

!

interface DP7

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1007

!

...

Hub1# show running-config

...

!

interface DP0

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1000

!

interface DP1

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1001

!

interface DP2

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1002

!

interface DP3

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1003

!

interface DP4

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1004

!

interface DP5

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1005

!

interface DP6

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1006

!

interface DP7

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1007

!

...

Видно, что значения crypto ipsec stream-id на соответствующих интерфейсах DP совпадают.

Если значения этого параметра на шлюзах различаются, то следует отредактировать значение на одном из криптошлюзов, например на Spoke1. Для этого перейдите обратно в режим конфигурации:

Spoke1#configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Spoke1(config)#

Перейдите в режим конфигурации интерфейса, на котором следует изменить данный параметр (например, если нужно выставить значение stream-id равное 1023 на интерфейсе DP 0) и задайте нужное значение:

Spoke1(config)#interface dp 0

Spoke1(config-if)#crypto ipsec stream-id 1023

Spoke1(config-if)#exit

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

Spoke1(config)#end

Настройка политики обработки СОС (CRL)

Настройка производится аналогично настройкам на криптошлюзе Hub1.

В Приложении представлены тексты конфигураций для криптошлюза Spoke1:

·         текст консоли cisco-like;

·         текст LSP;

·         Конфигурация L2 (data plane).

Настройка криптошлюза Spoke2

Настройка криптошлюза Spoke2 происходит аналогично настройке Spoke1.

Число потоков обработки трафика следует выставлять такое же, какое было задано для второго LAN порта криптошлюза Hub1.

Важно! После этапа настройки шифрования, убедитесь, что значения параметра crypto ipsec stream-id на интерфейсах DP 0 – 7 криптошлюза Spoke2 совпадают со значениями на интерфейсах DP 8 – 15 криптошлюза Hub1, в противном случае значения следует заменить на совпадающие.

В Приложении представлены тексты конфигураций для криптошлюза Spoke2:

·         текст консоли cisco-like;

·         текст LSP;

·         Конфигурация L2 (data plane).


 

Проверка работоспособности стенда

Проверку работоспособности нужно выполнять после завершения настройки всех устройств стенда.

Проверка IP связности

1.    Проверьте, что с криптошлюзов Hub1, Spoke1 и Spoke2 по ICMP доступен шлюз по умолчанию (Router1). Для этого выполните команду ping из cisco-like консоли криптошлюзов.

Hub1#ping 172.16.100.1

PING 172.16.100.1 (172.16.100.1) 100(128) bytes of data.

108 bytes from 172.16.100.1: icmp_seq=1 ttl=64 time=5.07 ms

108 bytes from 172.16.100.1: icmp_seq=2 ttl=64 time=3.62 ms

108 bytes from 172.16.100.1: icmp_seq=3 ttl=64 time=6.55 ms

108 bytes from 172.16.100.1: icmp_seq=4 ttl=64 time=4.68 ms

108 bytes from 172.16.100.1: icmp_seq=5 ttl=64 time=2.86 ms

 

--- 172.16.100.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4005ms

rtt min/avg/max/mdev = 2.867/4.562/6.552/1.263 ms

Spoke1#ping 172.16.1.1

PING 172.16.1.1 (172.16.1.1) 100(128) bytes of data.

108 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=14.7 ms

108 bytes from 172.16.1.1: icmp_seq=2 ttl=64 time=9.22 ms

108 bytes from 172.16.1.1: icmp_seq=3 ttl=64 time=7.03 ms

108 bytes from 172.16.1.1: icmp_seq=4 ttl=64 time=5.25 ms

108 bytes from 172.16.1.1: icmp_seq=5 ttl=64 time=8.15 ms

 

--- 172.16.1.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4006ms

rtt min/avg/max/mdev = 5.259/8.876/14.704/3.195 ms

Spoke2#ping 172.16.2.1

PING 172.16.2.1 (172.16.2.1) 100(128) bytes of data.

108 bytes from 172.16.2.1: icmp_seq=1 ttl=64 time=6.77 ms

108 bytes from 172.16.2.1: icmp_seq=2 ttl=64 time=5.16 ms

108 bytes from 172.16.2.1: icmp_seq=3 ttl=64 time=8.01 ms

108 bytes from 172.16.2.1: icmp_seq=4 ttl=64 time=6.85 ms

108 bytes from 172.16.2.1: icmp_seq=5 ttl=64 time=4.69 ms

 

--- 172.16.2.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4006ms

rtt min/avg/max/mdev = 4.698/6.300/8.016/1.214 ms

Видно, что устройство Router1 доступно по ICMP как с Hub1, так и со Spoke1.

2.    Проверьте, что с криптошлюза Hub1 доступны по ICMP криптошлюзы Spoke1 и Spoke2 (по внешним интерфейсам). Для этого выполните команду ping из cisco-like консоли криптошлюза Hub1.

Hub1#ping 172.16.1.2

PING 172.16.1.2 (172.16.1.2) 100(128) bytes of data.

108 bytes from 172.16.1.2: icmp_seq=1 ttl=63 time=24.0 ms

108 bytes from 172.16.1.2: icmp_seq=2 ttl=63 time=15.0 ms

108 bytes from 172.16.1.2: icmp_seq=3 ttl=63 time=14.1 ms

108 bytes from 172.16.1.2: icmp_seq=4 ttl=63 time=9.63 ms

108 bytes from 172.16.1.2: icmp_seq=5 ttl=63 time=11.2 ms

 

--- 172.16.1.2 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4003ms

rtt min/avg/max/mdev = 9.632/14.821/24.064/5.013 ms

Hub1#ping 172.16.2.2

PING 172.16.2.2 (172.16.2.2) 100(128) bytes of data.

108 bytes from 172.16.2.2: icmp_seq=1 ttl=63 time=8.14 ms

108 bytes from 172.16.2.2: icmp_seq=2 ttl=63 time=6.59 ms

108 bytes from 172.16.2.2: icmp_seq=3 ttl=63 time=4.67 ms

108 bytes from 172.16.2.2: icmp_seq=4 ttl=63 time=11.1 ms

108 bytes from 172.16.2.2: icmp_seq=5 ttl=63 time=9.85 ms

 

--- 172.16.2.2 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4006ms

rtt min/avg/max/mdev = 4.676/8.093/11.195/2.308 ms

Видно, что с криптошлюза Hub1 доступны по ICMP криптошлюзы Spoke1 и Spoke2.

Проверка PKI

1.    Проверьте, что на криптошлюзах Hub1, Spoke1 и Spoke2 СОС импортирован в базу Продукта. Для этого выполните команду run cert_mgr show из cisco-like консоли криптошлюзов.

Hub1#run cert_mgr show

Found 2 certificates. Found 1 CRL.

1 Status: local   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

2 Status: trusted C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

3 CRL: C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

Spoke1#run cert_mgr show

Found 2 certificates. Found 1 CRL.

1 Status: trusted C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 Status: local   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Spoke1

3 CRL: C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

Spoke2#run cert_mgr show

Found 3 certificates. Found 1 CRL.

1 Status: trusted C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 Status: local   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Spoke2

3 CRL: C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

Видно, что на всех криптошлюзах СОС импортирован в базу Продукта. Если этого не произошло, то проверьте файл журнала (команда run grep getcrls_daemon /var/log/cspvpngate.log) и, при необходимости, перезапустите сервис автоматической загрузки СОС (команда run systemctl restart getcrls.service).

2.    Проверьте, что на криптошлюзах Hub1, Spoke1 и Spoke2 статус всех сертификатов Active. Для этого выполните команду run cert_mgr check из cisco-like консоли криптошлюзов.

Hub1#run cert_mgr check

1 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Hub1

2 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

Spoke1#run cert_mgr check

1 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Spoke1

Spoke2#run cert_mgr check

1 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=S-Terra CSP Test Root CA

2 State: Active   C=RU,L=Zelenograd,O=S-Terra CSP,OU=RnD,CN=Spoke2

Видно, что на всех криптошлюзах статус у всех сертификатов Active. Если статус Inactive, то проверьте загружен ли СОС в базу Продукта и правильность установки даты и времени.

Проверка построения защищенного L2 соединения между криптошлюзами

1.    Инициируйте построение защищенного L2 соединения между криптошлюзами Hub1 и Spoke1, Hub1 и Spoke2 с любого из защищаемых устройств. Например, выполните проверку доступности устройств host-behind-hub1 и host-behind-spoke2 с устройства host-behind-spoke1.

1.1.      Выполните команду ping из linux bash консоли защищаемого устройства host-behind-spoke1.

root@host-behind-spoke1:~# ping 192.168.100.100 -c 5

PING 192.168.100.100 (192.168.100.100) 56(84) bytes of data.

64 bytes from 192.168.100.100: icmp_seq=1 ttl=64 time=1.83 ms

64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=1.57 ms

64 bytes from 192.168.100.100: icmp_seq=3 ttl=64 time=1.68 ms

64 bytes from 192.168.100.100: icmp_seq=4 ttl=64 time=1.74 ms

64 bytes from 192.168.100.100: icmp_seq=5 ttl=64 time=1.86 ms

 

--- 192.168.100.100 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 10ms

rtt min/avg/max/mdev = 1.568/1.737/1.864/0.109 ms

1.2.      Выполните команду ping из linux bash консоли защищаемого устройства host-behind-spoke1.

root@host-behind-spoke1:~# ping 192.168.100.102 -c 5

PING 192.168.100.102 (192.168.100.102) 56(84) bytes of data.

64 bytes from 192.168.100.102: icmp_seq=1 ttl=64 time=3.71 ms

64 bytes from 192.168.100.102: icmp_seq=2 ttl=64 time=3.88 ms

64 bytes from 192.168.100.102: icmp_seq=3 ttl=64 time=4.18 ms

64 bytes from 192.168.100.102: icmp_seq=4 ttl=64 time=4.01 ms

64 bytes from 192.168.100.102: icmp_seq=5 ttl=64 time=3.82 ms

 

--- 192.168.100.102 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 10ms

rtt min/avg/max/mdev = 3.712/3.921/4.182/0.179 ms

2.    Проверьте, что на криптошлюзах Hub1, Spoke1 и Spoke2 установлены защищенные IPsec соединения. Для этого выполните команду run sa_mgr show из cisco-like консоли криптошлюзов.

Hub1#run sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd

1 8 (172.16.101.2,500)-(172.16.2.2,500) active 10868 10792

2 9 (172.16.100.2,500)-(172.16.1.2,500) active 10300 10464

 

IPsec connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd

1 38 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2016 1664

2 39 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1792 1888

3 40 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2016 1792

4 41 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2048 1664

5 42 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1856 1856

6 43 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1888 1920

7 44 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1728 1920

8 45 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2112 1632

9 46 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1920 1728

10 47 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2176 1760

11 48 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 2016 1888

12 49 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 2144 1632

13 50 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 1952 1632

14 51 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1888 1920

15 52 (100.100.101.1,*)-(100.100.101.2,*) 97 ESP tunn 1888 1760

16 53 (100.100.102.1,*)-(100.100.102.2,*) 97 ESP tunn 1504 1504

Spoke1#run sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd

1 3 (172.16.1.2,500)-(172.16.100.2,500) active 4424 4308

 

IPsec connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd

1 28 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1536 1408

2 29 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1408 1408

3 30 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1408 1376

4 31 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1408 1408

5 32 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1376 1536

6 33 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1376 1408

7 34 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1408 1376

8 35 (100.100.101.2,*)-(100.100.101.1,*) 97 ESP tunn 1408 1408

Spoke2#run sa_mgr show

ISAKMP sessions: 0 initiated, 0 responded

 

ISAKMP connections:

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd

1 2 (172.16.2.2,500)-(172.16.101.2,500) active 4244 4488

 

Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd

1 20 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1792 2016

2 21 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1664 2048

3 22 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1632 2112

4 23 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1760 2176

5 24 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1632 2144

6 25 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1632 1952

7 26 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1504 1504

8 27 (100.100.102.2,*)-(100.100.102.1,*) 97 ESP tunn 1408 1376

Видно, что на криптошлюзах Hub1, Spoke1 и Spoke2 установлены защищенные IPsec соединения (количество защищенных IPsec соединений должно совпадать со значением параметра threads, указанно в мастере настроек L2). Если этого не произошло, то проверьте файл журнала (команда run less /var/log/cspvpngate.log). При необходимости увеличьте уровень логирования (команда logging trap debugging в консоли cisco-like) и заново инициируйте защищенное соединение.

 


 

Приложение

Конфигурации криптошлюза Hub1

1.    Консоль cisco-like:

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp fragmentation

crypto isakmp security-association lifetime delta 50

crypto isakmp initiator-sessions-max 100

crypto isakmp responder-sessions-max 100

crypto isakmp keepalive 3

crypto isakmp keepalive retry-count 5

username cscons privilege 15 secret 5 $6$lQHk46/t$MDufPsXck4QGNohEy/CS8Qf/U9SF7LZfA/1RC9RBjLwOIP5vIjiDE7bYGKfodQwUcopzFDVLf1v.6m9CV.Zan0

aaa new-model

!

!

hostname Hub1

enable secret 5 vIWbAnRJu0Afqhm/xJTTXg==

!

!

!

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM esp-gost341215k-mgm

!

ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE1

 remark EtherIP L2 tunnel

 permit 97 host 100.100.101.1 host 100.100.101.2

!

ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE2

 remark EtherIP L2 tunnel

 permit 97 host 100.100.102.1 host 100.100.102.2

!

!

crypto map L2VPN_HUB1_AND_SPOKE1 1 ipsec-isakmp

 match address IPSEC_ACl_HUB1_AND_SPOKE1

 set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

 set security-association lifetime kilobytes 4294967295

 set local-address 172.16.100.2

 set peer 172.16.1.2

 set dead-connection history off

!

crypto map L2VPN_HUB1_AND_SPOKE2 1 ipsec-isakmp

 match address IPSEC_ACl_HUB1_AND_SPOKE2

 set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

 set security-association lifetime kilobytes 4294967295

 set local-address 172.16.101.2

 set peer 172.16.2.2

 set dead-connection history off

!

interface DP0

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1000

!

interface DP1

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1001

!

interface DP2

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1002

!

interface DP3

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1003

!

interface DP4

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1004

!

interface DP5

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1005

!

interface DP6

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1006

!

interface DP7

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1007

!

interface DP8

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1008

!

interface DP9

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1009

!

interface DP10

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1010

!

interface DP11

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1011

!

interface DP12

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1012

!

interface DP13

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1013

!

interface DP14

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1014

!

interface DP15

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1015

!

interface vEthernet0

 ip address 172.16.100.2 255.255.255.0

 mtu 9000

!

interface vEthernet1

 no ip address

 mtu 9000

!

interface vEthernet2

 ip address 172.16.101.2 255.255.255.0

 mtu 9000

!

interface vEthernet3

 no ip address

 mtu 9000

!

!

ip route 0.0.0.0 0.0.0.0 172.16.100.1

ip route 172.16.1.2 255.255.255.255 172.16.100.1

ip route 172.16.2.2 255.255.255.255 172.16.101.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check crl

 crl download group ROOTCA http://172.16.101.15/certcrl.crl

 crl download time 60

crypto pki certificate chain s-terra_technological_trustpoint

certificate 58E026BFD6D625BE4582C16C6189C183

...

AD4F8901771632E0A0AF83

 

quit

!

end

2.    Конфигурация LSP:

#   This is automatically generated LSP

#

#   Conversion Date/Time:   Thu Nov  7 12:05:45 2024

 

GlobalParameters(

    Title                       = "This LSP was automatically generated by CSP Converter at Thu Nov  7 12:05:45 2024 (user: cscons)"

    Version                     = LSP_4_3

    CRLHandlingMode             = ENABLE

    PreserveIPsecSA             = FALSE

)

 

RoutingTable(

    Routes =

        Route(

            Destination = 0.0.0.0/0

            Gateway = 172.16.100.1

        ),

        Route(

            Destination = 172.16.1.2

            Gateway = 172.16.100.1

        ),

        Route(

            Destination = 172.16.2.2

            Gateway = 172.16.101.1

        )

)

 

FirewallParameters(

    TCPSynSentTimeout = 30

    TCPFinTimeout = 5

    TCPClosedTimeout = 30

    TCPSynRcvdTimeout = 30

    TCPEstablishedTimeout = 3600

    TCPHalfOpenLow = 400

    TCPHalfOpenMax = 500

    TCPSessionRateLow = 400

    TCPSessionRateMax = 500

)

 

IKETransform crypto:isakmp:policy:1

(

    CipherAlg   = "G2814789CPRO1-K256-CBC-65534"

    HashAlg     = "GR341112_256TC26-65128"

    GroupID     = VKO2_1B

    RestrictAuthenticationTo = GOST_SIGN

    LifetimeSeconds = 86400

)

 

ESPProposal GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP

(

    Transform* = ESPTransform

    (

        CipherAlg*          = "GR341215K-K352-MGM-251"

        LifetimeSeconds     = 3600

        LifetimeKilobytes   = 4294967295

    )

)

 

IKEParameters(

    FragmentSize = 576

    SALifetimeDelta = 50

    InitiatorSessionsMax = 100

    ResponderSessionsMax = 100

)

 

AuthMethodGOSTSign GOST:Sign

(

    LocalID        =  IdentityEntry( DistinguishedName* = USER_SPECIFIC_DATA )

    SendRequestMode    =  ALWAYS

    SendCertMode       =  ALWAYS

)

 

IKERule IKERule:L2VPN_HUB1_AND_SPOKE1:1

(

    IKEPeerIPFilter = 172.16.1.2

    IKELocalIPFilter = 172.16.100.2

    Transform = crypto:isakmp:policy:1

    AggrModeAuthMethod  = GOST:Sign

    MainModeAuthMethod  = GOST:Sign

    DPDIdleDuration     = 3

    DPDResponseDuration = 2

    DPDRetries          = 5

    Priority            = 10

)

 

IKERule IKERule:L2VPN_HUB1_AND_SPOKE2:1

(

    IKEPeerIPFilter = 172.16.2.2

    IKELocalIPFilter = 172.16.101.2

    Transform = crypto:isakmp:policy:1

    AggrModeAuthMethod  = GOST:Sign

    MainModeAuthMethod  = GOST:Sign

    DPDIdleDuration     = 3

    DPDResponseDuration = 2

    DPDRetries          = 5

    Priority            = 20

)

 

IPsecAction IPsecAction:L2VPN_HUB1_AND_SPOKE1:1

(

    TunnelingParameters = TunnelEntry(

        LocalIPAddress = 172.16.100.2

        PeerAddress = 172.16.1.2

        DFHandling=COPY

        Assemble=TRUE

    )

    ContainedProposals = ( GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP )

    NoDeadConnectionHistory = TRUE

    IKERule = IKERule:L2VPN_HUB1_AND_SPOKE1:1

)

 

IPsecAction IPsecAction:L2VPN_HUB1_AND_SPOKE2:1

(

    TunnelingParameters = TunnelEntry(

        LocalIPAddress = 172.16.101.2

        PeerAddress = 172.16.2.2

        DFHandling=COPY

        Assemble=TRUE

    )

    ContainedProposals = ( GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP )

    NoDeadConnectionHistory = TRUE

    IKERule = IKERule:L2VPN_HUB1_AND_SPOKE2:1

)

 

const IPsecPolicy:L2VPN_HUB1_AND_SPOKE1 = FilterChain  (

    Filters = Filter (

        ProtocolID = 17

        SourcePort = 500, 4500

        Action = PASS

        PacketType = LOCAL_UNICAST, LOCAL_MISDIRECTED

    ),

    Filter (

        SourceIP = 100.100.101.1

        DestinationIP = 100.100.101.2

        ProtocolID = 97

        Action = PASS

        ExtendedAction = ipsec< sa = IPsecAction:L2VPN_HUB1_AND_SPOKE1:1 >

        LogEventID = "IPsec:Protect:L2VPN_HUB1_AND_SPOKE1:1:IPSEC_ACl_HUB1_AND_SPOKE1"

    )

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1000 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1000

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1001 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1001

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1002 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1002

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1003 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1003

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1004 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1004

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1005 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1005

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1006 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1006

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1007 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1007

)

 

const IPsecPolicy:L2VPN_HUB1_AND_SPOKE2 = FilterChain  (

    Filters = Filter (

        ProtocolID = 17

        SourcePort = 500, 4500

        Action = PASS

        PacketType = LOCAL_UNICAST, LOCAL_MISDIRECTED

    ),

    Filter (

        SourceIP = 100.100.102.1

        DestinationIP = 100.100.102.2

        ProtocolID = 97

        Action = PASS

        ExtendedAction = ipsec< sa = IPsecAction:L2VPN_HUB1_AND_SPOKE2:1 >

        LogEventID = "IPsec:Protect:L2VPN_HUB1_AND_SPOKE2:1:IPSEC_ACl_HUB1_AND_SPOKE2"

    )

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1008 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1008

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1009 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1009

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1010 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1010

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1011 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1011

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1012 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1012

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1013 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1013

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1014 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1014

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1015 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1015

)

 

NetworkInterface (

    LogicalName = "DP0"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1000

)

 

NetworkInterface (

    LogicalName = "DP1"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1001

)

 

NetworkInterface (

    LogicalName = "DP2"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1002

)

 

NetworkInterface (

    LogicalName = "DP3"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1003

)

 

NetworkInterface (

    LogicalName = "DP4"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1004

)

 

NetworkInterface (

    LogicalName = "DP5"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1005

)

 

NetworkInterface (

    LogicalName = "DP6"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1006

)

 

NetworkInterface (

    LogicalName = "DP7"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1007

)

 

NetworkInterface (

    LogicalName = "DP8"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1008

)

 

NetworkInterface (

    LogicalName = "DP9"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1009

)

 

NetworkInterface (

    LogicalName = "DP10"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1010

)

 

NetworkInterface (

    LogicalName = "DP11"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1011

)

 

NetworkInterface (

    LogicalName = "DP12"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1012

)

 

NetworkInterface (

    LogicalName = "DP13"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1013

)

 

NetworkInterface (

    LogicalName = "DP14"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1014

)

 

NetworkInterface (

    LogicalName = "DP15"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1015

)

3.    Конфигурация L2 (data plane).

3.1.      Файл /opt/VPNagent/etc/ipsm_dpdk.cfg:

[PERFORMANCE]

threads = 16                 ;maximum: (cpu core num (maximum:254, including HyperThreading) - 2 - 3 * ports_num) -- processing (encrypt/decrypt/filter) threads number

;sendqueue_size = 64000     ;min: 1000 max: 200000 default: 64000 -- size of re-order fixing queue

;disable_sendqueue = no     ;yes/no, default: no -- disable re-order fixing queue

;tx_retries = 10            ;min: 0 max: 1000 default: 10 -- retries count for outgoing packets before drop

;tx_delay = 20              ;min: 0 max: 200 default: 20 -- delay in microseconds before another retry of sending packet burst

;rx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of rx descriptors in network adapter configuration

;tx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of tx descriptors in network adapter configuration

no_max_freq = yes           ;yes/no, default: no -- disable setting max possible frequency for our processor cores

;sendq_burst_threshold = 0  ;min: 100 max: 100000 default: 0 (disabled) -- make a delay, if sending N packets from sendqueue in a row

;sendq_burst_delay = 10     ;min: 1 max: 200 default: 10 -- delay in microseconds when sendq_burst_threshold activated

;pcap_mpool_size = 262143   ;min: 6736: max 4194303: default: auto -- number of buffers in single memory pool, 1 pool per port

;rx_queue_len = 16          ;min: 1 max: 32 default: 16 -- size of thread queue (in bursts)

;rx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on rx thread if there are no packets incoming

;tx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on tx thread if there are no packets to send

;wrk_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on wrk thread if there are no packets incoming

;kni_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on kni thread if there are no packets incoming or outgoing

;cb_wait = 50               ;min: 0 max: 10000 default: 50 -- wait in microseconds on wrk thread if corresponding tx thread is busy

;rx_cache_size = 64000      ;min: 2000: max 200000: default: 64000 -- size of rx thread packet cache

;wrk_overload_thresh = 90   ;min: 1: max 100: default: 90 -- threshold (in %) of wrk thread queue fill when it counts as "overloaded"

 

[EAL]

coremask = 0xfffffffffff              ;mask should cover all cpu cores, including HyperThreading

;channels = 1               ;min: 1 max: 8 default: 1    -- memory channels number

;cpuset = (0-2,4)@(0-1)     ;map threads to cpu cores: <threads[@cpus]>[<,threads[@cpus]>...]

;eal_log_level = 4          ;min: 1 max: 8 default: 4    -- log level of dpdk messages

;rx_pthresh = 8             ;min: 0 max: 255 default: 8  -- rx prefetch threshold register value

;rx_hthresh = 8             ;min: 0 max: 255 default: 8  -- rx host threshold register value

;rx_wthresh = 4             ;min: 0 max: 255 default: 4  -- rx write-back threshold register value

;tx_pthresh = 36            ;min: 0 max: 255 default: 36 -- tx prefetch threshold register value

;tx_hthresh = 0             ;min: 0 max: 255 default: 0  -- tx host threshold register value

;tx_wthresh = 0             ;min: 0 max: 255 default: 0  -- tx write-back threshold register value

 

[MISC]

print_stats = yes           ;yes/no, default: yes -- print send/receive/drop statistics

stats_file = /tmp/pkt_stats.txt    ;name of file for print_stats

;stats_file_size = 10       ;min: 1 max: 100 default: 10 -- max size of statistics file in megabytes. After rotate, previous instance saves as ".old"

;stats_period = 1           ;min: 1: max: 86400 default: 1 -- at this period (in seconds) statistics is collected

;print_frames = no          ;yes/no, default: no -- print incoming/outgoing packets in hex

;frames_file = /tmp/frames.txt      ;name of file for print_frames

;frames_file_size = 50      ;min: 1 max: 200 default: 50 -- max size of packet hexdump file in megabytes. After roteate, previous instance saves as ".old"

;frames_time = no           ;yes/no, default: no -- print time for each packet in print_frames

rte_log_file = /tmp/rte_log.txt    ;name of file for dpdk log messages

;rte_log_file_size = 10     ;min: 1 max: 100 default: 10 -- max size of rte_log file in megabytes. After rotate, previous instance saves as ".old"

;pf_max_bytes = 42          ;min: 14 max: 1400 default: 42 -- print only N firs bytes in print_frames

;natt_port = 4500           ;min: 1 max: 65535: default: 4500

 

[PORT0]

pci_id = 03:00.0                   ;pci address of network interface

outer = yes                        ;yes/no, default: no -- consider port as looking to outer network; outer port cant be in l2-mode

l3_ip = 172.16.100.2              ;ip address of corresponding vEthN

l3_mask = 24                       ;mask of corresponding vEthN

gw_ip = 172.16.100.1               ;default gateway ip-address

pair_port = 1                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;next_hop_mac = 00:00:00:00:00:00  ;default destination mac-address for outgoing frames

;next_hop_mac_force = no           ;yes/no, default no -- always set next_hop_mac as destination mac address for outgoing L3-frames

dp_frag_ip = 172.16.1.2,172.16.2.2              ;default: disabled -- ip addresses (4 max, "," as divider) of gate dp partners for this port

dp_frag_natt = yes                 ;yes/no, default no -- enable fragmentation fix for natt

;frag_id_afterward = no            ;yes/no, default no -- set frag id before send

;vlan_identifier = 0               ;min: 0 max: 4094 default: 0 -- 802.1Q VLAN identifier (VID)

;vlan_priority_code_point = 0      ;min: 0 max: 7 default: 0 -- Priority code point (PCP) which is referts to the 802.1p class of service

;allowed_ethertypes = none         ; ethertypes in hex (32 max, "," as divider) -- pass this ethertypes to/from corresponding vEth. IPv4(0x0800) and ARP(0x0806) always passed, others dropped by default

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = yes                  ;yes/no, default: yes (for l2-port port - no) -- disable promiscuous mode on this port

;multicast_enable = yes            ;yes/no, default: yes (for l2-port - no) -- enable receiving all multicast ip packets mode on this port

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

;pmtud = 8000                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

;mssfix = 8000                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

 

[PORT1]

pci_id = 04:00.0                   ;pci address of network interface

l2_src_ip = 100.100.101.1          ;source ip address of new ip packet for l2-encalpsulation

l2_dst_ip = 100.100.101.2          ;destination ip address of new ip packet for l2-encalpsulation

pair_port = 0                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

thr_start = 0                     ;min: 0 max: <threads - 1> -- first processing thread for this port

thr_count = 8             ;min: 1 max: <threads - thr_start> -- number of processing threads for this port

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = no                   ;yes/no, default: no (for outer port - yes) -- disable promiscuous mode on this port

;multicast_enable = no             ;yes/no, default: no (for outer port - yes) -- enable receiving all multicast ip packets mode on this port

;copy_tos = no                     ;yes/no, default: no -- copy ToS-field from orig ip header to l2-encalpsulation ip header

;df_handling = clear               ;copy/set/clear, default clear -- DF bit: copy from orig ip header to l2-encapsulation ip header

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

pmtud = 8900                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

mssfix = 8860                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

 

[PORT2]

pci_id = 0b:00.0                   ;pci address of network interface

outer = yes                        ;yes/no, default: no -- consider port as looking to outer network; outer port cant be in l2-mode

l3_ip = 172.16.101.2              ;ip address of corresponding vEthN

l3_mask = 24                       ;mask of corresponding vEthN

gw_ip = 172.16.101.1               ;default gateway ip-address

pair_port = 3                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;next_hop_mac = 00:00:00:00:00:00  ;default destination mac-address for outgoing frames

;next_hop_mac_force = no           ;yes/no, default no -- always set next_hop_mac as destination mac address for outgoing L3-frames

dp_frag_ip = 172.16.1.2,172.16.2.2              ;default: disabled -- ip addresses (4 max, "," as divider) of gate dp partners for this port

dp_frag_natt = yes                 ;yes/no, default no -- enable fragmentation fix for natt

;frag_id_afterward = no            ;yes/no, default no -- set frag id before send

;vlan_identifier = 0               ;min: 0 max: 4094 default: 0 -- 802.1Q VLAN identifier (VID)

;vlan_priority_code_point = 0      ;min: 0 max: 7 default: 0 -- Priority code point (PCP) which is referts to the 802.1p class of service

;allowed_ethertypes = none         ; ethertypes in hex (32 max, "," as divider) -- pass this ethertypes to/from corresponding vEth. IPv4(0x0800) and ARP(0x0806) always passed, others dropped by default

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = yes                  ;yes/no, default: yes (for l2-port port - no) -- disable promiscuous mode on this port

;multicast_enable = yes            ;yes/no, default: yes (for l2-port - no) -- enable receiving all multicast ip packets mode on this port

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

;pmtud = 8000                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

;mssfix = 8000                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

 

[PORT3]

pci_id = 13:00.0                   ;pci address of network interface

l2_src_ip = 100.100.102.1          ;source ip address of new ip packet for l2-encalpsulation

l2_dst_ip = 100.100.102.2          ;destination ip address of new ip packet for l2-encalpsulation

pair_port = 2                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

thr_start = 8                     ;min: 0 max: <threads - 1> -- first processing thread for this port

thr_count = 8             ;min: 1 max: <threads - thr_start> -- number of processing threads for this port

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = no                   ;yes/no, default: no (for outer port - yes) -- disable promiscuous mode on this port

;multicast_enable = no             ;yes/no, default: no (for outer port - yes) -- enable receiving all multicast ip packets mode on this port

;copy_tos = no                     ;yes/no, default: no -- copy ToS-field from orig ip header to l2-encalpsulation ip header

;df_handling = clear               ;copy/set/clear, default clear -- DF bit: copy from orig ip header to l2-encapsulation ip header

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

;pmtud = 8000                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

;mssfix = 8000                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

Конфигурации криптошлюза Spoke1

1.    Консоль cisco-like:

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp fragmentation

crypto isakmp security-association lifetime delta 50

crypto isakmp initiator-sessions-max 100

crypto isakmp responder-sessions-max 100

crypto isakmp keepalive 3

crypto isakmp keepalive retry-count 5

username cscons privilege 15 secret 5 $6$4SGBmgmh$bLy4I.E4SSgwM8kSHldWJwC6GvoKUcE7uUogvpwwk4iGcd78.GSlhH.x.NGYJMTvTEdqF9Yy27fBbLs5OT4Aq/

aaa new-model

!

!

hostname Spoke1

enable secret 5 vIWbAnRJu0Afqhm/xJTTXg==

!

!

!

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM esp-gost341215k-mgm

!

ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE1

 remark EtherIP L2 tunnel

 permit 97 host 100.100.101.2 host 100.100.101.1

!

!

crypto map L2VPN_HUB1_AND_SPOKE1 1 ipsec-isakmp

 match address IPSEC_ACl_HUB1_AND_SPOKE1

 set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

 set security-association lifetime kilobytes 4294967295

 set peer 172.16.100.2

 set dead-connection history off

!

interface DP0

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1000

!

interface DP1

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1001

!

interface DP2

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1002

!

interface DP3

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1003

!

interface DP4

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1004

!

interface DP5

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1005

!

interface DP6

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1006

!

interface DP7

 crypto map L2VPN_HUB1_AND_SPOKE1

 crypto ipsec stream-id 1007

!

interface vEthernet0

 description WAN

 ip address 172.16.1.2 255.255.255.0

 mtu 9000

!

interface vEthernet1

 no ip address

 mtu 9000

!

!

ip route 0.0.0.0 0.0.0.0 172.16.1.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check crl

 crl download group ROOTCA http://172.16.101.15/certcrl.crl

 crl download time 60

crypto pki certificate chain s-terra_technological_trustpoint

certificate 58E026BFD6D625BE4582C16C6189C183

...

AD4F8901771632E0A0AF83

 

quit

!

end

2.    Конфигурация LSP:

#   This is automatically generated LSP

#

#   Conversion Date/Time:   Thu Nov  7 12:07:28 2024

 

GlobalParameters(

    Title                       = "This LSP was automatically generated by CSP Converter at Thu Nov  7 12:07:28 2024 (user: cscons)"

    Version                     = LSP_4_3

    CRLHandlingMode             = ENABLE

    PreserveIPsecSA             = FALSE

)

 

RoutingTable(

    Routes =

        Route(

            Destination = 0.0.0.0/0

            Gateway = 172.16.1.1

        )

)

 

FirewallParameters(

    TCPSynSentTimeout = 30

    TCPFinTimeout = 5

    TCPClosedTimeout = 30

    TCPSynRcvdTimeout = 30

    TCPEstablishedTimeout = 3600

    TCPHalfOpenLow = 400

    TCPHalfOpenMax = 500

    TCPSessionRateLow = 400

    TCPSessionRateMax = 500

)

 

IKETransform crypto:isakmp:policy:1

(

    CipherAlg   = "G2814789CPRO1-K256-CBC-65534"

    HashAlg     = "GR341112_256TC26-65128"

    GroupID     = VKO2_1B

    RestrictAuthenticationTo = GOST_SIGN

    LifetimeSeconds = 86400

)

 

ESPProposal GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP

(

    Transform* = ESPTransform

    (

        CipherAlg*          = "GR341215K-K352-MGM-251"

        LifetimeSeconds     = 3600

        LifetimeKilobytes   = 4294967295

    )

)

 

IKEParameters(

    FragmentSize = 576

    SALifetimeDelta = 50

    InitiatorSessionsMax = 100

    ResponderSessionsMax = 100

)

 

AuthMethodGOSTSign GOST:Sign

(

    LocalID        =  IdentityEntry( DistinguishedName* = USER_SPECIFIC_DATA )

    SendRequestMode    =  ALWAYS

    SendCertMode       =  ALWAYS

)

 

IKERule IKERule:L2VPN_HUB1_AND_SPOKE1:1

(

    IKEPeerIPFilter = 172.16.100.2

    Transform = crypto:isakmp:policy:1

    AggrModeAuthMethod  = GOST:Sign

    MainModeAuthMethod  = GOST:Sign

    DPDIdleDuration     = 3

    DPDResponseDuration = 2

    DPDRetries          = 5

    Priority            = 10

)

 

IPsecAction IPsecAction:L2VPN_HUB1_AND_SPOKE1:1

(

    TunnelingParameters = TunnelEntry(

        PeerAddress = 172.16.100.2

        DFHandling=COPY

        Assemble=TRUE

    )

    ContainedProposals = ( GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP )

    NoDeadConnectionHistory = TRUE

    IKERule = IKERule:L2VPN_HUB1_AND_SPOKE1:1

)

 

const IPsecPolicy:L2VPN_HUB1_AND_SPOKE1 = FilterChain  (

    Filters = Filter (

        ProtocolID = 17

        SourcePort = 500, 4500

        Action = PASS

        PacketType = LOCAL_UNICAST, LOCAL_MISDIRECTED

    ),

    Filter (

        SourceIP = 100.100.101.2

        DestinationIP = 100.100.101.1

        ProtocolID = 97

        Action = PASS

        ExtendedAction = ipsec< sa = IPsecAction:L2VPN_HUB1_AND_SPOKE1:1 >

        LogEventID = "IPsec:Protect:L2VPN_HUB1_AND_SPOKE1:1:IPSEC_ACl_HUB1_AND_SPOKE1"

    )

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1000 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1000

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1001 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1001

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1002 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1002

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1003 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1003

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1004 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1004

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1005 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1005

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1006 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1006

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1007 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE1

    StreamID = 1007

)

 

NetworkInterface (

    LogicalName = "DP0"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1000

)

 

NetworkInterface (

    LogicalName = "DP1"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1001

)

 

NetworkInterface (

    LogicalName = "DP2"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1002

)

 

NetworkInterface (

    LogicalName = "DP3"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1003

)

 

NetworkInterface (

    LogicalName = "DP4"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1004

)

 

NetworkInterface (

    LogicalName = "DP5"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1005

)

 

NetworkInterface (

    LogicalName = "DP6"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1006

)

 

NetworkInterface (

    LogicalName = "DP7"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE1:1007

)

3.    Конфигурация L2 (data plane).

3.1.      Файл /opt/VPNagent/etc/ipsm_dpdk.cfg:

[PERFORMANCE]

threads = 8                 ;maximum: (cpu core num (maximum:254, including HyperThreading) - 2 - 3 * ports_num) -- processing (encrypt/decrypt/filter) threads number

;sendqueue_size = 64000     ;min: 1000 max: 200000 default: 64000 -- size of re-order fixing queue

;disable_sendqueue = no     ;yes/no, default: no -- disable re-order fixing queue

;tx_retries = 10            ;min: 0 max: 1000 default: 10 -- retries count for outgoing packets before drop

;tx_delay = 20              ;min: 0 max: 200 default: 20 -- delay in microseconds before another retry of sending packet burst

;rx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of rx descriptors in network adapter configuration

;tx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of tx descriptors in network adapter configuration

no_max_freq = yes           ;yes/no, default: no -- disable setting max possible frequency for our processor cores

;sendq_burst_threshold = 0  ;min: 100 max: 100000 default: 0 (disabled) -- make a delay, if sending N packets from sendqueue in a row

;sendq_burst_delay = 10     ;min: 1 max: 200 default: 10 -- delay in microseconds when sendq_burst_threshold activated

;pcap_mpool_size = 262143   ;min: 6736: max 4194303: default: auto -- number of buffers in single memory pool, 1 pool per port

;rx_queue_len = 16          ;min: 1 max: 32 default: 16 -- size of thread queue (in bursts)

;rx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on rx thread if there are no packets incoming

;tx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on tx thread if there are no packets to send

;wrk_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on wrk thread if there are no packets incoming

;kni_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on kni thread if there are no packets incoming or outgoing

;cb_wait = 50               ;min: 0 max: 10000 default: 50 -- wait in microseconds on wrk thread if corresponding tx thread is busy

;rx_cache_size = 64000      ;min: 2000: max 200000: default: 64000 -- size of rx thread packet cache

;wrk_overload_thresh = 90   ;min: 1: max 100: default: 90 -- threshold (in %) of wrk thread queue fill when it counts as "overloaded"

 

[EAL]

coremask = 0xfffffffffff              ;mask should cover all cpu cores, including HyperThreading

;channels = 1               ;min: 1 max: 8 default: 1    -- memory channels number

;cpuset = (0-2,4)@(0-1)     ;map threads to cpu cores: <threads[@cpus]>[<,threads[@cpus]>...]

;eal_log_level = 4          ;min: 1 max: 8 default: 4    -- log level of dpdk messages

;rx_pthresh = 8             ;min: 0 max: 255 default: 8  -- rx prefetch threshold register value

;rx_hthresh = 8             ;min: 0 max: 255 default: 8  -- rx host threshold register value

;rx_wthresh = 4             ;min: 0 max: 255 default: 4  -- rx write-back threshold register value

;tx_pthresh = 36            ;min: 0 max: 255 default: 36 -- tx prefetch threshold register value

;tx_hthresh = 0             ;min: 0 max: 255 default: 0  -- tx host threshold register value

;tx_wthresh = 0             ;min: 0 max: 255 default: 0  -- tx write-back threshold register value

 

[MISC]

print_stats = yes           ;yes/no, default: yes -- print send/receive/drop statistics

stats_file = /tmp/pkt_stats.txt    ;name of file for print_stats

;stats_file_size = 10       ;min: 1 max: 100 default: 10 -- max size of statistics file in megabytes. After rotate, previous instance saves as ".old"

;stats_period = 1           ;min: 1: max: 86400 default: 1 -- at this period (in seconds) statistics is collected

;print_frames = no          ;yes/no, default: no -- print incoming/outgoing packets in hex

;frames_file = /tmp/frames.txt      ;name of file for print_frames

;frames_file_size = 50      ;min: 1 max: 200 default: 50 -- max size of packet hexdump file in megabytes. After roteate, previous instance saves as ".old"

;frames_time = no           ;yes/no, default: no -- print time for each packet in print_frames

rte_log_file = /tmp/rte_log.txt    ;name of file for dpdk log messages

;rte_log_file_size = 10     ;min: 1 max: 100 default: 10 -- max size of rte_log file in megabytes. After rotate, previous instance saves as ".old"

;pf_max_bytes = 42          ;min: 14 max: 1400 default: 42 -- print only N firs bytes in print_frames

;natt_port = 4500           ;min: 1 max: 65535: default: 4500

 

[PORT0]

pci_id = 03:00.0                   ;pci address of network interface

outer = yes                        ;yes/no, default: no -- consider port as looking to outer network; outer port cant be in l2-mode

l3_ip = 172.16.1.2                 ;ip address of corresponding vEthN

l3_mask = 24                       ;mask of corresponding vEthN

gw_ip = 172.16.1.1                 ;default gateway ip-address

pair_port = 1                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;next_hop_mac = 00:00:00:00:00:00  ;default destination mac-address for outgoing frames

;next_hop_mac_force = no           ;yes/no, default no -- always set next_hop_mac as destination mac address for outgoing L3-frames

dp_frag_ip = 172.16.100.2              ;default: disabled -- ip addresses (4 max, "," as divider) of gate dp partners for this port

dp_frag_natt = yes                 ;yes/no, default no -- enable fragmentation fix for natt

;frag_id_afterward = no            ;yes/no, default no -- set frag id before send

;vlan_identifier = 0               ;min: 0 max: 4094 default: 0 -- 802.1Q VLAN identifier (VID)

;vlan_priority_code_point = 0      ;min: 0 max: 7 default: 0 -- Priority code point (PCP) which is referts to the 802.1p class of service

;allowed_ethertypes = none         ; ethertypes in hex (32 max, "," as divider) -- pass this ethertypes to/from corresponding vEth. IPv4(0x0800) and ARP(0x0806) always passed, others dropped by default

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = yes                  ;yes/no, default: yes (for l2-port port - no) -- disable promiscuous mode on this port

;multicast_enable = yes            ;yes/no, default: yes (for l2-port - no) -- enable receiving all multicast ip packets mode on this port

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

;pmtud = 8000                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

;mssfix = 8000                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

 

[PORT1]

pci_id = 0b:00.0                   ;pci address of network interface

l2_src_ip = 100.100.101.2          ;source ip address of new ip packet for l2-encalpsulation

l2_dst_ip = 100.100.101.1          ;destination ip address of new ip packet for l2-encalpsulation

pair_port = 0                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;thr_start = 0                     ;min: 0 max: <threads - 1> -- first processing thread for this port

;thr_count = <threads>             ;min: 1 max: <threads - thr_start> -- number of processing threads for this port

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = no                   ;yes/no, default: no (for outer port - yes) -- disable promiscuous mode on this port

;multicast_enable = no             ;yes/no, default: no (for outer port - yes) -- enable receiving all multicast ip packets mode on this port

;copy_tos = no                     ;yes/no, default: no -- copy ToS-field from orig ip header to l2-encalpsulation ip header

;df_handling = clear               ;copy/set/clear, default clear -- DF bit: copy from orig ip header to l2-encapsulation ip header

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

pmtud = 8900                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

mssfix = 8860                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

Конфигурации криптошлюза Spoke2

1.    Консоль cisco-like:

!

version 12.4

no service password-encryption

!

crypto ipsec df-bit copy

crypto isakmp identity dn

crypto isakmp fragmentation

crypto isakmp security-association lifetime delta 50

crypto isakmp initiator-sessions-max 100

crypto isakmp responder-sessions-max 100

crypto isakmp keepalive 3

crypto isakmp keepalive retry-count 5

username cscons privilege 15 secret 5 $6$4SGBmgmh$bLy4I.E4SSgwM8kSHldWJwC6GvoKUcE7uUogvpwwk4iGcd78.GSlhH.x.NGYJMTvTEdqF9Yy27fBbLs5OT4Aq/

aaa new-model

!

!

hostname Spoke2

enable secret 5 vIWbAnRJu0Afqhm/xJTTXg==

!

!

!

!

!

crypto isakmp policy 1

 encr gost

 hash gost341112-256-tc26

 authentication gost-sig

 group vko2

!

crypto ipsec transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM esp-gost341215k-mgm

!

ip access-list extended IPSEC_ACl_HUB1_AND_SPOKE2

 remark EtherIP L2 tunnel

 permit 97 host 100.100.102.2 host 100.100.102.1

!

!

crypto map L2VPN_HUB1_AND_SPOKE2 1 ipsec-isakmp

 match address IPSEC_ACl_HUB1_AND_SPOKE2

 set transform-set GOST_ENCRYPT_AND_INTEGRITY_MGM

 set security-association lifetime kilobytes 4294967295

 set peer 172.16.101.2

 set dead-connection history off

!

interface DP0

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1008

!

interface DP1

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1009

!

interface DP2

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1010

!

interface DP3

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1011

!

interface DP4

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1012

!

interface DP5

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1013

!

interface DP6

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1014

!

interface DP7

 crypto map L2VPN_HUB1_AND_SPOKE2

 crypto ipsec stream-id 1015

!

interface vEthernet0

 description WAN

 ip address 172.16.2.2 255.255.255.0

 mtu 9000

!

interface vEthernet1

 no ip address

 mtu 9000

!

!

ip route 0.0.0.0 0.0.0.0 172.16.2.1

!

crypto pki trustpoint s-terra_technological_trustpoint

 revocation-check crl

 crl download group ROOTCA http://172.16.101.15/certcrl.crl

 crl download time 60

crypto pki certificate chain s-terra_technological_trustpoint

certificate 58E026BFD6D625BE4582C16C6189C183

...

AD4F8901771632E0A0AF83

 

quit

!

end

2.    Конфигурация LSP:

#   This is automatically generated LSP

#

#   Conversion Date/Time:   Thu Nov  7 12:09:11 2024

 

GlobalParameters(

    Title                       = "This LSP was automatically generated by CSP Converter at Thu Nov  7 12:09:11 2024 (user: cscons)"

    Version                     = LSP_4_3

    CRLHandlingMode             = ENABLE

    PreserveIPsecSA             = FALSE

)

 

RoutingTable(

    Routes =

        Route(

            Destination = 0.0.0.0/0

            Gateway = 172.16.2.1

        )

)

 

FirewallParameters(

    TCPSynSentTimeout = 30

    TCPFinTimeout = 5

    TCPClosedTimeout = 30

    TCPSynRcvdTimeout = 30

    TCPEstablishedTimeout = 3600

    TCPHalfOpenLow = 400

    TCPHalfOpenMax = 500

    TCPSessionRateLow = 400

    TCPSessionRateMax = 500

)

 

IKETransform crypto:isakmp:policy:1

(

    CipherAlg   = "G2814789CPRO1-K256-CBC-65534"

    HashAlg     = "GR341112_256TC26-65128"

    GroupID     = VKO2_1B

    RestrictAuthenticationTo = GOST_SIGN

    LifetimeSeconds = 86400

)

 

ESPProposal GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP

(

    Transform* = ESPTransform

    (

        CipherAlg*          = "GR341215K-K352-MGM-251"

        LifetimeSeconds     = 3600

        LifetimeKilobytes   = 4294967295

    )

)

 

IKEParameters(

    FragmentSize = 576

    SALifetimeDelta = 50

    InitiatorSessionsMax = 100

    ResponderSessionsMax = 100

)

 

AuthMethodGOSTSign GOST:Sign

(

    LocalID        =  IdentityEntry( DistinguishedName* = USER_SPECIFIC_DATA )

    SendRequestMode    =  ALWAYS

    SendCertMode       =  ALWAYS

)

 

IKERule IKERule:L2VPN_HUB1_AND_SPOKE2:1

(

    IKEPeerIPFilter = 172.16.101.2

    Transform = crypto:isakmp:policy:1

    AggrModeAuthMethod  = GOST:Sign

    MainModeAuthMethod  = GOST:Sign

    DPDIdleDuration     = 3

    DPDResponseDuration = 2

    DPDRetries          = 5

    Priority            = 10

)

 

IPsecAction IPsecAction:L2VPN_HUB1_AND_SPOKE2:1

(

    TunnelingParameters = TunnelEntry(

        PeerAddress = 172.16.101.2

        DFHandling=COPY

        Assemble=TRUE

    )

    ContainedProposals = ( GOST_ENCRYPT_AND_INTEGRITY_MGM:ESP )

    NoDeadConnectionHistory = TRUE

    IKERule = IKERule:L2VPN_HUB1_AND_SPOKE2:1

)

 

const IPsecPolicy:L2VPN_HUB1_AND_SPOKE2 = FilterChain  (

    Filters = Filter (

        ProtocolID = 17

        SourcePort = 500, 4500

        Action = PASS

        PacketType = LOCAL_UNICAST, LOCAL_MISDIRECTED

    ),

    Filter (

        SourceIP = 100.100.102.2

        DestinationIP = 100.100.102.1

        ProtocolID = 97

        Action = PASS

        ExtendedAction = ipsec< sa = IPsecAction:L2VPN_HUB1_AND_SPOKE2:1 >

        LogEventID = "IPsec:Protect:L2VPN_HUB1_AND_SPOKE2:1:IPSEC_ACl_HUB1_AND_SPOKE2"

    )

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1008 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1008

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1009 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1009

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1010 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1010

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1011 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1011

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1012 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1012

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1013 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1013

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1014 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1014

)

 

FilterChain IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1015 (

    +IPsecPolicy:L2VPN_HUB1_AND_SPOKE2

    StreamID = 1015

)

 

NetworkInterface (

    LogicalName = "DP0"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1008

)

 

NetworkInterface (

    LogicalName = "DP1"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1009

)

 

NetworkInterface (

    LogicalName = "DP2"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1010

)

 

NetworkInterface (

    LogicalName = "DP3"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1011

)

 

NetworkInterface (

    LogicalName = "DP4"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1012

)

 

NetworkInterface (

    LogicalName = "DP5"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1013

)

 

NetworkInterface (

    LogicalName = "DP6"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1014

)

 

NetworkInterface (

    LogicalName = "DP7"

    IPsecPolicy = IPsecPolicy:L2VPN_HUB1_AND_SPOKE2:1015

)

 

3.    Конфигурация L2 (data plane).

3.1.      Файл /opt/VPNagent/etc/ipsm_dpdk.cfg:

[PERFORMANCE]

threads = 8                 ;maximum: (cpu core num (maximum:254, including HyperThreading) - 2 - 3 * ports_num) -- processing (encrypt/decrypt/filter) threads number

;sendqueue_size = 64000     ;min: 1000 max: 200000 default: 64000 -- size of re-order fixing queue

;disable_sendqueue = no     ;yes/no, default: no -- disable re-order fixing queue

;tx_retries = 10            ;min: 0 max: 1000 default: 10 -- retries count for outgoing packets before drop

;tx_delay = 20              ;min: 0 max: 200 default: 20 -- delay in microseconds before another retry of sending packet burst

;rx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of rx descriptors in network adapter configuration

;tx_desc = 4096             ;min: 32 max: 4096 default: 4096 -- number of tx descriptors in network adapter configuration

no_max_freq = yes           ;yes/no, default: no -- disable setting max possible frequency for our processor cores

;sendq_burst_threshold = 0  ;min: 100 max: 100000 default: 0 (disabled) -- make a delay, if sending N packets from sendqueue in a row

;sendq_burst_delay = 10     ;min: 1 max: 200 default: 10 -- delay in microseconds when sendq_burst_threshold activated

;pcap_mpool_size = 262143   ;min: 6736: max 4194303: default: auto -- number of buffers in single memory pool, 1 pool per port

;rx_queue_len = 16          ;min: 1 max: 32 default: 16 -- size of thread queue (in bursts)

;rx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on rx thread if there are no packets incoming

;tx_sleep = 50              ;min: 0 max: 10000 default: 50 -- pause in microseconds on tx thread if there are no packets to send

;wrk_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on wrk thread if there are no packets incoming

;kni_sleep = 50             ;min: 0 max: 10000 default: 50 -- pause in microseconds on kni thread if there are no packets incoming or outgoing

;cb_wait = 50               ;min: 0 max: 10000 default: 50 -- wait in microseconds on wrk thread if corresponding tx thread is busy

;rx_cache_size = 64000      ;min: 2000: max 200000: default: 64000 -- size of rx thread packet cache

;wrk_overload_thresh = 90   ;min: 1: max 100: default: 90 -- threshold (in %) of wrk thread queue fill when it counts as "overloaded"

 

[EAL]

coremask = 0xfffffffffff              ;mask should cover all cpu cores, including HyperThreading

;channels = 1               ;min: 1 max: 8 default: 1    -- memory channels number

;cpuset = (0-2,4)@(0-1)     ;map threads to cpu cores: <threads[@cpus]>[<,threads[@cpus]>...]

;eal_log_level = 4          ;min: 1 max: 8 default: 4    -- log level of dpdk messages

;rx_pthresh = 8             ;min: 0 max: 255 default: 8  -- rx prefetch threshold register value

;rx_hthresh = 8             ;min: 0 max: 255 default: 8  -- rx host threshold register value

;rx_wthresh = 4             ;min: 0 max: 255 default: 4  -- rx write-back threshold register value

;tx_pthresh = 36            ;min: 0 max: 255 default: 36 -- tx prefetch threshold register value

;tx_hthresh = 0             ;min: 0 max: 255 default: 0  -- tx host threshold register value

;tx_wthresh = 0             ;min: 0 max: 255 default: 0  -- tx write-back threshold register value

 

[MISC]

print_stats = yes           ;yes/no, default: yes -- print send/receive/drop statistics

stats_file = /tmp/pkt_stats.txt    ;name of file for print_stats

;stats_file_size = 10       ;min: 1 max: 100 default: 10 -- max size of statistics file in megabytes. After rotate, previous instance saves as ".old"

;stats_period = 1           ;min: 1: max: 86400 default: 1 -- at this period (in seconds) statistics is collected

;print_frames = no          ;yes/no, default: no -- print incoming/outgoing packets in hex

;frames_file = /tmp/frames.txt      ;name of file for print_frames

;frames_file_size = 50      ;min: 1 max: 200 default: 50 -- max size of packet hexdump file in megabytes. After roteate, previous instance saves as ".old"

;frames_time = no           ;yes/no, default: no -- print time for each packet in print_frames

rte_log_file = /tmp/rte_log.txt    ;name of file for dpdk log messages

;rte_log_file_size = 10     ;min: 1 max: 100 default: 10 -- max size of rte_log file in megabytes. After rotate, previous instance saves as ".old"

;pf_max_bytes = 42          ;min: 14 max: 1400 default: 42 -- print only N firs bytes in print_frames

;natt_port = 4500           ;min: 1 max: 65535: default: 4500

 

[PORT0]

pci_id = 03:00.0                   ;pci address of network interface

outer = yes                        ;yes/no, default: no -- consider port as looking to outer network; outer port cant be in l2-mode

l3_ip = 172.16.2.2                 ;ip address of corresponding vEthN

l3_mask = 24                       ;mask of corresponding vEthN

gw_ip = 172.16.2.1                 ;default gateway ip-address

pair_port = 1                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;next_hop_mac = 00:00:00:00:00:00  ;default destination mac-address for outgoing frames

;next_hop_mac_force = no           ;yes/no, default no -- always set next_hop_mac as destination mac address for outgoing L3-frames

dp_frag_ip = 172.16.101.2              ;default: disabled -- ip addresses (4 max, "," as divider) of gate dp partners for this port

dp_frag_natt = yes                 ;yes/no, default no -- enable fragmentation fix for natt

;frag_id_afterward = no            ;yes/no, default no -- set frag id before send

;vlan_identifier = 0               ;min: 0 max: 4094 default: 0 -- 802.1Q VLAN identifier (VID)

;vlan_priority_code_point = 0      ;min: 0 max: 7 default: 0 -- Priority code point (PCP) which is referts to the 802.1p class of service

;allowed_ethertypes = none         ; ethertypes in hex (32 max, "," as divider) -- pass this ethertypes to/from corresponding vEth. IPv4(0x0800) and ARP(0x0806) always passed, others dropped by default

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = yes                  ;yes/no, default: yes (for l2-port port - no) -- disable promiscuous mode on this port

;multicast_enable = yes            ;yes/no, default: yes (for l2-port - no) -- enable receiving all multicast ip packets mode on this port

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

;pmtud = 8000                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

;mssfix = 8000                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value

 

[PORT1]

pci_id = 0b:00.0                   ;pci address of network interface

l2_src_ip = 100.100.102.2          ;source ip address of new ip packet for l2-encalpsulation

l2_dst_ip = 100.100.102.1          ;destination ip address of new ip packet for l2-encalpsulation

pair_port = 0                      ;index of port for sending packets received on this one; also packets, received on pair_port, will be sent from this one

mtu = 9000                         ;min: 68 max: 9700 default: 9700

;thr_start = 0                     ;min: 0 max: <threads - 1> -- first processing thread for this port

;thr_count = <threads>             ;min: 1 max: <threads - thr_start> -- number of processing threads for this port

;no_fc = no                        ;yes/no, default no  -- disable flow control on this port

;no_promisc = no                   ;yes/no, default: no (for outer port - yes) -- disable promiscuous mode on this port

;multicast_enable = no             ;yes/no, default: no (for outer port - yes) -- enable receiving all multicast ip packets mode on this port

;copy_tos = no                     ;yes/no, default: no -- copy ToS-field from orig ip header to l2-encalpsulation ip header

;df_handling = clear               ;copy/set/clear, default clear -- DF bit: copy from orig ip header to l2-encapsulation ip header

;hw_ip_checksum = yes              ;yes/no, default: yes -- enable additional stats about l3/l4 checksum errors and oversized packets

;hw_vlan_extend = no               ;yes/no, default: no -- enable double-vlan. Disables Vector-RX on i40e

pmtud = 8900                      ;min: 68 max: 65535 default: disabled -- send "ICMP Destination Unreachable -- Fragmentation Needed" for ip packets with DF bit, greater than N bytes

mssfix = 8860                     ;min: 536 max: 9670 default: disabled  -- change MSS field in forwarded tcp syn packets if it greater than N

;mssfix_force = no                 ;yes/no, default: no -- always change MSS field in forwarded tcp syn packets, even if it's lesser than mssfix value