réseau
Vyatta, un JunOS like et une alternative sérieuse a Quagga
par guiguiabloc le 07 juil., 2009, sous linux, réseau
Si vous faites mumuse avec les réseaux, il y a de fortes chances que vous ayez utilisé Zebra/Quagga.
Pour ceux qui ne connaîtrait pas, il s’agit d’un logiciel de routage pour les plateformes Linux/*BSD, implémentant de nombreux protocoles comme OSPF et BGP.
Ce qui le rend intéressant, c’est son approche à la “Cisco”, avec des commandes en mode “configure” très proche des IOS, ce qui le classe dans la catégorie des cisco-like.
Suite a la mise en place de diverses architectures de test, j’ai vite trouvé des limites à son utilisation (NAT, VRRP, VPN etc…) et alors que je me préparais a coller un nouveau Cisco matériel pour résoudre tout cela, je suis tombé sur un produit OpenSource bluffant : VYATTA.
Ne soyez pas effrayé par les prix, il existe une version communautaire gratuite (la VC5 a l’heure où j’écris ses lignes).
L’enregistrement vous donne accès à l’ensemble de la documentation au format PDF. Documentation d’ailleurs très bien fournie qui vous permet d’aborder toutes les possibilités de Vyatta.
Le choix de l’utilisation de Vyatta est un vrai bonheur : livecd, installation sur disque dur, machine virtuelle VMWare, image Citrix XEN server….
Pour ma part, j’ai opté pour l’installation sur disque dur, sur un petit pc avec une carte réseau relié en trunk sur un de mes switchs.
Je vous passe l’installation, on ne peut plus simple, pour aborder la syntaxe particulière des commandes.
Ceux qui utilisent des JunOS (type Juniper) seront moins perdu que les habitués de l’IOS.
exemple :
vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta# show interfaces ethernet eth0
address 10.10.10.1/22
duplex full
hw-id 00:01:02:03:04:05
speed 100
vif 1 {
address 192.168.1.1/24
}
[edit]Tout comme sur les équipements professionnels, un appui sur la touche TAB vous donne accès aux commandes disponibles :
vyatta@vyatta# show Possible completions: interfaces Configure network interfaces service Configure specified service system Configure system parameters [edit]
La configuration se retrouve dans un fichier facilement compréhensible de type “arbre” :
interfaces {
ethernet eth0 {
address 10.10.10.1/22
duplex full
hw-id 00:01:02:03:04:05
speed 100
vif 1 {
address 192.168.1.5/24
}
}
loopback lo {
}
}
service {
https
ssh {
allow-root false
port 22
protocol-version v2
}
}Bien sûr l’ensemble tourne sur un Linux de type Debian avec un repository dédié qui vous permet de rajouter des paquets manquants.
Les services offerts par Vyatta sont impressionnants :
cluster, firewall statefull, Vrrp, VPN ipsec, VPN pptp, VPN ssl OpenVPN, load balancing, etc….
De plus, outre l’accès SSH, une interface web en https vous permet de configurer plus facilement votre “routeur”.
Je vous invite a tester rapidement ce petit bijou qui, outre le fait de vous familiariser avec les commandes JunOS, permet de remplacer sans rougir un équipement plus onéreux.
Enfin, sachez que l’éditeur vend également son produit sur des appliances dédiés.
Amusez vous bien
EDIT : Si vous voulez en savoir encore un peu plus, Crashdump nous a pondu un petit tuto de derrière les fagots pour la mise en oeuvre d’un load-balancing avec Vyatta. Pour le billet, c’est ICI .
Nouveaux jouets…
par guiguiabloc le 21 juin., 2009, sous cisco, matériel, réseau
Ah décidément, j’adore faire le tour des bennes à ordures…
C’est quand même fou tout ce que les entreprises jettent. En même temps, je ne vais sûrement pas m’en plaindre
Et donc, pour rejoindre les quelques U restants de ma baie, j’ai récupéré 2 Cisco 3620
A moi les joies du HSRP à la maison et autres joyeusetés ![]()
VLAN et Trunk 802.1q
par guiguiabloc le 03 fév., 2009, sous OpenBSD, architecture, cisco, linux, réseau
En relisant quelques anciens billets, je me suis rendu compte que je n’avais pas abordé précisément la notion de vlan et de trunk dans une architecture réseau.
Corrigeons donc cela rapidement.
Un VLAN est un réseau Virtuel. Dans un réseau local physique, vous pouvez donc mettre en place des réseaux logiques, séparés les uns de autres, on parle alors de “segmentation”.
Pour pouvoir mettre cela en place, il vous faut donc un switch qui supporte cette fonctionnalité.
Si maintenant vous désirez propager plusieurs VLANs sur un même lien physique, il faut configurer un “trunk” et la norme établie est la 802.1q aussi appelé couramment : dot1q.
Pour cela, il faudra que vos paquets soit “taggués”, c’est à dire qu’ils contiennent dans leurs en-têtes le numéro du vlan (VLAN ID) pour lequel ils sont destinés.
(Cisco supporte bien évidemment cette norme sur ses équipements, mais également sa propre norme propriétaire, ISL “Inter Swtich Link”, dont je ne parlerais pas ici).
En situation, nous aurons quelque chose de ressemblant a ceci :
Outre un switch supportant les VLANs, il vous faudra bien évidemment un routeur pour les routages inter-vlan (ou un pc faisant office de routeur).
Bref, a la fin, vous risquez de vous retrouvez avec cela (vous avez de la chance, je vous ouvre les arcanes de mon installation personnelle
)
(Vous trouverez un billet sur la naissance de cette baie ICI )
Les exemples suivants se basent sur un Switch Catalyst 2924 XL et un Routeur 2611-XM, mais ils restent standard pour tout IOS récent (comprendre qui n’a pas 10 ans…)
La création d’un VLAN sur le switch est très simple :
catalyst#vlan database catalyst(vlan)#vlan 2 name vlan_base_de_donnees VLAN 2 added: Name: vlan_base_de_donnees
Sur l’interface du switch où est branché votre pc/serveur, vous définissez alors sur quel VLAN il est relié :
catalyst#conf t Enter configuration commands, one per line. End with CNTL/Z. catalyst(config)#int fastEthernet 0/1 catalyst(config-if)# switchport mode access catalyst(config-if)# switchport access vlan 2 Ce qui donne : interface FastEthernet0/1 description serveur Mysql port block multicast switchport access vlan 2 spanning-tree portfast no cdp enable
La variable “switchport access” définit le droit d’accès au VLAN.
Attention : Il existe un VLAN un peu particulier, le VLAN 1, qui est le VLAN de Management des équipements Cisco. Eviter donc d’y mettre des machines accessibles par tous.
Certains recommandent de déplacer le VLAN 1 sur un autre VLAN, personnellement, ça ne m’a pas porté chance de jouer à cela, donc un peu de rigueur suffit en changeant les vlans natifs sur les interfaces.
Sachez que sur le Catalyst 2924, il existe une petite commande sympa et peu documentée :
switchport mode multi swichport multi vlan 1,2,3
Cela permet a une machine d’accéder à plusieurs VLANs sans avoir à tagguer ses trames.
Dans ce mode de configuration, les machines connectées aux interfaces du switch n’ont pas besoin de tagguer leurs paquets, donc une configuration réseau toute basique (avec en passerelle l’interface définit dans votre routeur par exemple).
La connectivité entre notre routeur et notre switch par contre sera différente.
Nous avons 1 (voire 2) interfaces physiques sur le Cisco 2600 et c’est sur cette interface que nous allons faire passer l’ensemble des VLANs afin de permettre au routeur de… router
Coté Switch :
interface FastEthernet0/2 description Trunk fastEthernet 0/0 rt-2611 duplex full speed 100 switchport trunk encapsulation dot1q switchport mode trunk spanning-tree portfast no cdp enable
Ici, le mode du switch est “trunk” et l’encapsulation, 802.1q.
Sans spécifications particulières, nous passons l’intégralité des VLANs définis sur le switch sur cette interface.
Vous pouvez bien sur être plus restrictif sur cette configuration :
switchport trunk allowed vlan 2,3 # autorise que l'accès aux VLANS 2 et 3
Attention : Dans ce genre de configuration, un paquet non taggué partira dans le vlan par défaut qui est le VLAN 1.
N’oubliez donc pas d’indiquer explicitement le VLAN par défaut en cas de trames non tagguées :
switchport trunk native vlan 2 # on envoie sur le vlan 2 si pas de tag
Côté Routeur 2600 :
interface FastEthernet0/0.1 encapsulation dot1Q 1 native ip address 192.168.0.254 255.255.255.0 ip virtual-reassembly no cdp enable
Il ne vous reste plus qu’a définir vos interfaces “virtuelles” sur votre routeur Cisco :
Pour le VLAN 2 par exemple :
interface FastEthernet0/0.2 encapsulation dot1Q 2 ip address 192.168.2.254 255.255.255.0 no cdp enable
NB : Si vous voulez faire sortir vos machines par votre passerelle générale (exemple le pix :-p) n’oubliez pas les nat inside/outside sur vos interfaces, ainsi que des ACL bien placées.
Côté Linux :
Si vous voulez faire du trunk sur Linux, il suffit d’activer le support 802.1q dans le noyau.
Sous Debian, apt-get install vlan
Sous RedHat, le support est natif
Création de l’interface :
Debian :
vconfig add eth0 2 (pourt créer le VLAN 2)
Modification du fichier /etc/network/interfaces :
auto eth0.2 iface eth0.2 inet static address 192.168.2.254 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 vlan_raw_device eth0
RedHat :
Création du fichier /etc/sysconfig/network-scripts/ifcfg-eth0.2
DEVICE=eth0.2 BOOTPROTO=static HWADDR=XX:XX:XX:XX:XX:XX IPADDR=192.168.2.254 NETMASK=255.255.255.0 NETWORK=192.168.2.0 ONBOOT=yes TYPE=Ethernet VLAN=yes
Rédémarrage des services réseaux bien entendu.
Dans les 2 cas, pour supprimer l’interface, il faudra passer un :
vconfig rem eth0.2
(ps: l’écriture d’un alias d’une interface “vlan” se note : eth0.2:1 par exemple)
Côté OpenBSD :
création du fichier /etc/hostname.vlan2 (vlandev étant votre interface réseau physique)
inet 192.168.2.254 255.255.255.0 vlan 2 vlandev sis0
Sous Windows, ce n’est absolument pas natif, tout dépend de la carte réseau et du pilote du fabricant fourni… (en même temps, qui voudrait faire un routeur avec windows
)
Voilà, j’espère que ces explications vous aideront a mettre en oeuvre des VLANs chez vous, et surtout à l’utiliser car en cloisonnement, c’est quand même l’idéal.
Gestion des adresses Ip dynamiques avec Iptables
par guiguiabloc le 19 déc., 2008, sous linux, réseau, sécurité
Pour être honnête avec vous, j’avais pensé intitulé ce billet “Ouvrez, ouvrez la cage aux oiseaux…”.
Mais après avoir osé “PKI, PKI, oh ! PKI, PKI, ah!” sur l’air de “Rosalie”, je me se suis dit que vous alliez sûrement vous poser de sérieuses questions sur ma santé mentale et surtout sur mes goûts musicaux
(bien que je n’ai rien de personnel contre Carlos et Pierre Perret)
Bref, donc le but de ce billet est de résoudre un problème fréquent.
Vous avez un beau serveur dédié Linux (ou un pote vous en prête un) et vous contrôler bien entendu dessus les accès réseau via Iptables.
D’ailleurs, vous utilisez peut-être même un superbe script déjà tout fait dans le genre de KHARON (comment cela je fais de la pub ???)
Vous disposez a votre domicile d’une adresse IP dynamique et bien entendu, pour fixer cela en dur dans Iptables, bah c’est la cata…
Vous jonglez donc avec Fail2ban et/ou des règles du style :
Iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Voici donc une petite bidouille bien proprette pour insérer votre ip dynamique dans iptables (oublier les résolutions DNS en règles Iptables, cela ne marche pas…) et autoriser l’accès en SSH depuis votre ip dynamique.
Je suppose bien évidemment que vous utilisez déja un service comme DYNDNS ou une entrée de type DYNHOST chez OVH par exemple (ou autre hein, je suis pas sectaire).
Bref, un service permettant d’avoir un nom d’hôte pour votre ip dynamique et qui est mis à jour à intervalle régulier.
Tout d’abord, il faut créer une chaine que nous appelerons “mon_ip_maison” par exemple et l’insérer au début de la chaine INPUT d’iptables.
A rajouter donc dans votre script Iptables ou à la main comme ceci :
iptables -N mon_ip_maison iptables -I INPUT 1 -j mon_ip_maison
Reste à écrire le joli script de mise à jour que j’appellerais ici : Wesh_Gros_C_est_moi.sh
(euh vous pouvez changer le nom hein…)
#!/bin/bash # # variables generales dyndns=guiguiabloc.dyndns.com ipfile=/root/ipfile # Recuperation de l'ip IP=`/usr/bin/dig +short $dyndns | /usr/bin/tail -n 1` if [ "${#IP}" = "0" ]; then echo "Echec de la recuperation de l'ip" exit fi ANCIENNEIP="" if [ -a $ipfile ]; then ANCIENNEIP=`cat $ipfile` fi # on enregistrer la nouvelle ip echo $IP>$ipfile echo "Mise a jour d'iptables" if [ "${#ANCIENNEIP}" != "0" ]; then echo "Suppression de l'ancienne règle ($ANCIENNEIP)" /sbin/iptables -D mon_ip_maison -s $ANCIENNEIP/32 --dport 22 -j ACCEPT fi echo "Insertion de la nouvelle règle ($IP)" /sbin/iptables -A mon_ip_maison -s $IP/32 --dport 22 -j ACCEPT
Ne reste qu’a le lancer toutes les 10 minutes via la crontab :
*/10 * * * * /root/Wesh_Gros_C_est_moi.sh 2>&1
Magique
Vous trouverez le script de Dave Horner ICI







