Скільки контрольних сум має пакет VPN? Залежить
Кількість залежить від версій IP, протоколу перенесення та формату захисту. Контрольні суми заголовка, верхнього рівня й мітки цілісності різняться.
Твердження, що пакет VPN несе рівно дві контрольні суми, звучить охайно й достатньо часто хибне, щоб його варто було розібрати. Кількість залежить від того, які версії IP трапляються, який транспортний протокол переноситься і який формат захисту використовує тунель. Контрольна сума заголовка, контрольна сума верхнього рівня й криптографічна мітка цілісності — це три механізми з трьома областями охоплення. Їхній підрахунок починається з позначення того, що покриває кожен із них.
Перевірте, які версії IP насправді є на лінії
Заголовки IPv4 несуть 16-бітну контрольну суму заголовка, а заголовки IPv6 не несуть нічого подібного. Цей єдиний факт змінює число для кожного тунелю, бо пакування IPv4 в IPv6 і IPv6 в IPv4 дає різні документи. Тунель може нести обидві родини одночасно, і тоді один напрямок може містити поле, якого немає в іншому. Установіть версії, перш ніж щось лічити.
Запишіть розкладку як список заголовків, а не як малюнок. Порядок важливий під час читання запису, і наявність або відсутність поля контрольної суми — перше, що треба позначити.
outer IPv6 | ESP | inner IPv6 | UDP | application data
outer IPv4 | ESP | inner IPv4 | TCP | application data
У першому рядку ніде в його IP-заголовках немає контрольної суми IP-заголовка, а в другому їх дві, коли обидва заголовки — IPv4. Та сама технологія тунелю, інше число, і жоден рядок не є повним форматом лінії.
Перевірте, що покриває кожна контрольна сума
Охоплення — це частина, яку люди пропускають, і саме вона робить число осмисленим. Контрольна сума заголовка IPv4 захищає заголовок і більше нічого, тому нічого не каже про корисне навантаження за ним. Контрольна сума UDP поверх IPv6 покриває псевдозаголовок, а також заголовок і корисне навантаження UDP, тобто сягає в перенесений пакет, коли дейтаграма тунелюється. TCP має власну контрольну суму з подібною залежністю від псевдозаголовка. Це три різні області охоплення, хоча всі три називають контрольними сумами.
RFC 791 визначає перевірку заголовка IPv4 та її перерахунок на кожному переході, а RFC 8200 визначає обробку верхнього рівня поверх IPv6, включно з псевдозаголовком. Жоден документ не каже, що пакет VPN має фіксовану кількість контрольних сум, бо жоден не описує тунель.
tshark -r capture.pcap -Y "ip.proto == 50" -V | grep -i checksum
Перевірте захист цілісності окремо
Цілісність ESP — це криптографічний захист із власним охопленням і поданням, що залежить від алгоритму. Це не контрольна сума IP або UDP під іншою назвою, і її довжина змінюється залежно від обраної конструкції. Перевірка цілісності покриває визначену частину пакета, яка залежно від режиму може включати заголовок ESP і частину корисного навантаження. Лічити її як поле контрольної суми відомої ширини — саме там більшість таких пояснень розсипається.
Прочитайте обрану конструкцію, перш ніж лічити байти, і опишіть результат як захист цілісності, а не як контрольну суму з іншою міткою. Декодер назве поле, якщо ви його запитаєте.
tshark -r capture.pcap -Y esp -V | grep -iE "integrity|icv"
Перевірте точку спостереження, перш ніж лічити
Запис на внутрішньому інтерфейсі та запис на лінії можуть показувати цілком різні рівні. На внутрішньому інтерфейсі тунель уже знято, тому ви бачите перенесений пакет і жодного із зовнішніх заголовків. На лінії ви бачите зовнішні заголовки й зашифроване корисне навантаження, яке не можете прочитати. Жоден із видів не хибний, і це не види одного й того самого об'єкта. Укажіть, де зроблено запис, перш ніж наводити будь-яке число.
sudo tcpdump -ni eth0 -vv -c 5 esp
sudo tcpdump -ni tun0 -vv -c 5
Перша команда показує зовнішній пакет із його трейлером цілісності, а друга показує перенесений пакет із його власною транспортною контрольною сумою. Додавання чисел з обох записів нічого не лічить двічі, але двічі пояснює той самий пакет.
Порівняйте число з реальним записом
Декодуйте один пакет повністю й позначте кожне поле, яке декодер називає контрольною сумою або значенням цілісності. Потім порівняйте кожну позначку із записаною розкладкою й видаліть ті, що належать рівню, який ви насправді не лічите. Число, що переживе цю вправу, можна захистити, а число, назване з пам'яті, — ні.
Повторіть для напрямку відповіді, бо тунель, що несе обидві родини, може відрізнятися за напрямком і за потоком. Потім назвіть число разом із його охопленням, наприклад три контрольні суми для цього внутрішнього пакета в цій точці спостереження, а не як властивість пакетів VPN загалом.
tshark -r capture.pcap -T fields -e ip.checksum -e udp.checksum -e tcp.checksum