J'ai un joli shaper, avec un filtrage haché, construit sur un pont Linux. En bref, les br0
connexions external
et internal
les interfaces physiques, les paquets balisés VLAN sont pontés "de manière transparente" (je veux dire, aucune interface VLAN n'est là).
Maintenant, différents noyaux le font différemment. Je peux me tromper avec les plages de versions exactes du noyau, veuillez me pardonner. Merci.
2.6.26
Donc, dans Debian, 2.6.26 et plus (jusqu'à 2.6.32, je crois) --- cela fonctionne:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Ici, "kernel" correspond à deux octets dans le champ "protocol" avec 0x8100, mais compte le début du paquet ip comme une "position zéro" (désolé pour mon anglais, si je ne suis pas clair).
2.6.32
Encore une fois, dans debian (je n'ai pas construit de noyau vanilla), 2.6.32-5 --- cela fonctionne:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
Ici, "noyau" correspond à la même chose pour le protocole, mais compte l'offset depuis le début de l'en-tête de ce protocole --- Je dois ajouter 4 octets pour l'offset (20, pas 16 pour l'adresse dst). C'est bon, ça me semble plus logique, pour moi.
3.2.11, la dernière écurie maintenant
Cela fonctionne --- comme s'il n'y avait pas de balise 802.1q du tout:
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Le problème est que je n'ai pas trouvé de moyen de faire correspondre la balise 802.1q jusqu'à présent.
Balise 802.1q correspondante dans le passé
Je pourrais le faire avant comme suit:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Maintenant , je suis incapable de faire correspondre 802.1Q tag avec at 0
, at -2
, at -4
, at -6
ou comme ça. Le principal problème que j'ai zéro compte de coups --- ce filtre n'est pas vérifié du tout, "mauvais protocole", en d'autres termes.
S'il vous plaît, n'importe qui, aidez-moi :-)
Merci!
protocol all
me donneRTNETLINK answers: Invalid argument
(noyau 3.3.4 ici). Je vais tester cela avec des noyaux plus récents. Je vous remercie.Je devais faire exactement ça. J'ai trouvé que la réponse suggérée par @Thusitha était la bonne façon de le faire pour les nouveaux noyaux.
Testé avec le noyau Debian Wheezy 3.2.0-4 et iproute (d'où vient la commande tc) version 20120521-3 + b3
Voici le script complet, les
tc filter
lignes étant presque exactement celles spécifiées par @Thusithala source
protocol all
m'a donné une erreur dans le noyau vanille. Je devrais vérifier plus. Je vous remercie.Je recommanderais d'utiliser Wireshark pour capturer ce qui passe par l'interface comme visible dans l'espace utilisateur et l'utiliser pour écrire le filtre. Je me demande si l'interface supprime peut-être les balises VLAN pour une raison quelconque (bien qu'elle soit configurée pour un pont transparent). Peut-être que cela ajoute des balises supplémentaires ou quelque chose?
la source
tcpdump
affiche les ID vlan sur toutes les interfacesbridge
et tous les ports informatiques.Vous pouvez marquer des paquets vlan avec ebtables .
Ensuite, appliquez une mise en forme basée sur les marquages. ebtables et iptables partagent le même marquage.
Je ne l'ai pas encore fait moi-même. Donc c'est plutôt une intuition.
la source
Essayez de désactiver l'
reorder_hdr
option sur l'interface vlan. Si l'option de réorganisation de l'en-tête est activée, les balises des cadres sont supprimées. Vérifiez-le par commandeip -d link list dev vlan_iface
.la source
tc
filtres sont appelés? Avez-vous un lien vers une carte ou comme ça? Merci!