Відповіді:
Для повідомлень типу запитів / відповідей типу типу Echoes (pings) NAPT використовує ідентифікатор ICMP Query (іноді просто називається ICMP ID) так само, як і номер TCP або UDP-порту.
Для повідомлень про помилки ICMP, таких як Destination Unreachable, він використовує внутрішню копію заголовків кадру ICMP-пакету, яка спричинила помилку для з'ясування, яке відображення в таблиці NAT використовувати для її перекладу.
На ці процедури коротко посилаються в декількох RFC, пов'язаних з NAT, але мені було важко знайти той, який чітко прописав цю процедуру. Див. "Традиційний NAT", RFC3022 , розділ 4.1.
Це не суперечить жодному зіставленням TCP або UDP, оскільки при гарній реалізації NAPT протокол є однією з частин інформації, що зберігається у записі таблиці NAT, щоб зробити його унікальним.
Я зробив невелике моделювання (засноване на пристрої GSN3 Kali Linux CLI), щоб перевірити, що відбувається при зіткненнях ICMP (мабуть, це може бути специфічно для постачальника):
На запити / відповіді ICMP Перед NAT відображається ситуація, коли Ідентифікатори запитів ICMP з двох пристроїв (з IP-адресами 10.0.0.1 та 10.0.0.2 відповідно) стають рівними.
Одночасно на запити / відповіді ICMP Після того, як NAT показано, що Ідентифікатор сеансу ICMP, що стикається, NAT змінюється на 0, а звідти збільшується.
Як підсумок можна сказати, що Linux NAT обробляє зіткнення ідентифікаторів ICMP увімкнено (Оскільки ідентифікатори ICMP не змінюються перед NAT).