Тунелі - хто вони такі і з якого району, 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, буде виглядати наступним чином:

Зовнішній заголовок 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, будуть виглядати наступним чином:
Накладні витрати, байт