2016-11-11 3 views
0

Ich habe ein Linux-Kernel-Modul, das ich auf einem Router ausführen: Netgear DGN2200v2 mit Linux 2.6.30).Netfilter Hook auf Router wird nicht für Bridged-Schnittstellen aufgerufen

Kernelmodul registriert eine netfilter Haken in etwa so:

static struct nf_hook_ops nfho; 

// ... 

nfho.hook = hook_func; 
nfho.owner = THIS_MODULE; 
nfho.hooknum = 0; /* NF_IP_PRE_ROUTING */ 
nfho.pf = 0x20000000; // PF_INET 
nfho.priority = INT_MIN; 

int rc = nf_register_hook(&nfho); 

Ich habe zwei meiner Router verbundenen Maschinen, eine über WiFi und ein ein Ethernet-Kabel. Der Router selbst ist nicht mit dem Internet verbunden (d. H. Alle Tests finden in einem isolierten Netzwerk statt).

Mein Problem ist, dass nach der printk s in meiner Hook-Funktion, der Haken nur für Pakete, die direkt an den Router gesendet werden (dh wenn ich den Router von meinem Rechner anpinge) oder direkt vom Router abgerufen wird (dh wenn ich mit dem Router telnet und meine Maschine anpinge).

Allerdings ist der Haken nicht wird aufgerufen, wenn die beiden Maschinen gegenseitig pingen, obwohl dieser Verkehr offensichtlich noch durch den Router fließt.

Nach http://www.tldp.org/HOWTO/html_single/Ethernet-Bridge-netfilter-HOWTO und http://www.linux-kongress.org/2002/papers/lk2002-spenneberg.pdf, wenn ich eine Brücke in meinem Router einrichten, sollte netfilter (oder iptables) in der Lage sein, Pakete zu filtern, die es durchlaufen. Betrachtet man die Ausgabe von brctl auf dem Router (ich kann es bei Bedarf anschließen), scheint es, dass eine solche Brücke bereits eingerichtet ist, aber mein Hook sieht diese Pakete nicht.

Gibt es eine Möglichkeit, Netfilter Hooks auch für solche Pakete aufgerufen zu bekommen?

Antwort

0

Verwenden Sie die folgenden Einstellungen in Ihrem nf_hook_ops und stellen Sie sicher, dass CONFIG_BRIDGE_NETFILTER in Ihrem Kernel-Build aktiviert ist.

.pf  = PF_BRIDGE, 
.hooknum = NF_BR_PRE_ROUTING, 
.priority = NF_BR_PRI_FIRST, 
Verwandte Themen