Тунелі - хто вони такі і з якого району, twistedminds

З кожним разом статті стають все більше, а почерк размашистей :) Цього разу я вирішив розділити тему настройки GRE Тунелів, а так само їх захист за допомогою IPSec на дві частини - теоретичну і практичну. Якщо ви прийшли сюди з пошукових систем і відразу збираєтеся кидатися у вир з головою, то можете безпосередньо перейти до налаштування GRE over IPSec із застосуванням IPSec профілів і crypto map.

В інтерпретації Cisco тунель - це логічний інтерфейс, роль якого полягає в тому, щоб инкапсулирование пакети одного протоколу (passenger protocol), за допомогою другого (carrier protocol) і передати його по третьому (transport protocol). У ролі протоколу, який займається инкапсуляцией можуть виступати такі протоколи як GRE, IPIP. GRE (Generic Routing Encapsulation) - протокол, який на відміну від IPIP, дозволяє инкапсулировать в себе інші протоколи, такі як AppleTalk, IP, IPX і інші. Аби ethertype був правильним.

Пакет, який потрапив в тунель з инкапсуляцией GRE, буде виглядати наступним чином:

Тунелі - хто вони такі і з якого району, twistedminds

Зовнішній заголовок IP, заголовок GRE, внутрішній заголовок IP, корисне навантаження

Тема GRE може варіюватися від 4 до 16 байт в залежності від того які опції включені.

  • C. K і S в заголовку це опції, які говорять чи слід очікувати поля з контрольною сумою (checksum), ключем (key) і номер послідовності (sequence number)
  • ver - номер версії GRE (0)
  • Protocol - ethertype інкапсуліруемого протоколу
  • Checksum - контрольна сума (опціонально)
  • Key - ключ безпеки тунелю (опціональний)
  • Sequence number - номер послідовності (опціональний)

За замовчуванням всі опції відключені і заголовок дорівнює 4 байтами. Решта опцій можна включити в процесі конфігурації тунельного інтерфейсу:

Пакет, який потрапив в IPIP тунель, буде виглядати точно так само, тільки без заголовка GRE. Зі зрозумілих причин в якості passenger protocol в IPIP тунелі може виступати тільки IP.

Чим же так гарні тунелі?
  • Recursive routing - коли протокол маршрутизації починає вважати, що використовувати тунель до віддаленого хоста вигідніше, ніж реальний шлях. Вирішується це питання або статичними маршрутами, або процесом маршрутизації, відмінним від використовуваного на WAN інтерфейсів.
  • IP Fragmentation
MTU і IP Fragmentation

MTU (Maximum Transfer Unit) вказує на максимальний обсяг інформації в байтах, яка може бути передана. Для ethernet це 1500 байт, якщо не брати до уваги Jumbo Frames. MSS або Maximum Segment Size - це максимальний розмір переданого TCP сегмента і зазвичай дорівнює 1460 байтам (1500 - 20 байт заголовка IP - 20 байт заголовка TCP).

Але тут в справу вступають тунелі. Як я вже говорив, GRE додає свій заголовок (4 байта) і новий IP заголовок (20 байт), відповідно MTU на тунельному інтерфейсі потрібно зменшити до тисячі чотиреста сімдесят шість байт в разі GRE і до 1480 у разі IPIP. Зробити це можна вручну або за допомогою PMTUD - path MTU discovery.

Так само не варто забувати про накладні витрати IPSec, в разі якщо ми вирішимо шифрувати дані потрапляють в тунель. У гіршому випадку накладні витрати для IPSec, на додачу до тих 24 байтам від GRE, будуть виглядати наступним чином:

Накладні витрати, байт