Назад | Перейти на главную страницу

Ввести пакет в другой NFQUEUE

У меня есть NFQUEUE для пакетов IPv6, подключенных к цепочке PREROUTING таблицы mangle в ip6tables. Получив пакет в пользовательском приложении, я изменил заголовок. Фактически, изменил заголовок с IPv6 на IPv4 и повторно ввел пакет. Но из журналов я вижу, что пакет IPv4 обрабатывается как пакет IPv6.

  1. Поскольку каждый NFQUEUE отображается либо в AF_INET, либо в AF_INET6, возможно ли, чтобы один NFQUEUE обрабатывал как пакеты IPv4, так и IPv6?

  2. Можно ли получить пакет из одной очереди, но ввести в другую очередь? Это не имеет смысла, но я хотел бы вставить пакет в стек IP напрямую с заголовком IP, отформатированным в пространстве пользователя.

    • Не рекомендуется использовать сырые сокеты с IPv6 согласно RFC 3542.
    • Я не могу использовать устройство TUN из-за проблем с производительностью. Устройства TUN сбрасывают множество пакетов.
  1. Вы можете использовать одну очередь как для IPv4, так и для IPv6, привязав их к обоим.

    например

    nfq_bind_pf(h, AF_INET)
    

    затем

    nfq_bind_pf(h, AF_INET6)
    

    Тогда очередь будет обрабатывать как 4, так и 6, вам все равно нужно сделать так, чтобы ваше приложение распознавало 4/6, чтобы оно могло соответствующим образом анализировать заголовки IP.

  2. Вы можете передать пакет в другую очередь.

    Настройка NF_QUEUE вместе с номером очереди в nfq_set_verdict. (старшие 16 бит значения вердикта используются, когда младший бит дает вам NF_QUEUE стоимость).