Я как то не совсем понимаю как работает masquerade.
Для TCP/UDP вроде как понятно - роутер принимает пакет от компьютера из локалки, отправляет его от своего имени серверу. При этом запоминает, с какого порта он его отправил. И когда на этот порт приходит ответ, роутер знает, куда отправлять ответ.
Но, насколько я знаю, в icmp нет портов. Но это не мешает работа пинга. Более того, мне приходит ответный пакет даже если он отправлен не тем, кому я послал пакет, как например, в случае traceroute.
Как оно сделано?