Я написал модуль netfilter для проверки входящих и исходящих пакетов из ящика Linux для некоторых конкретных шаблонов.В режиме IF_NET POST_ROUTING hook не вызван
nfho1.owner = THIS_MODULE;
nfho1.hook = dhcp_hook_function;
nfho1.hooknum = NF_INET_POST_ROUTING;
nfho1.priority = NF_IP_PRI_FIRST;
if(use_bridge == 1)
{
nfho1.pf = PF_BRIDGE; // on bridge interface
}
else
{
nfho1.pf = PF_INET; // not on bridge interface
}
nfho2.owner = THIS_MODULE;
nfho2.hook = data_hook_function;
nfho2.hooknum = NF_INET_PRE_ROUTING;
nfho2.priority = NF_IP_PRI_FIRST;
if(use_bridge == 1)
{
nfho2.pf = PF_BRIDGE; // on bridge interface
}
else
{
nfho2.pf = PF_INET;
}
nf_register_hook(&nfho1);
nf_register_hook(&nfho2);
Параметр use_bridge определяет, какую семейство протоколов использовать.
Однако, мой вопрос: ИМЕЕТСЯ PF_BRIDGE.
Test Cases: Случай 1: br0 настраивается с помощью brctl
с PF_BRIDGE на post_routing крючки дозвонились. без PF_BRIDGE, клик post_routing не вызывается.
Почему не вызван крюк после маршрутизации. AFAIK маркер маршрутизации почты не может быть обойден.
Корпус 2: br0 не запутан, но ip_forwarding включен.
без PF_BRIDGE вызывается оба крючка. Я не настраиваю PF_BRIDGE для этого тестового примера.
Итак, почему PF_BRIDGE требуется для вызова крюка POST ROUTING.
Дорогой Джоэл C, Я выяснил ответ с некоторым копанием в PF_BRIDGE в сети. Параметр/proc/sys/net/bridge/nf_bridge_call_iptables. – Haswell