Ядро Linux предоставляет Netfilter как механизм для функций NAT и брандмауэра. Обе эти функции требуют анализа и классификации входящих пакетов, что называется «проверкой пакетов с отслеживанием состояния».
Для большей части трафика достаточно взглянуть на заголовки IP-пакетов. Однако такие протоколы, как FTP, IRC, H.323 (и еще несколько), имеют определенные модули в конфигурации ядра, чтобы облегчить надлежащее прохождение NAT для этих пакетов. В ядре они называются «модулями conntrack».
Насколько я понимаю, полезная нагрузка этих пакетов проверяется, чтобы позволить netfilter распознать, когда приходит внешнее соединение и его необходимо направить соответствующему клиенту. Это связано с тем, что протокол ожидает информацию, передаваемую на уровне 7 OSI, который имеет прямое влияние на фактические IP-пакеты, отправляемые на уровне 3. Другими словами, код приложения вызывает создание другого TCP-соединения, которое должно маршрутизироваться Устройство NAT.
Теперь к моим вопросам: