Хабрачерновик: Кошки-мышки: Играем с протоколом IPv6

Как мыши кота погребали

Отправка пакетов IPv6 через сети IPv4


Мы продолжаем тему «сырых» IP-пакетов, и выходим на версию 6 протокола.
Будем пинговать IPv6-Гуглосервер
ping 2A00:1450:4010:C00::69
и посмотрим, что из этого выйдет.
Вот расшифровка пакета, содержащего отправляемый нами ICMPv6-эхо-запрос, перехваченный сетевым монитором:
45 00       // Ver: 4 // HL: 20 // ToS: none
00 50       // Total-Length: 80
00 6D       // ID: 109
00 00       // Flagsf: none
80          // TTL: 128
11          // Proto: UDP
EF FA       // IPv4-Checksum
0A 45 60 43 // Src = 10.69.96.67
41 37 9E 76 // Dst = 65.55.158.118

CA 85       // SrcPort = 51845
0D D8       // DstPort = Teredo Servers (3544) Tunneling IPv6 over UDP through NATs
00 3C       // Length = 60
43 07       // UDP-Checksum

60 00 00 00 // Versions: IPv6 // flags: 00-00000 (DSCP: 0, ECT: 0, CE: 0, FL: 0)
00 0C       // PayloadLength: 12
3A          // NextProtocol: ICMPv6, 58
15          // HopLimit: 21
20 01 00 00 41 37 9E 76 30 11 E0 04 2A A8 7F D4
              // SourceAddress: 2001:0:4137:9E76:3011:E004:2AA8:7FD4
2A 00 14 50 40 10 0C 00 00 00 00 00 00 00 00 69
              // DestinationAddress: 2A00:1450:4010:C00::69

80          // MessageType: Echo request
00          // Code: 0
08 79       // ICMPv6-Checksum
56 0D       // Identifier: 22029
DC 27       // SequenceNumber: 56359
00 00 00 00 // EchoData: Binary Large Object (4 Bytes)

Как видим (или не видим), запрос отправляется через Teredo псевдоинтерфейс.

Почему же черепашка не танцует?

К сожалению, одной лишь простой инкапсуляции IPv6-пакета в Teredo-UDP недостаточно. Перед этим, нужно еще сконфигурировать туннель. Более того, даже после конфигурации туннеля ответ придет не от самого Teredo-сервера (как можно было подумать), а через другой релейный шлюз (к которому еще и дыру в NAT'е предстоит пробить).

Другими словами, чтобы отправить ICMPv6-запрос (и, соответственно, получить ответ) нужно проделать такие шаги:
0) определить IPv6-адрес получателя (например через DNS, запросив запись AAAA)
1) определить IPv4-адрес Teredo-сервера (тоже через DNS, запись типа A)
2) отправить Teredo-серверу UDP-запрос, включающий в себя запрос на обнаружение IPv6-маршрутизатора
3) получить ответ от Teredo-сервера (в котором будет содержаться анонс маршрутизатора и дополнительные данные конфигурации)
4) наконец-таки отправить Teredo-серверу наш инкапсулированный ICMPv6-эхо-запрос
5) получить в ответ от Teredo-сервера «пузырь» (пустышку-оригинатор) в котором будет содержаться информация, на какой релейный шлюз нужно отправлять специальный запрос-заколку (hearpin), чтобы пробить NAT к релею.
6) отправить «заколку-пустышку» релею
7) и, наконец, получить от релея долгожданный ICMPv6-эхо-ответ (или не получить, это уж как повезет).
8) ???
9) PROFIT!!!

И, даже, если корректный ответ будет-таки получен, то скорее всего программа ping.exe все равно напишет, что «Превышен интервал ожидания для запроса.»

Продолжение следует…
10 февраля в 16:06
1

отсортировано по дате по оценке
ответы (3)

+6
taliban #
При редактировании топика есть кнопка «в черновик», если что.
Уважаемому Александру уже много раз говорили, что QA немного для другого предназначен.

Пожалуйста, работайте со статьей в черновиках, когда ее допишите — выкладывайте на суд народа.
difiso, 10 февраля в 18:45
>> При редактировании топика есть кнопка «в черновик», если что
Да, а, еще можно черновики держать у себя на рабочем столе и перекладывать «в Корзину», если что.

<trollface>
Очень не хотелось сваливаться в офф-топ, но, просто уже накипело:
</trollface>

>> QA немного для другого предназначен
Специально залез в хэлп, чтоб лишний раз посмотреть, для чего же все-таки Q&A предназначен. Цитировать правила не буду. Воспользуюсь презумпцией невиновности, поскольку не вижу за собой ни одного нарушения правил блога Q&A.

>> Пожалуйста, работайте со статьей в черновиках, когда ее допишете — выкладывайте на суд народа.
Спасибо, конечно! Но, по Правилам, топик, помещенный «в черновики» сможет видеть только автор (хозяин) топика, но, если я не хочу скрывать свой топик ото всех, а, хочу наоборот, привлечь заинтересованных хабраюзеров к процессу коллективного написания хабратопика (в эпоху-то гит-хабов и свн'ов это выглядит совершенно естественно), а, на «продакшен» (в тематический блог) выложить уже готовый топик, вылизанный, перепроверенный, отлаженный, безупречно оформленный, семантически-размеченный (мой перфекционизм просто не имеет границ).
1010101001000100110100111, 11 февраля в 09:27
Вообще же, блог Q&A теперь не очень удачно организован. 1010101001000100110100111, 13 февраля в 11:49
+3
DevMan #
Продолжение следует…
Только не в QA.
0
egorinsk #
Вы все эти пакеты еще и через свой псевдо VPN отправляете, который описывался в предыдущих вопросах?
Да, я хочу с помощью этого туннеля сделать максимально-прозрачной работу с протоколами IPv4 и IPv6 (скрывая детали реализации от прикладных процессов, работающих с сетью). Весь Интернет-трафик (а, возможно что и Ethernet-трафик) будет проходить через этот туннель. Мой VPN-туннель будет так же давать ответы-заглушки на шквал типичных для IPv6 запросов на обнаружение соседей/маршрутизаторов, а так же всевозможных излишне-болтливых DHCP-запросов создавая «иллюзию», что в локальной сети имеются только два узла: сам комп и его единственный «виртуальный» сосед-маршрутизатор, который еще и по-совместительству «подрабатывает» DHCP-сервером, а так же резольвит DNS (в том числе и AAAA-записи). 1010101001000100110100111, 11 февраля в 11:30

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.