Эта статья может быть запутанной или непонятной для читателей . ( Январь 2014 ) |
Пробивка отверстий ICMP — это метод, используемый в приложениях транслятора сетевых адресов (NAT) для поддержки потоков пакетов протокола управляющих сообщений Интернета (ICMP), проходящих через NAT. Методы обхода NAT обычно требуются для сетевых приложений клиент-клиент в Интернете, включающих хосты, подключенные к частным сетям , особенно в одноранговых и голосовых развертываниях по протоколу IP (VoIP).
Пробивка отверстий ICMP устанавливает соединение между двумя хостами, взаимодействующими через один или несколько сетевых трансляторов адресов в одноранговой или клиент -серверной модели . Обычно сторонние хосты в сети общественного транспорта используются для установления состояний портов UDP или TCP, которые могут использоваться для прямой связи между взаимодействующими хостами, однако пробивка отверстий ICMP не требует участия третьей стороны для передачи информации между одним или несколькими NAT, используя свободное принятие NAT входящих пакетов ICMP Time Exceeded . [1]
Как только пакет ICMP Time Exceeded достигает целевого NAT, произвольные данные в пакете, ожидаемые NAT, позволяют пакету достичь целевого сервера, что позволяет целевому серверу получить от клиента публичный IP-адрес клиента и другие данные, хранящиеся в пакете.
В настоящее время единственный метод пробивки отверстий ICMP или пробивки отверстий без участия третьей стороны (автономный обход NAT) был разработан Сэми Камкаром 22 января 2010 года и выпущен в открытом исходном коде программного обеспечения pwnat, [2] а позже метод был опубликован в IEEE. Согласно статье: [3]
Предлагаемая методика предполагает, что клиент каким-то образом узнал текущий внешний (глобально маршрутизируемый) IP-адрес NAT сервера. Основная идея для того, чтобы сервер мог узнать IP-адрес клиента, заключается в том, чтобы сервер периодически отправлял сообщение на фиксированный известный IP-адрес. Самый простой подход использует сообщения ICMP ECHO REQUEST на нераспределенный IP-адрес, например, 1.2.3.4. Поскольку 1.2.3.4 не распределен, ICMP REQUEST не будет маршрутизироваться маршрутизаторами без маршрута по умолчанию; сообщения ICMP DESTINATION UNREACHABLE, которые могут быть созданы этими маршрутизаторами, могут просто игнорироваться сервером. В результате сообщений, отправленных на 1.2.3.4, NAT включит маршрутизацию ответов в ответ на этот запрос. Затем подключающийся клиент подделает такой ответ. В частности, клиент передаст сообщение ICMP с указанием TTL_EXPIRED. Такое сообщение может быть законно передано любым маршрутизатором Интернета, и адрес отправителя не будет соответствовать целевому IP сервера. Сервер прослушивает (поддельные) ответы ICMP и после получения инициирует соединение с IP отправителя, указанным в ответе ICMP.