3 votes

IPTables Match pour le hachage des adresses IP

Donc j'essaie de faire à peu près ceci

http://wiki.mikrotik.com/wiki/PCC

sur Linux.

Pour expliquer un peu plus loin : PCC prend simplement, disons, l'adresse source du paquet, la hachure, divise la hachure par un certain nombre, et si le reste est égal à un autre nombre, il y a une correspondance de règle.

En fait, je l'utilise pour diviser mon réseau de façon aléatoire en plusieurs groupes de taille presque égale. Plus précisément, six de ces groupes ressembleraient à ceci :

Group 1: pcc_hash(source IP) % 6 = 0
Group 2: pcc_hash(source IP) % 6 = 1
... etc

Les groupes reçoivent alors une sorte de ressource commune à partager (par exemple, une bande passante ou une adresse IP publique) qu'ils n'aiment pas changer très souvent (surtout avec une adresse IP publique).

Ma question est de savoir s'il existe une bonne méthode pour diviser le réseau en un nombre quelconque de sous-réseaux égaux de manière stochastique en utilisant des règles iptables similaires, de préférence faciles.

J'ai réussi à diviser le réseau en puissances de deux en utilisant u32 (2^n réseaux juste en faisant correspondre les n derniers bits de l'adresse IP source). Mais un peu d'aléatoire serait bien aussi, et avoir un réseau divisé en tiers exact est impossible à faire avec ça. De plus, les mikrotiks sont essentiellement basés sur linux, donc il n'est pas possible de les utiliser. a Il doit y avoir un moyen de le faire :D

Quelqu'un ici connaît-il une bonne méthode, ou au moins une bonne documentation sur les u32 qui rendrait cela possible ?

Merci d'avance

-mk

0voto

cyphun Points 53

De plus, les mikrotiks sont essentiellement basés sur linux, il doit donc y avoir un moyen de le faire :D

Eh bien, alors Mikrotik™ doit passer sous GPL ou être poursuivi pour ne pas l'avoir fait pendant ce temps. vente de un produit basé sur un logiciel sous licence GPL. S'ils sont déjà sous licence GPL, vous pouvez consulter le code source. S'ils ne le sont pas, aidez-les. ;-)


Je doute qu'un tel module soit disponible pour Netfilter, mais je pense qu'il ne serait pas trop difficile de l'écrire en utilisant un module similaire comme exemple.

Il est impossible d'avoir un réseau divisé en trois tiers exacts avec ce système.

Qu'est-ce qui vous fait dire ça ? Supposons que vous masquez avec 0xF [0..15] ; qu'est-ce qui vous empêche de le diviser en plages [0..5], [6..11], [12..15] ? Oui, pas de façon précise mais assez proche de 1/3. Plus l'intervalle utilisé est large, plus la division est proche.

0voto

Priyan R Points 687

Au lieu d'utiliser le module u32 de netfilter, qui, comme vous l'avez constaté, n'est pas documenté, vous pouvez utiliser la fonction nfnetlink_queue sous-système de netfilter. L'idée est que vous envoyez des paquets par le biais d'un processus en espace utilisateur (probablement un démon) qui examine les paquets, les marque comme il le souhaite, puis les renvoie à netfilter pour un traitement ultérieur.

La mécanique de ce système est relativement simple. Le site iptables QUEUE y NFQUEUE placent les paquets sélectionnés dans une file d'attente, et un processus de l'espace utilisateur prend les paquets à partir de cette file via la fonction nfnetlink_queue API ( documentation ici ). Lorsque chaque paquet revient à netfilter depuis l'espace utilisateur, le MARK défini par le processus peut être utilisé pour diriger les paquets vers un traitement ultérieur (par, disons, iptables o tc ).

Caveat : Je n'ai jamais implémenté une solution utilisant le module de file d'attente de netlink, donc je n'ai aucune expérience de première main concernant sa robustesse potentielle, la sécurité, ou la performance. Il est évident qu'un démon en espace utilisateur à travers lequel les paquets réseau circulent devrait être développé avec beaucoup de soin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X