Когда через NAT-гейт идет UDP-запрос наружу (cкажем к DNS), как NAT-гейт определяет, что то, что мы получаем, является ответом на запрос внутренней машины, а не запросом к NAT-гейту? В UDP ведь нет соединения...
нат просто переписывает в пакете ip-адрес отправителя на свой и получив ответ( в не зависимости от того что это за протокол -tcp,udp или icmp) форвардит его назад клиенту
На самом деле немного сложнее всё. и НАТ различает tcp и udp.
Для UDP - НАТ также ведёт таблицу сходящих пакетов. И если ответ пришёл в тот же порт, из которого вышел (а так работают большинство UDP-протоколов) и в течение определенного времени от запроса - тогда НАТ перенаправляет ответ на исходную машину.