NetAddict

22Fév/150

Analyse de trafic dans un tunnel UDP

Si vous avez capturer, avec tcpdump par exemple, du trafic encapsulé dans un tunnel UDP, il n'est pas évident de l'exploiter tel quel avec des outils comme Wireshark.

Une première méthode consiste à retravailler le fichier pcap pour enlever les entêtes de votre tunnel avec la commande

editcap -C 42 -F pcap tunnel-udp.pcap trafic.pcap

En partant du postulant qu'il s'agit d'un tunnel UDP over IPv4 over Ethernet. S'il s'agit d'un tunnel sur IPv6, il faudra utiliser :

editcap -C 62 -F pcap tunnel-udp.pcap trafic.pcap

Le fichier trafic.pcap ne contient alors plus que le contenu du tunnel et peut être ouvert avec Wireshark comme s'il s'agissait d'une capture faite dans le tunnel.

Une autre solution est d'utiliser les outils intégrés à Wireshark en ouvrant le fichier pcap original puis en allant dans "Analyse" puis "Decode As". Il vous est alors possible de spécifier pour une conversation UDP donnée le protocole qui suit l'entête UDP, vous devez alors spécifier le type de trafic contenu dans votre tunnel. Cependant, avec cette méthode, vous verrez toujours apparaître les entêtes de votre tunnel lors de l'analyse des différentes trames.

Remplis sous: GNS3, Tips, Unix Aucun commentaire
2Fév/135

Champ 802.1P/CoS sous linux

Nous allons voir comment marquer le champ CoS (ou 802.1P) sous linux sur une sous-interface tagguée.

C'est la commande "vconfig" qui permet de gérer l'ensemble des paramètres des tags vlan dont le champ 802.1P. Grâce à elle, on peut établir une "egress_map" qui fera le lien entre une priorité du paquet interne au kernel (skb priority) et le tag CoS à appliquer.

Par exemple pour l'interface eth0.2 :

root@server:~# vconfig set_egress_map eth0.2 1 1
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 2 2
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 3 3
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 4 4
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 5 5
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 6 6
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

root@server:~# vconfig set_egress_map eth0.2 7 7
Set egress mapping on device -:eth0.2:- Should be visible in /proc/net/vlan/eth0.2

Ainsi, les paquets de priorité 1 seront marqués du tag CoS 1, et ainsi de suite. On peut consulter les règles appliquées dans le fichier /proc/net/vlan/MonInterface :

root@server:~# more /proc/net/vlan/eth0.2
eth0.2  VID: 2     REORDER_HDR: 1  dev->priv_flags: 1
total frames received         4172
total bytes received       794663
Broadcast/Multicast Rcvd            0

total frames transmitted         3701
total bytes transmitted       827459
Device: eth0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
EGRESS priority mappings: 1:1 2:2 3:3 4:4 5:5 6:6 7:7

Pour définir la priorité du paquet (skb priority), on peut utiliser la cible CLASSIFY d'iptables. Cette cible ne s'utilise que dans la chaîne POSTROUTING de la table mangle.

En prenant l'exemple précédant, pour faire tagguer en CoS 5, les paquets avec DSCP EF :

iptables -t mangle -I POSTROUTING -o eth0.2 -m dscp --dscp-class EF -j CLASSIFY --set-class 0:5

 

 

 

Remplis sous: Linux, Tips 5 Commentaires
22Jan/132

Serveur DHCPv6 sous linux

En IPv6, il y a plusieurs méthodes d'autoconfigurations des postes sur un réseau.

  • Stateless : c'est le routeur qui annoncent la plage d'IP à utiliser. Les hôtes prennent ensuite une IP dérivée de leur mac et une IP aléatoire dans cette plage.
  • Statefull ou DHCPv6 : cette méthode est proche du DHCPv4 et offre un plus grand contrôle sur les IP utilisées et permet d'annoncer plus de paramètres aux hôtes du réseau.

Principe de fonctionnement du DHCPv6

Le fonctionnement du DHCPv6 est légèrement différent qu'en IPv4.

Les RA sont toujours annoncés par le routeur et utilisés par les hôtes. Ce sont ces RA et uniquement eux qui indiquent aux hôtes la passerelle par défaut à utiliser. De plus ils indiquent aux hôtes qu'ils doivent utiliser un serveur DHCPv6 et non les RA pour les autres paramètres. Cela permet donc d'utiliser l'autoconfiguration stateless ou statefull de manière transparente  vis à vis des utilisateurs.

Le DHCPv6 annonce l'IP à utiliser ainsi que des paramètres comme le DNS.

Les messages DHCPv6 sont encapsulés dans de l'UDP et utilisent les port 546 (client) et 547 (serveur). Le client utilise l'adresse multicast FF02::1:2.

L'échange DORA (Discover, Offer, Request, Ack) du DHCPv4 est remplacé par SARR qui fonctionne de manière similaire :

  • Solicit envoyé en multicast par le client.
  • Advertise envoyé en unicast par les serveurs DHCPv6.
  • Request envoyé en multicast par le client aux serveurs.
  • Reply envoyé en unicast.

Une différence notable concerne l'identification des hôtes. En IPv4 on utilise l'adresse MAC de la carte Ethernet de l'hôte. En DHCPv6 c'est désormais le DUID codé sur 96 à 160 bits indépendant de la carte réseau.

On trouvera, par exemple, le DUID d'un PC windows grâce à la commande :

ipconfig /all

[...]

DUID de client DHPv6 . . . . . . . . : 00-00-00-00-00-00-00-00-00-00-00-00-00-00

[...]

Pour plus d'informations, on peut consulter la RFC associée.

Installation et configuration sur Debian

Sous Linux, on peut utiliser le wide-dhcpv6 comme en tant que client ou serveur. Nous avons également toujours besoin de radvd pour les RA :

Sous Debian, plusieurs packages existent pour wide-dhpc6, ici c'est la version serveur qui nous intéresse :

root@router:~# apt-cache search wide-dhcpv6

p wide-dhcpv6-client       - DHCPv6 client for automatic IPv6 hosts configuration
p wide-dhcpv6-relay        - DHCPv6 relay for automatic IPv6 hosts configuration
p wide-dhcpv6-server      - DHCPv6 server for automatic IPv6 hosts configuration

root@router:~# apt-get install wide-dhcpv6-server radvd

Configuration de radvd

Après avoir installé radvd, il faut créer le fichier de configurations /etc/radvd.conf

root@router:~# cat /etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
AdvLinkMTU 1480; //1480 pour lien FREE, 1492 lien ADSL en IPv6 natif.
AdvManagedFlag on; // Indique d'utiliser l'autoconf statefull pour l'IP
AdvOtherConfigFlag on; // Indique d'utiliser l'autoconf statefull pour les autres paramètres.

prefix 2001:db8::/64
{
AdvOnLink on;
AdvAutonomous off; //Ne pas utiliser ce prefix pour autoconfiguration stateless
AdvRouterAddr off;
};
};

Plus d'informations dans le man :

root@router:~# man  radvd.conf

Configuration de wide-dhcpv6-server

Le fichier de configuration se trouve dans /etc/wide-dhcpv6/

root@router:~# cd /etc/wide-dhcpv6/
root@router:/etc/wide-dhcpv6# more dhcp6s.conf

option domain-name-servers 2001:db8::35;

interface eth0 {
address-pool pool1 3600;
};

pool pool1 {
range 2001:db8::1000 to 2001:db8::100f;
};

Ici, j'ai associé un pool de 16 IP (de 2001:db8::1000 à 2001:db8::100f) à mon interface d'eth0.

On trouvera de plus amples informations sur la syntaxe du fichier de configurations et les options disponibles dans le man :

root@router:/etc/wide-dhcpv6# man  dhcp6s.conf

 Conclusion

On redémarre les services :

root@router:~# /etc/init.d/wide-dhcpv6-server restart
Stopping WIDE DHCPv6 server on eth0: dhcp6s.
Starting WIDE DHCPv6 server on eth0: dhcp6s.
root@router:~# /etc/init.d/radvd restart
Stopping radvd: radvd.
Starting radvd: radvd.
root@router:~#

Puis on peut tester avec un PC.

Remplis sous: IPv6, Linux 2 Commentaires
14Sep/120

Fin de l’IPv4 au RIPE

1 an et demi après l'épuisement des IPv4 au IANA, le RIPE a annoncé aujourd'hui avoir commencé à allouer son dernier /8 (le 185.0.0.0/8).

Désormais, les opérateurs dépendant du RIPE ne pourront plus prétendre qu'à une seule et unique allocation en /22 (1024 IP) sous condition d'avoir déjà reçu une allocation d'IPv6. D'autre part, les entreprises ne pourront plus demander de blocs PI (Provider Independent). L'abandon de cette seconde règle est en cours de discussion au sein du RIPE mais très incertaine.

29Mar/120

Désactiver l’autoconfiguration stateless sur Debian 6.0

Bonjour à tous,

L'autoconfiguration stateless (SLAAC) est l'une des grandes nouveautés de l'IPv6. Elle permet à chaque équipement présent sur le réseau de prendre une adresse IPv6 automatiquement à partir des informations données par le routeur dans les messages RA (Router Advertisements).

Sous Debian 6, même lorsque vous configurez une IPv6 statique, le système va tout de même récupérer une adresse automatique en plus de l'adresse statique. Dans le cas d'un serveur cela peut-être problématique. Par exemple dans le cas de serveurs DNS. Si le master utilise l'adresse automatique pour envoyer des "notify" au slave, celui-ci pourrait le refuser car ce n'est pas l'adresse attendue.

Pour désactiver l'adressage automatique sur toutes les interfaces, utilisez la commande suivante :

sysctl -w net.ipv6.conf.all.accept_ra=0 #Pour désactiver entièrement l'interprétation des RA

Ou

sysctl -w net.ipv6.conf.all.autoconf=0 #Pour désactiver uniquement l'autoconf IPv6 mais quand même utiliser les RA pour la route par défaut

Pour le faire pour une interface en particulier, par exemple eth0 :

sysctl -w net.ipv6.conf.eth0.accept_ra=0

Ou

sysctl -w net.ipv6.conf.eth0.autoconf=0

Pour rendre persistante cette modification au prochain démarrage, penser à rajouter vos options net.ipv6.conf.* dans systcl.conf.

Notes importantes :

  • Même si la modification est effective immédiatement, vous garderez l'IPv6 automatique jusqu'à son expiration, en effet cette astuce ne fait qu'indiquer à l'OS de ne plus interpréter les RA.
  • Vous devez rentrer la gateway en statique en plus de l'IPv6 si ce n'est pas déjà fait.
  • Ce tip sert quand vous n'avez pas la main sur le routeur. L'idéal étant plutôt de baisser le flag Autonomous dans les RA pour une DMZ serveur.
Remplis sous: IPv6, Linux, Tips Aucun commentaire
11Août/110

Taille de la table de routage IPv6 sous Linux

Dans le cadre de mon étude du protocole de routage BGP et de la préparation de la certification BGP chez Cisco, j'ai pu monter une maquette BGP tournant sous linux avec Quagga qui peer avec un routeur Internet de mon employeur, me permettant ainsi de récupérer les tables de routages IPv4 & IPv6 de l'Internet.

J'ai cependant remarqué que toutes les routes BGP n'étaient pas installées dans la table de routage du noyau Linux alors que je n'ai pas de filtre et n'ayant qu'un seul upstream, toutes les routes reçus sont forcément "best" :

bgp-dilly# sh ipv6 route summary
Route Source Routes FIB
kernel 1 1
connected 5 5
static 1 0
ebgp 6808 4077
ibgp 0 0
------
Totals 6815 4083

En enlevant la route par défaut du serveur Linux, on se rend vite compte que des destinations sont injoignables.

En cherchant un peu on tombe sur le paramètre "max_size" dans les paramètres de routage IPv6 du noyau :

root@bgp:~# cat /proc/sys/net/ipv6/route/max_size
4096

Ainsi, la valeur par défaut sur ma Debian 6 est bien inférieurs aux 6800 routes IPv6 de l'Internet. Il ne reste plus qu'à modifier sysctl.conf :

root@bgp:~# cat /etc/sysctl.conf
[...]
net.ipv6.route.max_size = 10240
[...]

On redémarre et là, oh magie, toutes mes routes s'installent !

bgp-dilly# sh ipv6 route summary
Route Source Routes FIB
kernel 1 1
connected 5 5
static 1 0
ebgp 6819 6819
ibgp 0 0
------
Totals 6826 6825

Remplis sous: IPv6, Linux, Tips Aucun commentaire
3Fév/110

Le pool IPv4 du IANA expuise

Aujourd'hui, jeudi 3 février 2011, est à marquer d'une pierre blanche dans les annales d'Internet ! En effet, nous venons de franchir une nouvelle étape vers l'épuisement de l'IPv4 et ce plus tôt que les prévisions les plus pessimistes !

En effet, suite à l'affectation de deux /8 à l'APNIC mardi dernier, et en accord avec la politique d'allocation des dernières IPv4, les cinq /8 restant ont été alloués aux cinq RIR au cours d'une cérémonie à Miami.

Cette nouvelle étape rappelle l'urgence pour les acteurs d'Internet, autant les fournisseurs d'accès, les fournisseurs de contenu mais également les administrateur réséaux, systèmes et les développeur d'adopter l'IPv6 comme protocole par défaut de communication.

Et la suite ? Le RIPE NCC rappelle qu'il comptabilise aujourd'hui environs quatre /8 sans compter le bloc qui lui a été alloué aujourd'hui et qu'il continuera à affecter des IP aux LIR jusqu'à la fin de ces quatre blocs. Lorsque ces IP ont été épuisées, le dernier /8 (celui reçu aujourd'hui) sera partagé entre tous les LIR sous sa juridiction ayant déjà demandé une allocation d'Ipv6 sous la forme d'un /22 (1024 adresses). Les premières rumeurs annoncent cette étape pour fin 2011 début 2012.

Remplis sous: News Aucun commentaire
2Fév/110

Activer l’IPv6 dans Postfix

Je suppose que la plupart d'entre vous connaissent Postfix le célèbre serveur SMTP pour Unix. Depuis sa version 2.2, il supporte nativement l'IPv6 mais cette fonctionnalité est activée par défaut.

Pour l'activer, il faut ajouter au fichier main.cf la ligne suivante :

inet_protocols = ipv4, ipv6

Ensuite on redémarre le serveur. Par exemple sous debian et dérivé :

linux:~# /etc/init.d/postfix restart

Et voilà le résultat :

  • Avant :

linux:~# netstat -atn | grep 25

tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
  • Aprés :
linux:~# netstat -atn | grep 25
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN     
tcp6       0      0 :::25                   :::*                    LISTEN

N'oubliez pas, au niveau des DNS, d'ajouter des champs AAAA à vos pointeurs MX et d'ouvrir le port 25 sur votre firewall IPv6. Par exemple sous linux avec ip6tables (interface cli de netfilter) :

linux:~# ip6tables -I INPUT -p tcp --dport 25 -j ACCEPT
Remplis sous: IPv6, Linux, Tips, Unix Aucun commentaire
29Jan/110

Adresse IPv6 temporaire sous Linux et Mac OS X

Comme vous le savez peut-être déjà, lorsque vous utilisez l'IPv6 sous Windows avec une adresse autoconfigurée, votre système, va générer une deuxième adresse que l'adresse EUI-64 : une adresse temporaire. C'est cette adresse que vous allez utiliser pour naviguer sur Internet.

Comme son nom l'indique, cette adresse va changer de manière régulière vous permettant ainsi de vous cacher dans l'énorme plage d'IP que constitue votre sous-réseau LAN (/64 = 2^64 = 1.84467441 × 10^19 adresses disponibles). De la sorte, si un pirate récupère votre IP au moment où vous visitez son site web, il y a beaucoup de chance que qu'elle ait changé lorsque celui cherchera à vous attaquer. Et pour vous retrouver parmi les 1.84467441 × 10^19 adresses de votre réseau... Bon courage !

Cette technique est loin d'être ce que l'on fait de mieux en matière de sécurité mais c'est tout de même bien pratique lorsque vous êtes dépourvus de firewall IPv6 (un petit clin d'oeil au passage aux abonnés Free).

C:\Users\Jean-Michel> ipconfig Windows IP Configuration Ethernet adapter Local Area Connection : Connection-specific DNS Suffix . : dilly.local IPv6 Address. . . . . . . . . . . : 2001:0db8::723e:f4ff:feda:1089 Temporary IPv6 Address. . . . . . : 2001:0db8::51de:ba54:af21:fe04 Link-local IPv6 Address . . . . . : fe80::723e:f4ff:feda:1089 IPv4 Address. . . . . . . . . . . : 192.168.0.11 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : fe80::10e:a2ff:feb9:fe63%6 192.168.0.254 

Sous GNU/Linux et Mac OS X cette fonctionnalité existe mais est désactivée par défaut. Voici comment la mettre en place :

  • Sous GNU/Linux : Vous devez d'abord vous assurez que cette fonctionnalité est activée dans votre noyau :
Linux:~# cat /boot/config-`uname -r` | CONFIG_IPV6_PRIVACY=y

Ensuite, éditez le fichier sysctl.conf

Linux:~# vi /etc/sysctl.conf

Vous devez alors ajouter la ligne suivante dedans :

net.ipv6.conf.all.use_tempaddr=1

Enfin, pour que le système prenne en compte la modification :

Linux:~# sysctl -p
net.ipv6.conf.all.use_tempaddr=1
Linux:~# ip -6 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436
 inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
 inet6 2001:0db8::813b:7a37:66cd:b6b0/64 scope global secondary dynamic
 valid_lft 604770sec preferred_lft 85770sec
 inet6 2001:0db8::a01:82ff:fe73:76d3/64 scope global dynamic
 valid_lft 2591970sec preferred_lft 604770sec
 inet6 fe80::a01:82ff:fe73:76d3/64 scope link
 valid_lft forever preferred_lft forever
  • Sous Mac OS X : le principe est sensiblement le même :

Editez le fichier sysctl.conf (ou créez-le s'il n'existe pas) :

macosx:~ user$ sudo vi /etc/sysctl.conf

Et rajoutez la clef suivante dedans :

net.inet6.ip6.use_tempaddr=1

Puis redémarrer votre Mac afin de prendre en compte les nouveaux paramètres du fichier sysctl.conf

macosx:~ user$ ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   ether 00:18:d2:fe:6b:2a
   inet6 fe80::218:d2ff:fede:6b2a%en0 prefixlen 64 scopeid 0x4
   inet6 2001:0db8::218:d2ff:fede:6b2a prefixlen 64 autoconf
   inet6 2001:0db8::91c7:f5a3:8053:21fd prefixlen 64 autoconf temporary
   inet 192.168.0.20 netmask 0xffffff00 broadcast 192.168.0.255
   media: autoselect (100baseTX <full-duplex,flow-control>)
   status: active

[EDIT 16/10/11] : La fonctionnalité est désormais activée par défaut sous MAC OS X 10.7
15Juin/100

Conference IPv6

WWW_IPv6_Ready

Le lien suivant vous permettra de télécharger la vidéo et le support de la conférence IPv6 que j'ai réalisé avec Valérian Castel (site personnel) devant une centaine d'élèves de SUPINFO grâce au système WebEx de Cisco.

Au programme :

  1. Introduction à l'IPv6 : généralités
  2. Transition IPv4 vers IPv6
  3. Introduction au routage IPv6

Téléchargement