Туннелирование и IPSec

«Определение»: инкапсуляция трафика внутрь специального сетевого протокола

Задачи:

Простейшее решение: использовать прикладной уровень:

  1. Подключение и авторизация
    • Клиент                                           Сервер
      VPN-клиент ---> eth0: 5.6.7.8 ---> (Интернет) ---> eth0: 1.2.3.4 ---> VPN-сервер
  2. Создание виртуальных сетевых tun или tap интерфейсов и настройка их как обычных сетевых карт:
    • Клиент                                           Сервер
      VPN-клиент <--> eth0: 5.6.7.8 <--> (Интернет) <--> eth0: 1.2.3.4 <--> VPN-сервер
       |                                                                     |
      tun0: 192.168.10.2                                                    tun0: 192.168.10.1
  3. Обмен данными через туннель:
    • VPN-клиент <--> eth0: 5.6.7.8 <--> (Интернет) <--> eth0: 1.2.3.4 <--> VPN-сервер
       |                                                                     |
      tun0: 192.168.10.2 <-- (Пакет для 102.168.10.1)                 … <-- tun0: 192.168.10.1
      На всем протяжении пути от 5.6.7.8 до 1.2.3.4 пакет не меняется.
    • TCP over TCP ⇒ использование UDP
    • Паразитная нагрузка (поля транспортного и прикладного уровней)
    • Примеры: vtun, OpenVPN, …

Использовать сетевой уровень ( «IP over IP») :

Пример: настройка GRE-тоннеля

Виртуальные машины с GRE-туннелем: одна, другая, маршрутизатор (замена интернету) :) .

IPSec

Базовая статья: An Illustrated Guide to IPsec, смотреть на картинки обязательно.

Четыре вида (2×2):

  1. Сокрытие трафика:
    • (нет): Authentication Header (AH)

    • (да): Encapsulating Security Payload (ESP)

  2. Какой уровень протоколов защищаем:
    • (транспортный): Transport Mode

    • (сетевой): Tunnel Mode

Authentication Header (AH)

Только аутентификация (контрольные суммы), все IP-поля, по возможности, сохраняются

AH + Transport

Структура IPSec-пакета (на примере TCP-контента):

  1. Поля IP-пакета остаются неизменными, кроме:
    • proto=TCPproto=AH (51)

    • pkt_len=sizepkt_len=size+AH_size

  2. Между заголовком и контентом IP-пакета добавляется сам AH (с полем next=TCP)

  3. В целях аутентификации вычисляется контрольная сумма всех полей, кроме тех, что меняются по дороге, а также контента (TCP-пакета)

    • ⇒ вычисляется контрольная сумма полей src_IP и dst_IP

AH + Tunnel

Структура IPSec-пакета (на примере TCP-контента):

  1. Поля IP-пакета остаются неизменными, кроме:
    • proto=TCPproto=AH (51)

    • pkt_len=sizepkt_len=size+AH_size+IP_header_size`

  2. Между заголовком и исходным IP-пакетом в неизменном виде вставляется сам AH (с полем next=IP)

  3. В целях аутентификации вычисляется контрольная сумма всех полей, кроме тех, что меняются по дороге, а также контента (IP-пакета)

    • ⇒ вычисляется контрольная сумма полей src_IP и dst_IP как IPSec-пакета, так и туннелируемого IP-пакета

Encapsulating Security Payload (ESP)

Шифрование и (по необходимости) аутентификация.

ESP + Transport

Структура IPSec-пакета (на примере TCP-контента):

  1. Поля IP-пакета остаются неизменными, кроме:
    • proto=TCPproto=ESP (50)

    • pkt_len=sizepkt_len=new_size

  2. Далее следует ESP-секция, содержащая заголовок ESP, исходный TCP-пакет и метаданные TCP-пакета, в которой шифруется всё, кроме заголовка
    • ⇒ шифруются также метаданные, например поле next=TCP

  3. Далее может (должна) следовать дополнительная аутентификационная секция, в которой считается контрольная сумма всей ESP-секции.

ESP + Tunnel

Структура IPSec-пакета (на примере TCP-контента):

  1. Поля IP-пакета никого не интересуют, потому что они есть внутри туннелируемого контента; поле proto=ESP (50)

  2. Далее следует ESP-секция, содержащая заголовок ESP, исходный IP-пакет и метаданные IP-пакета, в которой шифруется всё, кроме заголовка
    • ⇒ шифруются также метаданные, например поле next=IP

  3. Далее может (должна) следовать дополнительная аутентификационная секция, в которой считается контрольная сумма всей ESP-секции.

«And the winner is… oops… er… never mind»

Вывод: в жизни можно использовать только ESP и лучше в туннельном виде:

Ну, и чем это лучше других туннелей?

Виды VPN (первый заход)