1. Размещение устройств.
1.1. В центральном офисе размещаются: центр выпуска сертификатов (Certification_authority), криптошлюз С-Терра Шлюз (Hub1), управляемый коммутатор (Int_switch1_Hub1) и персональные компьютеры (host0-behind-hub1 и host1-behind-hub1).
1.2. В филиале размещаются: криптошлюз С-Терра Шлюз (Spoke1), управляемый коммутатор (Int_switch1_Spoke1) и персональные компьютеры (host0-behind-spoke1 и host1-behind-spoke1).
1.3. В неконтролируемом сегменте (синее облако на схеме) размещаются: HTTP сервер для распространения списка отозванных сертификатов (CRL_distribution_point), маршрутизатор (Router1).
2. Подключение к сети Интернет.
В данном сценарии для эмуляции сети Интернет используются маршрутизатор Router1.
Подключение к сети Интернет на устройствах С-Терра Шлюз будет считаться успешным, если по протоколу ICMP (или «ping») будет доступен HTTP сервер для распространения списка отозванных сертификатов (устройство CRL_distribution_point на схеме).
2.1. Криптошлюз Hub1 подключается к сети Интернет с помощью статической маршрутизации (маршрут по умолчанию через маршрутизатор Router1).
2.2. Криптошлюз Spoke1 подключается к сети Интернет с помощью статической маршрутизации (маршрут по умолчанию через маршрутизатор Router1).
3. L2 VPN.
Общие сведения
L2 VPN реализуется при помощи модуля «С-Терра L2», который требует отдельной лицензии.
Основная задача данного модуля – перехват фреймов и упаковка их в пакеты UDP для последующего шифрования при помощи С-Терра VPN. После перехвата и инкапсуляции фреймов в UDP модулем «С-Терра L2» получившиеся пакеты маршрутизируются в соответствии с глобальной таблицей маршрутизации. Соответственно, чтобы инкапсулированные пакеты были зашифрованы (помимо наличия правил шифрования на WAN интерфейсе) в таблице маршрутизации должен быть соответствующий маршрут (достаточно одного маршрута по умолчанию) через нужный WAN интерфейс, к которому прикреплена крипто-карта.
За работу модуля «С-Терра L2» отвечает сервис l2svc. По умолчанию данный сервис выключен и не добавлен в автозапуск:
root@sterragate:~# systemctl status l2svc
l2svc.service - S-Terra L2 Tunneling Service
Loaded: loaded (/lib/systemd/system/l2svc.service; disabled; vendor preset: e
Active: inactive (dead)
Конфигурационные файлы и файл с лицензией должны располагаться в директории /opt/l2svc/etc/. Конфигурационные файлы обязательно должны иметь расширение .conf (например to_spoke1.conf). Файл с лицензией должен обязательно называться l2.lic.
Принцип работы модуля «С-Терра L2»
Рассмотрим принцип работы модуля на примере конфигурационного файла:
vif tap0
local 172.16.100.2
remote 172.16.1.2
port 50000
capture eth1
bridge br0
bridge_ip 192.168.100.1/24
mssfix 1400
passtos
· vif <NAME> – параметр определяет имя виртуального туннельного интерфейса, который будет создан. Имя должно быть уникальным во всех конфигурационных файлах. Длина имени должна быть не более 15 символов. Фреймы с данного интерфейса инкапсулируются в UDP.
· local <IP> – параметр определяет локальный IP адрес для инкапсулированных пакетов. Как правило, локальный IP адрес указывается такой же, как IP адрес на WAN интерфейсе С-Терра Шлюз, но если WAN интерфейсов несколько, то нужно создать loopback интерфейс и назначить на него какой-то третий произвольный IP адрес, который будет использоваться в качестве локального IP адреса (процедура создания loopback интерфейсов описана на сайте doc.s-terra.ru -> С-Терра Шлюз > С-Терра Шлюз 4.3 > Настройка шлюза > Общие настройки шлюза > Работа с интерфейсами > Добавление и удаление сетевых интерфейсов > Добавление и удаление виртуальных сетевых интерфейсов > Loopback интерфейсы).
· remote <IP> - параметр определяет IP адрес партнера по L2 туннелю. Данный IP адрес будет является адресом назначения для инкапсулированных пакетов.
· port <PORT> - параметр одновременно определяет номер UDP порта источника (src) и назначения (dst) инкапсулированных пакетов.
· capture <NAME> - параметр определяет имя существующего интерфейса, на котором будет происходить захват фреймов.
· bridge <NAME> - параметр определяет имя интерфейса виртуального коммутатора (linux kernel bridge). Имя может быть одинаковым в нескольких конфигурационных файлах. Длина имени должна быть не более 15 символов. Виртуальный коммутатор используется для объединения в L2 мост виртуального туннельного интерфейса (определяется параметром vif <NAME>) и сетевого интерфейса, с которого происходит захват фреймов (определяется параметром capture <NAME>).
· bridge_ip <IP/MASK> - параметр определяет локальный IP адрес для интерфейса виртуального коммутатора, который задается параметром bridge <NAME>. Используется для L3 связности между устройствами в LAN сегменте и С-Терра Шлюз через интерфейс захвата фреймов (например, применимо для цели управления С-Терра Шлюз).
· mssfix <VALUE> - параметр выставляет значение MSS в TCP пакетах. При включении данной опции поле MSS всех проходящих через туннель TCP пакетов будет выставлено в <VALUE>, если текущее значение MSS в пакете больше <VALUE>. Применимо для пакетов протокола IPv4, которые вкладываются в Ethernet/802.1Q/QinQ. Для MPLS не работает.
· passtos – параметр включает копирование ToS байта из исходного пакета в инкапсулированный. Применимо для пакетов протокола IPv4, которые вкладываются в Ethernet/802.1Q/QinQ. Для MPLS копирование не работает.
После того, как сервис l2svc будет запущен с данным конфигурационным файлом, будут созданы интерфейсы vif <NAME> и bridge <NAME>, далее интерфейсы vif <NAME> и capture <NAME> будут добавлены в виртуальный коммутатор bridge <NAME>. На интерфейсе bridge <NAME> будет назначен IP адрес, указанный в параметре bridge_ip, например:
root@Hub1:~# ip address show
...
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:50:56:9e:67:4d brd ff:ff:ff:ff:ff:ff
14: tap0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
link/ether ca:f5:a9:b7:e5:35 brd ff:ff:ff:ff:ff:ff
15: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:50:56:9e:67:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 scope global br0
valid_lft forever preferred_lft forever
root@Hub1:~# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.0050569e674d no eth1
tap0
Накладные расходы (overhead) L2 VPN
Так как оригинальный фрейм инкапсулируется в UDP, то минимальные накладные расходы инкапсуляции L2 – это 28 (20 IP+ 8 UDP) байт. Если используется параметр fragment <N> в конфигурационном файле модуля «С-Терра L2», то добавляется еще 4 байта. Не стоит забывать про накладные расходы инкапсуляции IPsec, которые для туннельного режима могут составлять от 50 до 60 байт (зависит от алгоритма шифрования и наличия NAT).
Рисунок 2. Накладные расходы (overhead) L2 + IPsec
Рисунок (см. рисунок 2) показывает минимальный и максимальный размер накладных расходов при организации L2 VPN для оригинального нетегированного, 802.1 Q и QinQ фрейма. Если шифруется MPLS, то размер оригинального фрейма может варьироваться в зависимости от количества меток в стеке, учитывайте это.
Из рисунка (см. рисунок 2) видно, что с учетом размера оригинального фрейма, а также L2 и IPsec инкапсуляций результирующий пакет может иметь размер от 1592 до 1614 байт. Если MTU на WAN интерфейсе С-Терра Шлюз имеет значение в 1500 байт (по умолчанию), то инкапсулированные пакеты будут фрагментированы, что в свою очередь приведет к снижению производительности (до 15 %). Соответственно, при наличии возможности, заказывайте нужный вам MTU у вашего провайдера на каналообразующем оборудовании, чтобы избежать фрагментации и снижения производительности.
Фрагментация, MTU и DF бит
По умолчанию размер MTU для всех интерфейсов модуля «С-Терра L2» - 1500 байт. Размер MTU можно увеличить при помощи параметра tun_mtu <N> в конфигурационном файле модуля «С-Терра L2». Например, увеличение tun_mtu используется для случая, когда MTU устройств в LAN сегменте – 9000 байт, а MTU интерфейса WAN С-Терра Шлюз – 1500 байт. В этом случае большие пакеты будут фрагментированы драйвером С-Терра VPN (фрагментация пакетов происходит после зашифрования).
DF (don’t fragment) бит с исходных пакетов на инкапсулированные не переносится (не настраивается). Используется для того, чтобы большие пакеты могли быть фрагментированы драйвером С-Терра VPN.
Если требуется выполнять фрагментацию в самом модуле «С-Терра L2» до зашифрования (используется в случае, если каналообразующее оборудование блокирует фрагментированные пакеты), то нужно использовать параметр fragment <N> в конфигурационном файле (все пакеты, большие N байт будут фрагментированы). Данный параметр добавляет дополнительные 4 байта и должен быть включен на обеих сторонах туннеля.
Защита 802.1Q трафика
Если нужно зашифровать тегированный 802.1Q трафик, то рекомендуется на каждый VLAN ID создавать отдельный конфигурационный файл модуля «С-Терра L2» и логический 802.1Q интерфейс, а с точки зрения политики безопасности IPsec туннель, - такой подход позволяет лучше контролировать защищаемый трафик (маппирование VLAN ID в IPsec туннель). Но, если топология точка-точка и трафика с различными VLAN ID больше 10, то рекомендуется настраивать один конфигурационный файл и не создавать 802.1Q интерфейсы – это позволит увеличить производительность шифрования (общее правило – чем меньше конфигурационных файлов модуля «С-Терра L2» и IPsec туннелей, тем выше производительность).
Управление С-Терра Шлюз через интерфейс захвата пакетов
Управление С-Терра Шлюз, начиная с версии 4.3, возможно через тот интерфейс, на котором происходит захват фреймов, для этого нужно задать параметр bridge_ip <IP>/<MASK> в конфигурационном файле модуля «С-Терра L2». Если данный вариант по какой-то причине не подходит – используйте выделенный сетевой интерфейс.
Пропуск фреймов протоколов LACP/LLDP
По умолчанию фреймы протоколов LACP/LLDP будут уничтожены. Чтобы они могли пройти через С-Терра Шлюз (требуется в сценарии балансировки нагрузки и резервировании при помощи внешнего коммутатора) нужно в соответствующем файле конфигурации модуля «С-Терра L2» добавить параметр group_fwd_mask со значением 16388, пример:
group_fwd_mask 16388
Копирование ToS байта из оригинального пакета в инкапсулированный
Копирование ToS байта из оригинального пакета в инкапсулированный (и, соответственно, в ESP/NAT-Т пакеты – поведение С-Терра VPN по умолчанию) включается при помощи параметра passtos в конфигурационном файле модуля «С-Терра L2». Применимо для пакетов протокола IPv4, которые вкладываются в Ethernet/802.1Q/QinQ. Для MPLS копирование не работает.
Производительность
В модуле «С-Терра L2» есть возможность выделить определенное количество ядер под инкапсуляцию фреймов в UDP, настраивается при помощи параметра L2VPN_CORE_COUNT в файле /opt/l2svc/etc/global.cfg. По умолчанию используется только одно последнее ядро. Подробнее смотрите на сайте doc.s-terra.com -> С-Терра L2 -> С-Терра L2 4.3-> Руководство администратора -> Настройка Продукта -> Общие настройки.
4. Параметры безопасного взаимодействия.
Весь трафик (на уровне 2 модели OSI) подсетей 192.168.100.0/24 и 192.168.101.0/24, который передается между центром и филиалом, защищается с использованием алгоритмов ГОСТ и протокола IPsec в туннельном режиме.
Инициировать защищенное соединение может как трафик из филиала в центр, так и наоборот, из центра в филиал.
4.1. Параметры протокола IKE:
· Аутентификация при помощи цифровых сертификатов, алгоритм подписи – ГОСТ Р 34.10-2012 (ключ 256 бит);
· Алгоритм шифрования – ГОСТ 28147-89 (ключ 256 бит);
· Алгоритм вычисления хеш-функции – ГОСТ Р 34.11-2012 ТК26 (ключ 256 бит);
· Алгоритм выработки общего ключа (аналог алгоритма Диффи-Хеллмана) – VKO_GOSTR3410_2012_256 (ключ 256 бит).
4.2. Параметры протокола ESP:
· Комбинированный алгоритм шифрования и имитозащиты (контроль целостности) – ESP_GOST-4M-IMIT (ключ 256 бит).