NFQUEUE: не отправляются измененные пакеты

По правилу iptables пакеты ставятся в очередь NFQUEUE. Перехват на raw PREROUTING пакетов, где IP-адрес назначения присвоен данной машине.

В юзерспейсе работает программа, получающая пакеты из NFQUEUE. Она заменяет IP-адрес источника на IP интерфейса данной машины, а IP-адрес назначения - на IP удаленного сервера. Контрольная сумма пересчитывается. Присваивается вердикт NF_ACCEPT.

Ожидаемое поведение: модифицированные пакеты отправляются на удаленный сервер как исходящие от данной машины.

Фактическое поведение: пакеты видно в callback'е NFQUEUE, они модифицируются корректно, но не отправляются, теряются.

Схема

Гипотеза: пакеты после модификации отбрасываются, т.к. адрес источника принадлежит локальной машине, а пакет находится в INPUT. Пакет нужно отбросить (NF_DROP), сохранив буфер, и отправить через сокет, а не просто дальше пускать по пути обработки через NF_ACCEPT.

Может, есть способ проще?


UPD: Проверил гипотезу с RAW сокетом, такое решение работает. Но верный ли это способ?


Ответы (0 шт):