У меня есть NFQUEUE для пакетов IPv6, подключенных к цепочке PREROUTING таблицы mangle в ip6tables. Получив пакет в пользовательском приложении, я изменил заголовок. Фактически, изменил заголовок с IPv6 на IPv4 и повторно ввел пакет. Но из журналов я вижу, что пакет IPv4 обрабатывается как пакет IPv6.
Поскольку каждый NFQUEUE отображается либо в AF_INET, либо в AF_INET6, возможно ли, чтобы один NFQUEUE обрабатывал как пакеты IPv4, так и IPv6?
Можно ли получить пакет из одной очереди, но ввести в другую очередь? Это не имеет смысла, но я хотел бы вставить пакет в стек IP напрямую с заголовком IP, отформатированным в пространстве пользователя.
Вы можете использовать одну очередь как для IPv4, так и для IPv6, привязав их к обоим.
например
nfq_bind_pf(h, AF_INET)
затем
nfq_bind_pf(h, AF_INET6)
Тогда очередь будет обрабатывать как 4, так и 6, вам все равно нужно сделать так, чтобы ваше приложение распознавало 4/6, чтобы оно могло соответствующим образом анализировать заголовки IP.
Вы можете передать пакет в другую очередь.
Настройка NF_QUEUE
вместе с номером очереди в nfq_set_verdict
. (старшие 16 бит значения вердикта используются, когда младший бит дает вам NF_QUEUE
стоимость).