пятница, 8 февраля 2013 г.

два tap интерфейса в мост

beta# openvpn --remote 172.16.10.1 --dev tap0 --secret key.txt Скорость TCP, Mbps Задержка, ms Нагрузка CPU, % 290 0.150-0.180 70-80 Задержки увеличились в четыре раза. Относительно начального значения этот рост может показаться существенным, однако абсолютные значения его равняются накладным расходам любого активного сетевого оборудования поэтому этим фактом можно пренебречь. Смена алгоритма шифрования. По-умолчанию OpenVPN использует алгоритм Blowfish с 128-битным ключом шифрования. Данный алгоритм отличается своей открытостью, свободой использования, патентной чистотой. На момент создания он также являлся одним из самых быстрых, но до сих пор его криптографическая стойкость высока (гарантируется стойкость честного 128-ого ключа). Однако современные реализации более криптостойкого алгоритма AES (Advanced Encryption Standard, также известного как Rijndael) на практике имеют большую производительность: # openvpn ... --cipher AES-128-CBC Скорость TCP, Mbps Задержка, ms Нагрузка CPU, % 355

Шифрование Ethernet на скорости 1Gbps Шифрование Ethernet на скорости 1Gbps Данная статья рассматривает конкретную реализацию прозрачного шифрования. Для более глубокого понимания вопроса обратитесь к статье . В одном из проектов встала задача прозрачного шифрования трафика на Ethernet уровне. Стоимость аппаратных шифраторов для такой скорости зашкаливала и было решено посмотреть на возможность программной реализации. В статье рассматривается решение по преодолению рубежа 1Gbps пропускной способности зашифрованного канального уровня и имеющее низкие временные задержки. Решение не требует навыков программирования, только дистрибутив GNU/Linux системы со свободным программным обеспечением, доступным в большинстве стандартных репозиториев. Отдельной задачей решаемой в рамках статьи была плохая распараллеливаемость криптографических алгоритмов. Не смотря на большую суммарную производительность многоядерных процессоров, одиночный VPN-туннель имеет производительность 300-600 Mbps. Стенд состоит их двух серверов ETegro Hyperion RS160 G3. Каждый содержит: два сетевых интерфейса. Скорость каждого 1Gbps; eth0 подключённый к офисной сети; eth1 через который напрямую соединены патч-кордом два тестовых компьютера. свободную операционную систему GNU/Linux 6.0.2 amd64; процессор Quad-Core AMD Opteron Processor 2386 SE (четыре ядра, тактовая частота 2800 Mhz). Сервисом виртуальной криптографически защищённой частной сети является свободный пакет . Данная программа имеет важную возможность создания виртуального сетевого TAP-интерфейса способного инкапсулировать Ethernet-фреймы, а не только более высокоуровневые IP-пакеты. Тестирование производительности сетевого подключения производится программой 2.4.4. Измеряется как потоковый трафик, так и его задержки (путём пересчёта измерений *RR тестов, выдающих количество транзакций (request/response) произведённых в секунду). Между eth1 устройствами поднята IPv4 сеть: 172.16.10.0/24. На устройстве eth0 никаких IP адресов не устанавливается. Для офисного оборудования eth0 является прозрачным и безопасным мостом второго уровня. зелёным цветом обозначаются не зашифрованные данные; красным цветом обозначаются зашифрованные данные; Сетевой TAP интерфейс объединяется с физическим eth0 в т.н. мост. Этим достигается прозрачная пересылка Ethernet-фреймов с физического интерфейса в инкапсулирующий туннель, на противоположном конце которого также имеется связанный мостом физический интерфейс. Распараллеливание процесса шифрования трафика осуществляется запуском нескольких OpenVPN-демонов. Распределение трафика между демонами (потока атомарных Ethernet-фреймов) производится за счёт объединения TAP-интерфейсов в виртуальный bond-интерфейс. Bonding процесс объединения сетевых интерфейсов в один общий виртуальный, с целью увеличения либо суммарной пропускной способности, либо надёжности соединения. Несложный алгоритм планирования распределяет поступающие Ethernet-фреймы по интерфейсам bond-а. Bond-интерфейс, в свою очередь, объединяется в мост с Ethernet интерфейсом eth0. зелёным цветом обозначаются не зашифрованные данные; красным цветом обозначаются зашифрованные данные; жёлтым цветом обозначаются динамически меняющиеся от входного трафика данные; фиолетовым цветом обозначены вызовы системных функций; ETH0 сетевой интерфейс подключённый к сети офиса; ETH1 сетевой интерфейс подключённый к ETH1 противолежащего офиса; CMPRS сжатие Ethernet-фрейма без потерь; PAD дополнение (padding) сжатого фрейма до размера шифроблока; INCR инкрементирующийся счётчик; SEQ порядковый номер OpenVPN-пакета; DATA сжатый дополненный фрейм; ENC шифрование данных, используя вектор инициализации IV; EDATA зашифрованный DATA фрейм; PRNG генератор криптографически стойких псевдослучайных чисел; IV вектор инициализации, передаваемый в открытом виде; HMAC функция и результат хэш-кода аутентичности сообщения; UDP UDP-пакет инкапсулирующий OpenVPN-пакет; IP IP-пакет инкапсулирующий UDP-пакет. Во время шифрования используется режим сцепления блоков шифротекста (Cipher Block Chaining (CBC)). Для этого режима необходимо использование постоянно меняющегося вектора инициализации. Вектор инициализации передаётся в открытом виде, однако из-за использования PRNG его сложно (невозможно) предсказать. Для предотвращения атак повторного воспроизведения (replay attack) используется код аутентичности сообщения (Message Authentication Code (MAC)) основанный на использовании хэш-функции (HMAC). Сжатие данных необходимо с точки зрения криптографии для уменьшения возможного большого количества корреляций во входящем трафике. Для увеличения энтропии псевдослучайного шума чисел для PRNG имеется возможность двухстороннего обмена ею между OpenVPN-демонами. Смена ключей шифрования (время от времени) происходит без каких-либо задержек для транзитного трафика, так как есть возможность работы одновременно имея пару параллельно действующих ключей. Процесс обмена ключами может происходить используя TLS-соединение (Transport Layer Security). Гарантированная доставка пакетов данных обеспечивается на уровне OpenVPN, а не более низлежащих транспортов, используя SEQ. Результаты измерения производительности TCP соединения напрямую по сети между eth1 интерфейсами: Скорость TCP, Mbps Задержка, ms Нагрузка CPU, % 940 0.036 1-2 Note под нагрузкой CPU будет подразумеваться нагрузка одного ядра/процессора на котором запущен демон OpenVPN. Время от времени один и тот же процесс OpenVPN может перемещаться между разными ядрами. Используются заранее подготовленные (pre-shared) ключи шифрования, которые находятся на обоих концах соединения: % openvpn --genkey --secret key.asc Запуск OpenVPN на каждом из компьютеров производится следующим образом: alpha# openvpn --remote 172.16.10.2 --dev tap0 --secret key.txt

Комментариев нет:

Отправить комментарий