Ответ 1
Нет.
Я полагаю, вы знаете, как это работает:
сервер отправляет пакеты запроса эхо-сигнала ICMP на фиксированный адрес (например, 1.2.3.4), где ответы эхо-сигналов не возвращаются, клиент, притворяясь прыжком в Интернете, отправляет ICMP Time Exceeded пакет в сервер, ожидайте, что NAT в передней части сервера пересылает сообщение о превышении времени ICMP на сервер.
Изображение выше с домашняя страница pwnat, это на том основании, что клиент не находится за NAT, а исходная полезная нагрузка превышена сообщение обычно не проверяется реализациями NAT. Если оба клиента и сервер находятся за NAT, как это,
=========================================================================================
| CLIENT | <---> | NAT-C | <---> { internet } <---> | NAT-S | <---> | SERVER |
=========================================================================================
В настоящее время он редко работает в основном по двум причинам ниже:
-
Когда сервер отправляет пакеты запроса эхо-сигнала ICMP на фиксированный адрес, согласно RFC 3022, поле идентификатора в эхо-сигнале ICMP заголовок запроса будет однозначно сопоставлен идентификатору запроса зарегистрированного IP-адреса NAT-S, чтобы он мог маршрутизировать будущие ICMP-эхо-ответы с тем же идентификатором запроса отправителю, , так что заголовок ICMP в пакетах запросов ICMP должен быть изменен для замены идентификатора запроса и контрольной суммы заголовка ICMP. RFC 3022 Раздел изменений пакетов ошибок ICMP:
В настройке NAPT, если IP-сообщение, встроенное в ICMP, пакет запросов TCP, UDP или ICMP, вам также необходимо будет изменить соответствующий номер порта TU в заголовке TCP/UDP или запрос Поле идентификатора в заголовке запроса ICMP.
Но клиент не знает идентификатор внешнего запроса (код pwnat использует 0 в качестве идентификатора исходного запроса), он отправляет на сервер пакет ICMP Time Exceeded, даже если пакет может достигать NAT-S перед сервером, NAT-S не может найти активное сопоставление для встроенного пакета, большинство реализаций NAT потеряют его.
-
Кроме того, согласно rfc 5508, когда NAT-C принимает пакет ICMP Error из Private Realm, NAT- C использует пакет, встроенный в сообщение об ошибке ICMP (т.е. IP-пакет от клиента к серверу) для поиска сеанса NAT, которому принадлежит встроенный пакет. Если NAT-C не имеет активного отображения встроенного пакета, NAT-C СЛЕДУЕТ отбрасывать пакет ICMP Error. Это означает, что пакет ICMP Time Exceeded от клиента не будет поступать на NAT-S.
Итак, pwnat работает только с базовыми устройствами NAT (rfc 1631), которые выполняют простой перевод адресов, не будут работать с каким-либо устройством NAPT который имеет надежную реализацию NAPT. И В этой статье упоминается эта проблема.