Источник nat в хуках предварительной маршрутизации netfilter

Мы разрабатываем наш собственный модуль ядра, который выполняет расширенный исходный nat в обработчике предварительной маршрутизации netfilter. После обновления с ядра Linux 2.6.32 (Ubuntu 10.04) до 2.6.35 (Ubuntu 10.04 lucid-back-ports) кажется, что пакеты SNAT просто удаляются внутри ядра Linux.

Я знаю, что SNAT никогда не рекомендовалось использовать в хуках предварительной маршрутизации для общего использования (Список рассылки Netfilter), но все же есть некоторые причины, по которым мы предпочли бы выполнить анализ источника до того, как будет принято фактическое решение о маршрутизации.

Есть ли у кого-нибудь опыт разработки модулей ядра, выполняющих SNAT в обработчике предварительной маршрутизации netfilter для ядра Linux версии 2.6.35+? Что именно нужно изменить в коде linux-kernel/netfilter-kernel-module, чтобы SNAT-пакеты не отбрасывались? Может быть, SNAT в предварительной маршрутизации — это просто плохая идея для ядра Linux версии 2.6.35+, и нам лучше использовать nf_marks для решения о маршрутизации, а SNAT — в постмаршрутизации?

Я использую Ubunut 10.04 с портированным ядром Linux (2.6.35) на X86_64.


person user389238    schedule 14.04.2011    source источник


Ответы (2)


Начните с поиска точной строки, которая отбрасывает пакет.

person adobriyan    schedule 15.04.2011
comment
Есть ли у вас опыт использования SNAT для предварительной маршрутизации? Возможно, есть более простые решения, чем смотреть исходный код и исправлять это самостоятельно (например, может быть, где-то уже есть патч для этого; или, может быть, это можно сделать с файловой системой /sys). Кодовая база Linux очень большая, и я знаю, что не смогу проанализировать все возможные регрессии всего за неделю после исправления этого самостоятельно. Это также причина, по которой я обратился за помощью к эксперту, который, возможно, уже решал подобную проблему раньше. В любом случае спасибо за совет :) - person user389238; 15.04.2011
comment
Она большая, но произвольная строка не может заставить пакет исчезнуть. Вы ищете не менее kfree_skb() звонков. Дело в том, что вы не знаете, что происходит, и ваша внедеревянность модуля не помогает. - person adobriyan; 16.04.2011

Вы пересчитали все контрольные суммы после обновления исходного IP? Имейте в виду, что вам также потребуется обновить контрольные суммы TCP/UDP, поскольку они основаны на IP-адресе src/dst.

person Joel C    schedule 30.09.2015