2015-09-10 6 views
2

Я написал модуль 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.

ответ

2

я понял, почему это происходит так обмен:

По умолчанию в Linux в Iptables будет иметь дело с пакетом в IP-уровне, а Ebtables дела с уровнем 2 пакетами.

However there is a configuration parameter to be set in: 
/proc/sys/net/bridge/bridge-nf-call-iptables. 

Если ** установлен в 1, то даже пакеты мостоукладчика, кажется, вызывая IPtables крюки.

Я проверил это в своей настройке и включил!

0

Вы вообще не изменяете пакет? Есть несколько случаев, когда команда br_nf_post_routing не передает загрузку POST_ROUTING в стек IP. Похоже, что один такой случай, когда крючки сетевого сетевого фильтра сделали с ним что-то (http://lxr.free-electrons.com/source/net/bridge/br_netfilter_hooks.c#L808)

Надеюсь, это поможет. В настоящее время я пытаюсь понять связь Netfilter. Удачи!

+0

Дорогой Джоэл C, Я выяснил ответ с некоторым копанием в PF_BRIDGE в сети. Параметр/proc/sys/net/bridge/nf_bridge_call_iptables. – Haswell

 Смежные вопросы

  • Нет связанных вопросов^_^