Как предполагается обход ICMP NAT, если рассматриваемое устройство NAT перезаписывает исходящие ICMP-пакеты?Недостаток в отверстии ICMP?
Диаграмма
=========================================================================================
| CLIENT | <---> | NAT-C | <---> { internet } <---> | NAT-S | <---> | SERVER |
=========================================================================================
19.19.19.19 (external addresses) 72.72.72.72
192.168.0.2 192.168.0.1 (internal addresses) 172.16.0.1 172.16.0.2
Механика
Краткий обзор ICMP holepunching, как описано в pwnat
:
SERVER
посылает ICMP Echo Request пакеты (опрашивает) на другой хост (например, 3.3.3.3
) в открыть отверстие в NAT-S
. Когда CLIENT
хочет подключиться, он отправляет ICMP Time Exceeded пакет до NAT-S
, который должен быть перенаправлен на SERVER
. Для того, чтобы указанная маршрутизация работала, CLIENT
создает пакет ICMP Time Exceeded, встраивая в него один и тот же пакет (ICMP Echo to 3.3.3.3
), который ожидает отправки в первую очередь SERVER
.
Проблема
CLIENT
Если потребность вставлять один и тот же (ICMP Echo Request) пакет, как он оставил NAT-S
в его ICMP превышено время ответа, он должен знать пакет запрос ID. Но как он узнает этот идентификатор запроса?
Согласно RFC 3022 Section 2.2, когда NAT-S
встречает исходящий ICMP Echo Request, он переписывает поле запроса ID в пакете для уникального внешнего идентификатора запроса, так что он может маршрутизировать будущий ICMP Echo Ответы с тем же идентификатором запроса на SERVER
.
Учитывая, что проблема выше, кажется, что помещение за pwnat
и пробой ICMP недопустимо, и оно никогда не должно работать. Я что-то упустил?
Заранее спасибо :)