Re: [FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-03-21 Par sujet Jérémie Courrèges-Anglas

Histoire de déterrer un vieux thread,

Christophe t...@stuxnet.org writes:

 Bonjour,

 Le 02/02/2014 00:44, Jérémie Courrèges-Anglas a écrit :

[...]

 Pas testé, pas même compilé, use at your own risk :
 
 Index: net/pf.c
 ===
 RCS file: /cvs/src/sys/net/pf.c,v
 retrieving revision 1.696.2.1
 diff -u -p -r1.696.2.1 pf.c
 --- net/pf.c16 Feb 2011 19:13:21 -  1.696.2.1
 +++ net/pf.c1 Feb 2014 23:35:30 -
 @@ -5958,7 +5958,7 @@ pf_test6(int dir, struct ifnet *ifp, str
 pd.sidx = (dir == PF_IN) ? 0 : 1;
 pd.didx = (dir == PF_IN) ? 1 : 0;
 pd.af = AF_INET6;
 -   pd.tos = 0;
 +   pd.tos = (ntohl(h-ip6_flow)  0x0ff0)  20;
 pd.tot_len = ntohs(h-ip6_plen) + sizeof(struct ip6_hdr);
 pd.eh = eh;
 

 En effet, ça y ressemble beaucoup :) .

Après discussions avec Christophe cela corrige en effet son problème.
Modulo le masque utilisé, 0x0fc0, pour ignorer les bits réservés
à l'ECN. En tout cas c'est dans -current et ce sera dispo dans OpenBSD
5.6 :

  http://marc.info/?l=openbsd-cvsm=139447216623408w=2

[...]

Merci à Christophe pour le report, et à Vigdis pour me rappeller de
clôturer le thread. ;)
-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE


---
Liste de diffusion du FRnOG
http://www.frnog.org/


Re: [FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-03-21 Par sujet Christophe
Bonsoir,

Le 21/03/2014 19:24, Jérémie Courrèges-Anglas a écrit :
 
 Histoire de déterrer un vieux thread,
 
 Après discussions avec Christophe cela corrige en effet son problème.
 Modulo le masque utilisé, 0x0fc0, pour ignorer les bits réservés
 à l'ECN. En tout cas c'est dans -current et ce sera dispo dans OpenBSD
 5.6 :
 
   http://marc.info/?l=openbsd-cvsm=139447216623408w=2

Je confirme. Jérémie, t'es un chef !
Dès que la release est disponible, je remplace ma vieille 4.8 par celle
la ;) .

 
 Merci à Christophe pour le report, et à Vigdis pour me rappeller de
 clôturer le thread. ;)
 

Y'a vraiment pas de quoi, je suis content d'avoir pointé ce détail, et
surtout de voir que ça a porté ses fruits ;).

@+
Christophe.


---
Liste de diffusion du FRnOG
http://www.frnog.org/


Re: [FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-02-02 Par sujet Christophe
Bonjour,

Le 02/02/2014 00:44, Jérémie Courrèges-Anglas a écrit :
 
 Pour faire écho à Vigdis, m...@openbsd.org est aussi un bon endroit pour
 de l'aide sur une conf, là c'est un peu plus compliqué et lié à un
 problème d'implémentation donc tech@ me paraît plus approprié.
 

Certes, d’où mon hésitation à poster ici. Dans le cas présent , on est à
la limite entre le réseau et le système, j'ai tenté ma chance.
(adresses des ML notées pour l'avenir).


 Tenté (cas 1), ce qui semblait assez naturel d'un premier abord :
 
 C'est ce qui devrait fonctionner mais qui n'est pas géré.
 

OK, ce n'est donc pas une erreur de conf, mais l'OS qui ne le gère pas.
Me voila rassuré, et voila une nouvelle piste à explorer. Merci pour
l'info.

 
 Pas testé, pas même compilé, use at your own risk :
 
 Index: net/pf.c
 ===
 RCS file: /cvs/src/sys/net/pf.c,v
 retrieving revision 1.696.2.1
 diff -u -p -r1.696.2.1 pf.c
 --- net/pf.c16 Feb 2011 19:13:21 -  1.696.2.1
 +++ net/pf.c1 Feb 2014 23:35:30 -
 @@ -5958,7 +5958,7 @@ pf_test6(int dir, struct ifnet *ifp, str
 pd.sidx = (dir == PF_IN) ? 0 : 1;
 pd.didx = (dir == PF_IN) ? 1 : 0;
 pd.af = AF_INET6;
 -   pd.tos = 0;
 +   pd.tos = (ntohl(h-ip6_flow)  0x0ff0)  20;
 pd.tot_len = ntohs(h-ip6_plen) + sizeof(struct ip6_hdr);
 pd.eh = eh;
 

En effet, ça y ressemble beaucoup :) .

Après parcours, la section associée dans le code de la 5.4 semble ne pas
le gérer non plus :

===
pd-src = (struct pf_addr *)h-ip6_src;
pd-dst = (struct pf_addr *)h-ip6_dst;
pd-virtual_proto = pd-proto;
pd-tot_len = ntohs(h-ip6_plen) + sizeof(struct ip6_hdr);
=  pd-tos = 0;
pd-ttl = h-ip6_hlim;
===

Merci messieurs pour ces pistes qui vont me permettre d'avancer ;) .

A bientôt.
Christophe.


---
Liste de diffusion du FRnOG
http://www.frnog.org/


[FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-02-01 Par sujet Christophe
Bonjour la liste,

Je ne sais pas si c'est tout à fait l'endroit, mais je me lance : Je me
casse les dents sur un petit soucis de config de PF en IPv6.

Le but est de router les paquets sur deux passerelles différentes en
fonction de leur classification : TOS en IPv4 et Traffic class en IPv6.

En IPv4 cela fonctionne parfaitement avec les deux règles suivantes :

pass in quick on $int_if inet proto tcp from $lan_nets to !
localnets_v4 port { 80 , 443 } *tos 0x10* route-to ( $ext1_if $gw_ext1
) keep state

pass in quick on $int_if inet proto tcp from $lan_nets to !
localnets_v4 port { 80 , 443 } *tos 0x00* route-to ( $ext2_if $gw_ext2
) keep state

Par contre, je n'ai pas trouvé le moyen de le faire en IPv6 sur ce même
principe : vu de tcpdump l'entête des paquets contient bien la bonne
valeur (entête class et non tos du coup) mais je ne trouve pas la
bonne syntaxe dans PF pour les prendre en compte (malgré un parcours
intensif du man et des documentations relatives que j'ai pu trouver).

Tenté (cas 1), ce qui semblait assez naturel d'un premier abord :

pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
localnets_v6 port { 80,443 } *tos 0x10* route-to ($ext1_if
$v6_host_gwnet1) keep state

pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
localnets_v6 port { 80,443 } *tos 0x00* route-to ($ext2_if
$v6_host_gwnet2) keep state

Tenté (cas 2), un peu au pif au vu du résultat de tcpdump (qui indiquait
class plutôt que tos) :

pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
localnets_v6 port { 80,443 } *class 0x10* route-to ($ext1_if
$v6_host_gwnet1) keep state

pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
localnets_v6 port { 80,443 } *class 0x00* route-to ($ext2_if
$v6_host_gwnet2) keep state

Aucun des deux cas ne génère d'erreur de syntaxe .

Mais :
Dans le cas 1, seule la deuxième règle matche tous les paquets (quelque
soit la valeur de l'entête class).
Dans le cas 2, aucune des deux règles ne matche, les paquets sont tout
bonnement jetés par la règle par défaut.

A préciser qu'il s'agit de la version 4.8 d'OpenBSD.

Auriez vous une idée ?

@+
Christophe.


---
Liste de diffusion du FRnOG
http://www.frnog.org/


Re: [FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-02-01 Par sujet Vigdis
On Sat, 01 Feb 2014 20:45:23 +0100,
Christophe t...@stuxnet.org wrote:

 Bonjour la liste,
 
 Je ne sais pas si c'est tout à fait l'endroit

Si j'étais toi, je tenterais plus ma chance sur m...@openbsd.org (en
anglais, bien sûr).

[snip]
 
 A préciser qu'il s'agit de la version 4.8 d'OpenBSD.

Et tu peux sans doute commencer par upgrader, parce que si ça ne
résoud pas le problème (même si c'est probable), les devs vont te
passer un patch à appliquer au mieux sur 5.4 ou alors sur -current. 

 Auriez vous une idée ?
 
 @+
 Christophe.
 
 
 ---
 Liste de diffusion du FRnOG
 http://www.frnog.org/


-- 
Vigdis

signature.asc
Description: PGP signature


Re: [FRnOG] [TECH] PF d'OpenBSD peut il matcher sur le Traffic class en IPv6 ?

2014-02-01 Par sujet Jérémie Courrèges-Anglas

tl;dr : non, mais ça devrait être possible facilement.

Christophe t...@stuxnet.org writes:

 Bonjour la liste,

 Je ne sais pas si c'est tout à fait l'endroit, mais je me lance : Je me
 casse les dents sur un petit soucis de config de PF en IPv6.

Pour faire écho à Vigdis, m...@openbsd.org est aussi un bon endroit pour
de l'aide sur une conf, là c'est un peu plus compliqué et lié à un
problème d'implémentation donc tech@ me paraît plus approprié.

 Le but est de router les paquets sur deux passerelles différentes en
 fonction de leur classification : TOS en IPv4 et Traffic class en IPv6.

 En IPv4 cela fonctionne parfaitement avec les deux règles suivantes :

 pass in quick on $int_if inet proto tcp from $lan_nets to !
 localnets_v4 port { 80 , 443 } *tos 0x10* route-to ( $ext1_if $gw_ext1
 ) keep state

 pass in quick on $int_if inet proto tcp from $lan_nets to !
 localnets_v4 port { 80 , 443 } *tos 0x00* route-to ( $ext2_if $gw_ext2
 ) keep state

 Par contre, je n'ai pas trouvé le moyen de le faire en IPv6 sur ce même
 principe : vu de tcpdump l'entête des paquets contient bien la bonne
 valeur (entête class et non tos du coup) mais je ne trouve pas la
 bonne syntaxe dans PF pour les prendre en compte (malgré un parcours
 intensif du man et des documentations relatives que j'ai pu trouver).

 Tenté (cas 1), ce qui semblait assez naturel d'un premier abord :

C'est ce qui devrait fonctionner mais qui n'est pas géré.

 pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
 localnets_v6 port { 80,443 } *tos 0x10* route-to ($ext1_if
 $v6_host_gwnet1) keep state

 pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
 localnets_v6 port { 80,443 } *tos 0x00* route-to ($ext2_if
 $v6_host_gwnet2) keep state

 Tenté (cas 2), un peu au pif au vu du résultat de tcpdump (qui indiquait
 class plutôt que tos) :

Je sais pas ce que fait / faisait class, mais je doute que ce soit ce
qui t'intéresse.

 pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
 localnets_v6 port { 80,443 } *class 0x10* route-to ($ext1_if
 $v6_host_gwnet1) keep state

 pass in quick on $int_if inet6 proto tcp from $v6_lan_nets to !
 localnets_v6 port { 80,443 } *class 0x00* route-to ($ext2_if
 $v6_host_gwnet2) keep state

 Aucun des deux cas ne génère d'erreur de syntaxe .

 Mais :
 Dans le cas 1, seule la deuxième règle matche tous les paquets (quelque
 soit la valeur de l'entête class).

PF teste si l'admin a spécifié un tos (différent de zéro) avant de
comparer celui-ci avec le tos du paquet. Donc tos 0x0 est un nop que
tu peux supprimer de ton jeu de règles.

Je pense que tu vas vite voir pourquoi la première règle ne matche pas.

 Dans le cas 2, aucune des deux règles ne matche, les paquets sont tout
 bonnement jetés par la règle par défaut.

cf. plus haut.

 A préciser qu'il s'agit de la version 4.8 d'OpenBSD.

Pas bien !

 Auriez vous une idée ?

Pas testé, pas même compilé, use at your own risk :

Index: net/pf.c
===
RCS file: /cvs/src/sys/net/pf.c,v
retrieving revision 1.696.2.1
diff -u -p -r1.696.2.1 pf.c
--- net/pf.c16 Feb 2011 19:13:21 -  1.696.2.1
+++ net/pf.c1 Feb 2014 23:35:30 -
@@ -5958,7 +5958,7 @@ pf_test6(int dir, struct ifnet *ifp, str
pd.sidx = (dir == PF_IN) ? 0 : 1;
pd.didx = (dir == PF_IN) ? 1 : 0;
pd.af = AF_INET6;
-   pd.tos = 0;
+   pd.tos = (ntohl(h-ip6_flow)  0x0ff0)  20;
pd.tot_len = ntohs(h-ip6_plen) + sizeof(struct ip6_hdr);
pd.eh = eh;

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE
(auparavant 0x06A11494 / 61DB D9A0 00A4 67CF 2A90  8961 6191 8FBF 06A1 1494)


---
Liste de diffusion du FRnOG
http://www.frnog.org/