Calcul de wildcard pour faire des filtres

Exemple nous recevons les réseaux suivants :

172.16.1.0/24, 172.16.2.0/24, 172.16.3.0/24, 172.16.4.0/24, 172.16.5./24, 172.16.6.0/24.

Nous voulons garder uniquement les réseaux suivants : 172.16.2.0/24 à 172.16.5.0/24.

Nous voyons si l’on transforme en binaire ce qui nous interresse que nous avons 3 bits qui changent (envert). Nous transformons donc les trois bits en 1 et nous obtenons un wildcard de 7.

172.16.1.0/24 =     172.16.00000001.0
172.16.2.0/24 =     172.16.00000010.0
172.16.3.0/24 =     172.16.00000011.0
172.16.4.0/24 =     172.16.00000100.0
172.16.5.0/24 =     140.10.00000101.0
172.16.6.0/24 =     140.10.00000110.0

Wild card     =      0.0.00000111.0     = 0.0.7.0

Le problème étant que nous voulons que de 2 à 5. Il faut donc segmenter.

172.16.1.0/24 =     172.16.00000001.0
172.16.2.0/24 =     172.16.00000010.0
172.16.3.0/24 =     172.16.00000011.0
172.16.4.0/24 =     172.16.00000100.0
172.16.5.0/24 =     140.10.00000101.0
172.16.6.0/24 =     140.10.00000110.0

En gardant seulement les 4 réseaux qui nous interessent, on peut voir que l’on a possibilité de couper en deux.

172.16.2.0/24 =     172.16.00000010.0
172.16.3.0/24 =     172.16.00000011.0

Et,

172.16.4.0/24 =     172.16.00000100.0
172.16.5.0/24 =     140.10.00000101.0

Dans les deux bits en verts qui reste on voit que seul le premier change. Ce qui fait 1 bits à 1 donc 1 en decimal.

En conclusion on peut avoir cette ACL :

ip access-list 10 permit 172.16.2.0 0.0.1.0

ip access-list 20 permit 172.16.4.0 0.0.1.0

 

Plus intéressant maintenant, nous recevons la classe compète 172.16.0.0/24 jusqu’à 172.16.255.0/24. Nous voulons uniquement les réseaux paires : 172.16.0.0, 172.16.2.0, etc…

On fait la même opération que precedement : à Gauche la liste complète de 0 à 32 et à droite en rouge les paires et en noir les impaires.  En gros si l’on observe bien la seule différence entre les deux si l’on prend que les paires le premier bit est toujours à 0 et si on prend les impaires le premier est toujours à 1. Donc on peut faire le wildcard suivant : 1111 1110 => 254.

Liste complète des 32 premières entrées Liste surligné des 32 premières entrées
bin 0000 0000 = dec 0
bin 0000 0001 = dec 1
bin 0000 0010 = dec 2
bin 0000 0011 = dec 3
bin 0000 0100 = dec 4
bin 0000 0101 = dec 5
bin 0000 0110 = dec 6
bin 0000 0111 = dec 7
bin 0000 1000 = dec 8
bin 0000 1001 = dec 9
bin 0000 1010 = dec 10
bin 0000 1011 = dec 11
bin 0000 1100 = dec 12
bin 0000 1101 = dec 13
bin 0000 1110 = dec 14
bin 0000 1111 = dec 15
bin 0001 0000 = dec 16
bin 0001 0001 = dec 17
bin 0001 0010 = dec 18
bin 0001 0011 = dec 19
bin 0001 0100 = dec 20
bin 0001 0101 = dec 21
bin 0001 0110 = dec 22
bin 0001 0111 = dec 23
bin 0001 1000 = dec 24
bin 0001 1001 = dec 25
bin 0001 1010 = dec 26
bin 0001 1011 = dec 27
bin 0001 1100 = dec 28
bin 0001 1101 = dec 29
bin 0001 1110 = dec 30
bin 0001 1111 = dec 31
bin 1111 1110 = dec 32
bin 0000 0000 = dec 0
bin 0000 0001 = dec 1
bin 0000 0010 = dec 2
bin 0000 0011 = dec 3
bin 0000 0100 = dec 4
bin 0000 0101 = dec 5
bin 0000 0110 = dec 6
bin 0000 0111 = dec 7
bin 0000 1000 = dec 8
bin 0000 1001 = dec 9
bin 0000 1010 = dec 10
bin 0000 1011 = dec 11
bin 0000 1100 = dec 12
bin 0000 1101 = dec 13
bin 0000 1110 = dec 14
bin 0000 1111 = dec 15
bin 0001 0000 = dec 16
bin 0001 0001 = dec 17
bin 0001 0010 = dec 18
bin 0001 0011 = dec 19
bin 0001 0100 = dec 20
bin 0001 0101 = dec 21
bin 0001 0110 = dec 22
bin 0001 0111 = dec 23
bin 0001 1000 = dec 24
bin 0001 1001 = dec 25
bin 0001 1010 = dec 26
bin 0001 1011 = dec 27
bin 0001 1100 = dec 28
bin 0001 1101 = dec 29
bin 0001 1110 = dec 30
bin 0001 1111 = dec 31
bin 1111 1110 = dec 32

Donc pour garder les réseaux paires, on part de 172.16.0.0 avec le masque 0.0.254.0 et on vire tous les impaires. Idem pour avoir que les impaires on part de 172.16.1.0 avec le meme masque 0.0.254.0.

Et voila on a ce que l’on veut en 1 ACL.

Dernier exemple un peu plus complexe. Nous allons combiner ce que l’on a vu en acceptant que les paires entre 20 et 30 exclus avec le moins de ligne d’ACL possible.

L’idée est de récupérer ce que l’on a d’abord entre 20 et 30. Si l’on fait le meme exercice on se rend compte que l’on va matcher sur 16, 18 et 30. Il faudra donc supprimer c’est enregistrement un par un.

bin 0001 0000 = dec 16
bin 0001 0010 = dec 18
bin 0001 0100 = dec 20
bin 0001 0110 = dec 22
bin 0001 1000 = dec 24
bin 0001 1010 = dec 26
bin 0001 1100 = dec 28
bin 0001 1110 = dec 30

le premier wildcard est 14 0000 1110. Cela va prendre les paires de 16 à 30. Il suffit après d’interdire les intrus.

#do sh ip access
Standard IP access list 1
    1 deny   172.16.16.0, wildcard bits 0.0.0.255
    2 deny   172.16.18.0, wildcard bits 0.0.0.255
    3 deny   172.16.30.0, wildcard bits 0.0.0.255 
    20 permit 172.16.16.0, wildcard bits 0.0.14.0 
!
#do sh ip bgp
BGP table version is 6, local router ID is 10.0.1.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.20.0/24   10.0.1.1                 0             0 100 i
*> 172.16.22.0/24   10.0.1.1                 0             0 100 i
*> 172.16.24.0/24   10.0.1.1                 0             0 100 i
*> 172.16.26.0/24   10.0.1.1                 0             0 100 i
*> 172.16.28.0/24   10.0.1.1                 0             0 100 i