Table of Contents

Extreme Networks / EXOS

Remarques générales

Par défaut les switchs sont configurés avec 2 VRs (virtual router), chacun possédant une table de routage étanche :

Pour les versions 16 et antérieures, le SSH est une fonctionnalité optionnelle, installable via un paquet téléchargeable dans le “download center” du site officiel (en saisissant le serial d'un équipement).

Par défaut les résultats de commandes s'affichent page par page ; pour afficher tout le retour en une seule fois (pour supprimer les “Press <SPACE> to continue or <Q> to quit: ~more” (terminal length 0 chez Cisco)) :

disable cli paging
enable cli paging
 
# pour les versions EXOS antérieures à 30:
disable clipaging
enable clipaging

Licences

Certaines fonctionnalités sont restreintes à un certain niveau de licence.

Procédure pour changer la licence d'un stack :

# on enlève la restriction de licence sur le slot4 (s'il y en a une)
unconfigure stacking license-level slot 4
 
# pour chaque slot Backup/Standby, on installe une licence
telnet slot 2
enable license xxxx-xxxx-xxxx-xxxx-xxxx
quit
[etc]
 
# puis le master (slot 1)
enable licence xxxx-xxxx-xxxx-xxxx-yyyy
 
# on reboot les slots qui avaient une licence limitante
reboot slot 4
 
# vérifier le bon fonctionnement de la pile avec ces nouvelles licences
show licenses
 
# au pire
reboot stack-topology

Système

Hardware

La commande show system renvoie beaucoup d'informations en passant la liste de commandes suivante :

show switch          # modèle, infos SNMP, heure, uptime
# nb : pour les stacks, c'est l'uptime système qui est remonté ;
# pour obtenir les uptimes individuels de chaque slot :
debug hal show platform cardInfo | i "Slot:|PowerOn"
 
show version         # version firmware, SN, liste des modules
show temperature     # température des sondes
show power           # alimentation
show fans            # vitesses des ventilateurs
show odometers       # temps depuis la mise en prod

Commandes avancées :

# voir les détails hardware du switch
debug hal show version [ slot X ]
 
Slot  1 Version Information:
Linux version:			unknown
 
Link date:			
Built by:			
Branch       :			22.2.1.5
Version:			22.2.1.5
Card type:			X460G2-24t-10G4 rev 3
MAC-0:				Unknown Device(b541) rev (11)
CPU Core:			Cavium Octeon II V0.1
CPU Speed:			1000 MHz
CPU Bus Speed:			533 MHz
CPU Memory Size:		1024 MB
Alternate Bootrom Version:	1.0.2.1**  (1.0.0.24)
Default Bootrom Version:	1.0.2.1**  (1.0.0.24)
Active Bootrom:			default
Dillinger Version:		0**  (6)
 
# afficher les informations d'un GBIC/SFP
debug hal show optic-info slot 1 port 52
 
Port                       52
SFP or SFP+:               SFP+
Signal:                    present
TX Fault:                  no
SFP/SFP+ Vendor:           Siemon          
SFP/SFP+ Part Number:      908154-10-01    
SFP/SFP+ Serial Number:    1350X-40123     
SFP/SFP+ Manufacture Date: 131224
SFP/SFP+ Type:             SFP/SFP+
Connector:                 Copper pigtail
Type:                      1 meter QSFP+ to SFP+ Fan Out Passive Copper Cable
Supported:                 yes
Wavelength:                0

Management

Configurer une adresse IP sur le port de management Mgmt (situé physiquement au dessus du port Console) :

Vérifier le DHCP :

show dhcp-client ipv4 state
Client VLAN     Protocol Server          Current State
--------------- -------- --------------- ---------------------------------------
Default         None     0.0.0.0
Mgmt            None     0.0.0.0
 
# désactiver le DHCP (au besoin)
disable dhcp vlan all
configure vlan Mgmt ipaddress 10.0.0.1 255.255.255.0
 
# configurer sa route par défaut
configure iproute add default 10.0.0.254 vr VR-Mgmt

Ce port est affecté au vlan Mgmt, lui-même attribué au VR-Mgmt. Cela signifie qu'il est indépendant de la configuration des autres ports et routes du switch, ce qui permet d'avoir un accès indépendant pour plus de sécurité. Ce port de mgmt n'est pas reconfigurable et ne peut pas être supprimé du VLAN 4095 de management. Par défaut tous les autres ports sont positionnés dans le VR-Default.

Si on ne veut pas se servir de ce port de Mgmt dédié, on peut tout-à-fait configurer une IP sur un VLAN du VR de prod, par exemple le VLAN “Default” :

configure vlan Default ipaddress 10.10.10.1 255.255.255.0
configure iproute add default 10.10.10.254

Au passage, pour déconfigurer l'adresse (il faut soit être connecté en console, soit une autre interco pour ne pas perdre la main) :

unconfigure vlan Default ipaddress 

Il est possible de positionner une adresse par VLAN si on le souhaite. Si on veut activer le routage entre ces VLANs, il faut activer l' ipforwarding dessus (cf routage)

Afficher et modifier la configuration de l'admin du switch (SSH, TELNET, idle-timeout, etc)

show switch management
 
CLI idle timeout                 : Enabled (60 minutes)
CLI max number of login attempts : 3
CLI max number of sessions       : 8
CLI paging                       : Enabled
CLI space-completion             : Disabled (this session only)
CLI configuration logging        : Enabled (without expansion)
CLI journal size                 : 100
CLI password prompting only      : Disabled
CLI display moved-keywords       : Hidden
CLI moved-keywords hidden release: 31.7
CLI RADIUS cmd authorize tokens  : 2
CLI scripting                    : Disabled (this session only)
CLI scripting error mode         : Ignore-Error (this session only)
CLI script search path           : ".:/usr/local/cfg" (this session only)
CLI persistent mode              : Persistent (this session only)
CLI prompting                    : Enabled (this session only)
CLI screen size                  : 68 Lines 135 Columns (this session only)
CLI refresh                      : Enabled
CLI history expansion            : Disabled
Image integrity checking         : Off
Current system port notation     : port
Configured system port notation  : port
Telnet access                    : Disabled (tcp port 23 vr all)
                                 : Access Profile : not set
SSH access                       : Enabled (Key valid, tcp port 22 vr all)
                                 : Secure-Mode    : Off
                                 : Access Profile : not set
SSH2 idle time                   : 60 minutes
SSH2 rekey interval              : 4096 MB and no time limit
Web access                       : Disabled (tcp port 80)
                                 : Access Profile : not set
Total Read Only Communities      : 3
Total Read Write Communities     : 0
RMON                             : Disabled
SNMP access                      : Enabled
                                 : Access Profile : not set
SNMP Notifications               : Enabled
SNMP Notification Receivers  : None
SNMP stats:     InPkts 0       OutPkts   0       Errors 0       AuthErrors 0
                Gets   0       GetNexts  0       Sets   0       Drops      0
SNMP traps:     Sent   0       AuthTraps Enabled
SNMP inform:    Sent   0       Retries   0       Failed 0

Lister les processus

show process
 
# (re)lancer un processus (par ex le SSHd)
start process "exsshd"
restart process "exsshd"
 
# terminer (kill) un processus
terminate process <name> [forceful | graceful] {slot}

Bannière

Pour mettre en place une bannière avant et/ou après le login (saisir la commande, puis le texte, et terminer par une ligne vide) :

configure banner before-login save-to-configuration
Unauthorized access to this equipment is prohibited.
 

Vérification :

show banner

SSH

Depuis la version 21 d'EXOS les fonctionnalités SSH sont incluses dans le firmware (avant il fallait installer un module additionnel !).

Mise en place :

# activer le serveur SSH
enable ssh2 [ vr VR-Mgmt ]
 
# configurer le idle-timeout d'une session SSH
configure ssh2 idletimeout 240

Vérifications :

show ssh2
show switch management

Filtrage des accès SSH

Protection de l'accès SSH par ACL (contenue dans le fichier protect-ssh.pol)

configure ssh2 access-profile protect-ssh

Auth par clé SSH

Pour authentifier un utilisateur par sa clé SSH :

# enregistrer la clé publique
create sshd2 user-key key_toto AAAAB3Nza[..]onL7eow==
 
# l'affecter à un utilisateur
configure sshd2 user-key "key_toto" add user toto
 
# Lister les clés configurées sur le switch:
show sshd2 user-key

Supervision/Surveillance

top
show cpu-monitoring

Gestion des utilisateurs

Créer de nouveaux comptes utilisateurs :

# autres comptes administrateur :
create account admin toto <PWD>
# ou "create account admin titi encrypted "$5$fusqbipgusdgfdfg4sfh*mdù""
 
# pour les comptes utilisateurs + mot de passe
create account user tata <PWD>
 
# pour les compte d'interception légale :
create account lawful-intercept <LOGIN> <PWD>

Il existe 2 niveaux de privilège classiques, non configurables : user (lecture) et admin (root). Le “Lawful Intercept Account” est un peu spécial ; comme son nom l'indique il est conçu pour les interceptions légales, et possède les particularités suivantes : il

Modifier le mot de passe d'un compte existant :

configure account <utilisateur> password
 <nouveau MDP>

Diag

Lister les comptes utilisateurs configurés :

show accounts
                       User Name  Access LoginOK  Failed     State
--------------------------------  ------ -------  ------  --------
                           admin     R/W       1       0   Enabled
                       stagiaire     RO        0       0   Enabled
                            toto     R/W      19       0   Enabled
                            titi     R/W      20       0   Enabled

Lister les utilisateurs connectés actuellement :

show session
    #       Login Time               User     Type    Auth   Auth Location
================================================================================
 16         Mon Jun  8 09:47:01 2020 toto     ssh2    local  dis  10.0.1.59
*17         Mon Jun  8 10:13:26 2020 titi     ssh2    sshKey dis  10.20.20.24

Failsafe account

Le failsafe account est un compte préconfiguré, n'apparaissant pas dans un show conf, qui permet de se connecter au switch quand on a perdu le mot de passe d'accès au switch (utilisable uniquement via la console ou control fabric par défaut). Son login est “ONE TIME FAILSAFE” par défaut, il affiche un challenge à envoyer au GTAC qui génère un OTP à saisir. Pour vérifier s'il est activé : show failsafe-account

Pour le désactiver :

configure failsafe-account deny all

cf : https://gtacknowledge.extremenetworks.com/articles/How_To/How-to-access-an-EXOS-switch-using-a-one-time-failsafe-password

Radius / mgmt-access

Pour utiliser une d'utilisateur base distante et centralisé, on peut configurer le client Radius :

configure radius mgmt-access primary server 10.0.1.1 1812 client-ip 10.0.2.254 vr VR-Default
configure radius mgmt-access primary shared-secret <MDP défini sur le serveur Radius>
enable radius mgmt-access

Politique de mots de passe

Pour configurer une politique de mot de passe :

SW# configure account all password-policy ?
  char-validation            Password character validation
  history                    Check passwords against ones stored in history
  lockout-on-login-failures  Lockout account in case of multiple login failures
  lockout-time-period        Period of time to lockout account in case of multiple login failures
  max-age                    Maximum age of password, between 1 and 365 days
  min-age                    Minimum age of password, between 1 and 365 days
  min-different-characters   Minimum number of different characters between old and new password
  min-length                 Minimum length of password, between 1 and 32 characters

Le nombre max de mauvais logins est configurable avec la commande :

configure cli max-failed-logins <1-10>

Si un compte est verrouillé par suite de trop de tentatives de login incorrectes, on verra dans les logs le message:

<Warn:AAA.accountLockedOut> Account for user 'admin' locked out!

Pour le débloquer : clear account admin lockout

<Info:AAA.accountMod> User 'admin2' modified clear lockout setting for 'admin' user(s).

DNS

# le premier serveur saisi sera le primaire
configure dns-client add name-server 10.1.1.108 vr VR-Default
configure dns-client add name-server 10.1.1.24 vr VR-Default
configure dns-client add domain-suffix maboite.fr

Vérifications :

show dns
Number of domain suffixes: 1
Domain Suffix 0:        maboite.fr
Number of domain servers: 2
Name Server 0:  10.1.1.108  VR-Default 
Name Server 1:  10.1.1.24  VR-Default

xNTP

On utilise soit NTP soit SNTP (Simple Network Time Protocol).

NTP

configure ntp server add 10.1.1.108
configure ntp server add 10.1.1.24
enable ntp vlan Default
enable ntp

Supprimer la conf NTP :

disable ntp
configure ntp server delete 10.1.1.108

Vérifications :

show ntp association
show ntp sys-info
show ntp server
show ntp vlan

SNTP

configure sntp-client primary 10.1.1.108 vr VR-Default
configure sntp-client secondary 10.1.1.24 vr VR-Default
enable sntp-client

Supprimer la conf:

unconfigure sntp-client [ primary | secondary ]

Vérifications

show sntp-client

Pour configurer la timezone (le fuseau horaire) ainsi que le changement d'heure été/d'hiver sur le modèle français :

conf timezone name CET 60 autodst name DST begin every last sunday march ends every last sunday october

SNMP

Supprimer la configuration SNMP par défaut (qui n'apparait pas avec une show conf mais que l'on peut lister avec un show configuration snmp detail) :

configure snmpv3 delete community private
disable snmpv3 default-user

OIDs utiles

# useful OIDs / MIB
.1.3.6.1.2.1.1.1.0			description système/version du firmware
.1.3.6.1.2.1.1.3.0                      uptime du matériel
 
.1.3.6.1.4.1.1916.1.1.1.34.1.10.3	idem
.1.3.6.1.4.1.1916.1.1.1.13.0		primary system image
.1.3.6.1.4.1.1916.1.1.1.14.0		secondary system image
 
.1.3.6.1.4.1.1916.1.32.1.2.0		utilisation CPU % (sur le master de la stack)
.1.3.6.1.4.1.1916.1.32.1.4.1.9		utilisation CPU
.1.3.6.1.4.1.1916.1.32.2.2.1.3.X	utilisation memory, avec X=num slot
----
.1.3.6.1.4.1.1916.1.32.1.4.1.5.X	utilisation CPU 5s (cf : sh cpu-monitoring) avec X=num slot
.1.3.6.1.4.1.1916.1.32.1.4.1.6.1	utilisation CPU 10s
.1.3.6.1.4.1.1916.1.32.1.4.1.7.1	utilisation CPU 30s
.1.3.6.1.4.1.1916.1.32.1.4.1.8.1	utilisation CPU 1m
.1.3.6.1.4.1.1916.1.32.1.4.1.9.1	utilisation CPU 5m
.1.3.6.1.4.1.1916.1.32.1.4.1.10.1	utilisation CPU 30m
.1.3.6.1.4.1.1916.1.32.1.4.1.11.1	utilisation CPU 1h
.1.3.6.1.4.1.1916.1.32.1.4.1.12.1	max utilisation CPU
 
.1.3.6.1.4.1.1916.1.1.1.40.1		power usage (= "sh power detail | inc 'System Power Usage'" x 10 càd en mW)
.1.3.6.1.4.1.1916.1.1.1.8.0		température
 
.1.3.6.1.4.1.1916.1.4.14.1.1		packets drops
 
.1.3.6.1.4.1.1916.1.19.1                dot3adAggPortTable/extremeLacpTable : liste des agrégats
 
 
.1.3.6.1.2.1.47.1.1.1.1.2.1.*           liste du matériel (liste les slots si stack ; modules VIM, etc)

Logs / journaux

Affichage des logs

show log messages nvram
show log messages memory-buffer

Configuration des logs

# afficher la configuration des logs
show configuration ems
 
show log configuration filter "DefaultFilter"	
 
# logguer les commandes passées sur le switch
enable cli-config-logging
# nouvelle syntaxe à partir d'EXOS v30
enable cli config-logging
 
# Active la "CLI history expansion" qui active la prise en charge
# du rappel de commande de bash : (!motif_rechch:motif_rempl)
enable cli history expansion permanent
 
# lister toutes les familles de log possible
show log components
 
# filtrer les alertes
configure log filter DefaultFilter add events All severity warning
 
# Voir les compteurs de log par catégorie
show log counters All include
 
# ajouter une catégorie
configure log filter DefaultFilter add events Kern.Info
 
# configurer un rsyslog
configure log target syslog 10.1.1.24:514 vr VR-Default local7 filter DefaultFilter severity Debug-Summary
enable log target syslog 10.1.1.24:514 vr VR-Default local7
 
# modifier le format des messages de log
configure log target syslog 10.1.1.24:514 vr VR-Default local7 format timestamp hundredths date yyyy-mm-dd event-name condition priority host-name tag-name
 
# activer l'affichage des logs sur la console
enable log display
# activer l'affichage des logs sur une session telnet/SSH
enable log target session

Pour censurer certains messages de log inévitables et polluant, on peut les exclure des journaux en les filtrant ; par exemple pour exclure les messages de STP contenant “STP Domain tag 1” :

configure log filter DefaultFilter add exclude events STP.InBPDU.Drop strict-match string "STP Domain tag 1"

Firmware

Pour obtenir la version d'EXOS courante (ici 21.1.1.4) :

show version
 
Switch      : 800550-00-05 1531N-01234 Rev 5.0 BootROM: 1.0.2.1    IMG: 21.1.1.4  
X460-G2-VIM-2Q-B-1: 800555-00-03 1512N-40846 Rev 3.0
PSU-1       : Internal PSU-1 800515-00-04 1529E-01234
PSU-2       : Internal PSU-2 800515-00-04 1529E-01235
 
Image   : ExtremeXOS version 21.1.1.4 21.1.1.4-patch1-5 by release-manager
          on Thu Jun 16 14:19:33 EDT 2016
BootROM : 1.0.2.1
Diagnostics : 5.4

Cette commande retourne également la liste des commutateurs de la stack et les modules additionnels, ainsi que leurs serial number respectifs (ici SN=1531N-01234).

Consulter la page ExtremeXOS and Switch Engine Release Recommendations pour connaitre la version recommandée par le constructeur.

MAJ firmware

Envoi du firmware sur la partition secondary du switch :

download image  1.1.1.1 <filename> vr "VR-Default" secondary

Téléchargement sur la partition inactive + installation + reboot (all-in-one)

download image 1.1.1.1 summitX-31.7.2.28-patch1-38.xos vr VR-Mgmt install reboot
# puis vérifier qu'elle soit reconnue
show memorycard
 
# copier le fichier .xos
download image memorycard summitX-22.2.1.5.xos secondary
 Installing to Switch........
 Image installed successfully
 This image will be used only after rebooting the switch!

Depuis le commutateur :

scp2 user@host:summitX-22.2.1.5.xos summitX-22.2.1.5.xos
install image summitX-22.2.1.5.xos secondary
use image secondary
[ use configuration secondary ]

Une fois l'image copiée sur le switch, vérifier/modifier l'image sur laquelle on va booter au prochain redémarrage :

show switch | inc "Image Selected"
 
# la modifier si besoin
use image partition secondary
 
# puis redémarrer
reboot

Erreurs rencontrées

Se produit au milieu du transfert scp pour télécharger l'image ; c'est un erreur aléatoire corrigée après passage en v30.7 : Randomly following the completion of the SCP file transfer between the switch and the source point the SSH service on the switch restarts and re-attempts to bind to TCP port 22; already in use. (source GTAC).

Il faut donc relancer le scp et cela finit par fonctionner !

L'erreur apparait après l'installation d'une image sur le switch install image summitX-30.7.1.1-patch1-23.xos. Il s'agit d'un plantage du processus hal : Hal process is being hung and hal has not finished loading it (source GTAC) qui ne se résoud qu'avec un reboot du switch !

L'erreur apparait après téléchargement de l'image sur le master, pendant le transfert vers les autres slots de la stack, lors de la MAJ de le 22 vers la v30.7. En passant par la version intermédiaire 30.2.1.8, le problème n'apparait plus. (source GTAC)

Commandes UNIX-like

Certaines commandes sont similaires aux UNIX/Linux :

cd
cp
exit
history
ls
mkdir
mv
nslookup
ping
pwd
top
reboot
   reboot slot1       # redémarrer le slot1, dans la cas d'un stack
   reboot time <month> <day> <hour> <min> <sec> # planifier un reboot
rm
rmdir
scp2
ssh2
telnet
tftp
vi

Debug / tech-support

# snapshot pour le support
show tech-support
 
# alternative : enregistrement dans le fichier : /usr/local/tmp/show_tech.log.gz
show tech-support all logto file
# alternative 2 : les envoyer directement sur un serveur tftp
upload tech-support vr "VR-Default" tftp://10.1.1.24
 
# tester les ASICs et teste les ports (packet loopback test). Attention cela reboot le switch !
# normal et extended testent les mêmes fonctions mais le second de façon plus approfondie (il prend 5 min env.).
run diagnostics [ extended | normal ]
# Performs a BERT on the stacking ports and reboots the switch :
run diagnostics stack-port
 
# voir les modules consommant de la mémoire (permet d'orienter le debug globalement)
debug hal show sys-health-check
 
# augmenter la verbosité de certaines fonctions (XXX=fdb, deviceInfo, linkInfo, portStats, etc...)
debug hal show platform XXX
 
# autres commandes utiles
show log messages nvram
show log messages memory
show debug system-dump [slot X]
# afficher l'historique des commandes passées en CLI
show cli journal
 
# voir la table d'adresses MAC
debug hal show fdb
# tip : trouver l'adresse MAC du switch
show switch | inc "System MAC:"
# alternative :
debug hal show fdb | inc CPU
 
# afficher les compteurs de chaque VLAN
show l2stats
[..]
Bridge interface on VLAN Default:
Total number of packets to CPU = 168659060.
Total number of packets learned = 145377870.
Total number of IGMP control packets snooped = 3979337.
Total number of IGMP data packets switched = 3998431.
Total number of MLD control packets snooped = 0.
Total number of MLD data packets switched = 0.
 
# alternative à "sh l2stats"
run script spath-stats.py
 
show ipstats ipv4 vlan Default
 
debug hal show congestion

Détecter une boucle

Trouver les ports qui génèrent une boucle avec l'ELRP (Extreme Loop Recovery Protocol) (c'est un test unique et non un service en arrière-plan) :

clear l2stats
# après quelques secondes, afficher les compteurs de chaque VLAN
show l2stats
 
# à effectuer sur le VLAN qui possède le plus de paquets remontés à la CPU
# src: https://extremeportal.force.com/ExtrArticleDetail?an=000090973
enable elrp-client
configure elrp-client one-shot <vlan_name> ports all print-and-log
# après le test
disable elrp-client

tech-support collector

Dans la conf usine on s'étonnera de trouver la ligne suivante :

configure tech-support collector 12.38.14.200

Celle-ci ne peut pas être supprimée (!), mais on peut désactiver le “collector” et/ou utiliser un port louche et une IP-source non-routable :

configure tech-support delete collector 12.38.14.200
 Error: The default collector 12.38.14.200 cannot be deleted.
 
disable tech-support collector
configure tech-support delete collector 12.38.14.200 tcp-port 1 from 10.0.0.1
 
# vérification :
show tech-support collector | grep "Tech Support Collector"
 Tech Support Collector:       Disabled

Configuration

Le fichier de configuration est primary.cfg, il est situé dans le dossier par défaut du terminal, à savoir /usr/local/cfg. Ce dernier contient notamment les fichiers :

Pour lister la configuration :

show configuration
 
# En incluant les paramètres par défaut (non affichés sinon)
show configuration detail
 
# Afficher un paragraphe de configuration (ici le spanning-tree)
show configuration stp
 
# Utiliser un filtre de famille de fonctionnalités (ici la partie DNS/NTP/DHCP relay, etc)
show configuration nettools

Lorsqu'il y a un delta config entre la configuration active (running) et celle sauvegardée (dans la flash, primary.conf par ex), le prompt est préfixé par * . Pour afficher les différences entre les 2 confs :

* Slot-1 toto.3 # show conf difference
--- primary.cfg                 Tue Sep 10 09:42:09 2024
+++ Running Configuration       Thu Oct 10 15:03:18 2024
@@ -1,7 +1,7 @@
 #
 # Module devmgr configuration.
 #
-configure snmp sysName "titi"
+configure snmp sysName "toto"
[...]

Sauvegarde

Sauvegarder la configuration

save configuration
Do you want to save configuration to primary.cfg and overwrite it? (y/N) Yes

Sauvegarder la config courante dans la config secondaire :

save configuration secondary

Exporter la configuration

# sauvegarde locale dans le fichier lisible "/usr/local/cfg/config-extr.xsf"
save configuration as-script config-extr
	Do you want to save configuration to script config-extr.xsf? (y/N) Yes
# l'envoyer en tftp
tftp put 10.1.2.201 vr "VR-Default" config-extr.xsf
 
# on peut lancer la cmd à distance en SSH :
ssh user@extr tftp put 10.1.2.201 vr "VR-Default" /usr/local/cfg/config-extr.xsf
# la même chose en une seule ligne de commande et sans l'extension .xsf :
upload configuration 10.1.2.201 config-extr vr "VR-Default"

Restauration

On peut injecter une configuration au format “command” (.xsf) sur un nouveau switch, en le chargeant depuis un serveur TFTP :

# Télécharger la sauvegarde
tftp get 10.1.1.24 save.xsf
 Downloading save.xsf to switch... done!
 
# Charger cette conf :
load script save
 
# Sauvegarder la nouvelle conf dans le fichier de configuration
# par défaut de ce switch (vraisemblablement primary.cfg) :
save config
 y

On peut aussi directement utiliser le fichier récupérer par TFTP comme sa conf par défaut :

# Télécharger la sauvegarde
tftp get 10.1.1.24 save.xsf
 Downloading save.xsf to switch... done!
 
# L'utiliser comme fichier de configuration par défaut
use configuration save.xsf
 
# redémarrer sans sauver la config
# (pour ne pas écrire la primary courante sur la save fraichement restaurée)
reboot
 n

src : https://gtacknowledge.extremenetworks.com/articles/How_To/How-to-copy-a-configuration-to-a-new-switch

factory-reset

Il existe plusieurs façons de déconfigurer un switch, décrites ici : https://gtacknowledge.extremenetworks.com/articles/How_To/Clear-NVRAM-using-EXOS ; dans tous les cas cela nécessitera un reboot du switch.

Déconfigurations non destructrices (ne supprime pas les fichiers de conf en nvram) :

Déconfigurations destructrices :

A noter que dans tous les cas, lorsqu'un switch démarre sur sa conf usine, il reste inopérant tant que l'assistant de démarrage n'a pas été lancé ; il faut donc s'y connecter au moins une fois en console pour exécuter ou quitter l'assistant, et rendre le switch opérationnel.

Ports / VLANs

Configurer la vitesse/duplex/négociation :

configure port 2 auto off speed 100 duplex full

Créer un VLAN :

create vlan TEST-VISIO
configure vlan TEST-VISIO tag 50

Ajouter un port dedans :

# il faut d'abord retirer le port du précédent vlan s'il est "untagged"
configure vlan "Default" delete ports 2
configure vlan "TEST-VISIO" add ports 2 untagged
# port trunk (taggué) : on peut utiliser le nom ou le tag du VLAN
configure vlan "TEST-VISIO" add ports 48 tagged
configure vlan 2 add ports 48 tagged
# Désactiver / activer un port
disable port 20
enable port 20
 
# modifier la description d'un port
configure ports 1:14 display-string "desc_courte"
configure ports 1:14 description-string "description verbeuse"
unconfigure ports 1:14 display-string
 
# pour partitionner un port (pour un 40Gb compatible, qui nécessite un câble spécifique)
configure port 1:1 partition
# cela va créer 4x port de 10Gb, du 1:1 au 1:4

Commandes de vérification, en vrac :

# afficher les VLANs configurés sur un port (par ex le 2)
show port 2 vlan description
         Untagged                                                               
Port     /Tagged  VLAN Name             VID VLAN Description                    
-------- -------- -------------------- ---- ------------------------------------
uplk-foo Untagged Default                 1                                     
         Tagged   VLAN2                   2                                     
                  TEST-VISIO             50                                     
 
# afficher l'état et la conf d'un port
show port 2 information [ detail ]
 
# afficher les compteurs instantanés ou totaux :
show port 2 utilization [ bandwidth | packets | bytes ]
show port 2 statistics
 
# afficher les infos de santé du port/du lien :
show port 2 [ anomaly | buffer | collisions | congestion ]
 
# afficher les erreurs en émission/réception
show port 2 [ rxerrors | txerrors ]
 
# afficher les informations de contrôle de flux (RX/TX pause packets)
show port 2 flow-control [ rx-pauses | tx-pauses ]
 
# afficher les informations concernant le convertisseur (GBIC/SFP) branché sur le port
sh port 2 transceiver information [ detail ]

Pour effacer les compteurs :

clear counters ports

En cas de congestion (show port congestion ; c'est un compteur egress) on peut :

show port 1 buffer
Packet Buffer Allocation for ports in range 1-54
 Total Packet Buffer Size: 4046848 bytes, Not Overcommitted
 Total Shared Buffer Size: 3674112
  Port 1  Max Shared Buffer Usage: 734656 bytes (20%)
   QP1: Reserved Buffer: 3328 bytes
   QP8: Reserved Buffer: 3328 bytes
 
configure port 1 shared-packet-buffer 100

Local fault/remote fault Quand un port passe DOWN il affiche dans les logs la raison Local fault ou remote fault. D'après le GTAC:

# afficher l'état et la conf d'un vlan
show vlan 2
 
# interroger le FIB (table d'adresse MAC par port)
show fdb bc:30:5b:12:34:56
Mac                     Vlan       Age  Flags           Port / Virtual Port List
--------------------------------------------------------------------------------
bc:30:5b:12:34:56    Default(0001) 0000  dhm           1:14
# alternatives :
show fdb ports <port>
show fdb vlan <vlan>
 
# enregistrer une entrée statique dans le FDB
# create [fdbentry | fdb] <mac_addr> vlan <vlan_name> ports <port#>
create fdb 00:11:22:33:44:55 vlan v10_users ports 12
 
# interroger la table ARP (association adresse IP <-> MAC)
show iparp 10.1.2.201
sh iparp 10.1.2.201
VR            Destination      Mac                Age  Static  VLAN          VID   Port
VR-Default    10.1.2.201       bc:30:5b:12:34:56   20      NO  Default       1     1:14
[..]
# alternatives :
show iparp bc:30:5b:12:34:56
show iparp ports <port>
show iparp vlan <vlan>

# créer une association ARP statique : configure iparp add 10.0.20.2 vr VR-Default bc:30:5b:12:34:56

Commande de diagnostique bas niveau :

debug vlan show vpifs vl-WIFI 2:29
VLAN: Default, port:2:29, vlanId:1, instance: 50002499, tag: 0,
        Ingress:0x5, Egress: 0x1, l2 prot priority: 0, cfgSave: TRUE
        l2Protos (IDs): 0x0 [PIF: type:SLOTPORT linkState:1 phyLinkState:1]
        uRPF[-]:0, isTrillAppointedForwarder:0 isTrillDesignated:0
        clientUsage: 0x10
 
Egress and Ingres state bit definitions
typedef enum ifIngressState_ {
IF_STATE_ENABLE_LEARNING=       0x1,
IF_STATE_DISABLE_LEARNING =     0x2,
 IF_STATE_ALLOW_ALL =            0x4,
 IF_STATE_ALLOW_AUTH_MAC =       0x8,
IF_STATE_SLOWPATH_PROCESSING =  0x10,
IF_STATE_IN_BLOCK_ALL =         0x20,
IF_STATE_IN_BLOCK_DATA =        0x40,
IF_STATE_INVALID =              0xffffffff,
} ifIngressState_t;
typedef enum ifEgressState_ {
IF_STATE_FORWARDING =           0x1,
IF_STATE_EG_BLOCK_ALL =         0x2,
IF_STATE_BLOCK_FLOODING =       0x4,
IF_STATE_EG_BLOCK_DATA =        0x8,
IF_STATE_BLOCK_BROAD_CAST =     0x10,
} ifEgressState_t;
Layer 2 protocols , ids and their priorities(lower values have higher precedence
Protocol: SRP , ID: 0x1, Priority: 8001
Protocol: netLogin , ID: 0x2, Priority: 10001
Protocol: VRRP , ID: 0x4, Priority: 40001
Protocol: ESRP , ID: 0x8, Priority: 30001
Protocol: ELSM , ID: 0x10, Priority: 7001
Protocol: ETHOAM , ID: 0x20, Priority: 6001
Protocol: brm , ID: 0x40, Priority: 50001
Protocol: stp , ID: 0x80, Priority: 9001
Protocol: ERPS , ID: 0x100, Priority: 10050
Protocol: EAPS , ID: 0x200, Priority: 20001
gMacTree[0]: cnt:0 Addr 2.4.96.00.11.22 src: 0

jumbo frames

Configuration de la MTU :

# sur un port
enable jumbo-frame port <all|port_list>
# sur un vlan
configure ip-mtu <MTU Size (Default 1500)> vlan <VLAN name>

Agrégat

Créer un agrégat permet de regrouper plusieurs ports physique pour un créer un logique. Le premier port (ordre croissant) devient le master port, c'est lui qui porte la configuration de l'agrégat.

# créer l'agrégat avec 3 ports : 1, 2 et 3 en LACP (conseillé)
enable sharing 1:1 grouping 1-3 lacp
 
# ajout d'un 4ème port
configure sharing 1 add 4
 
# désactiver l'agrégat :
disable sharing 1:1

“Show commandes” :

show sharing
Load Sharing Monitor
Config    Current Agg     Min     Ld Share    Ld Share  Agg   Link   Link Up
Master    Master  Control Active  Algorithm   Group     Mbr   State  Transitions
================================================================================
   1              LACP       1     L2          1          -      R        0
                                   L2          1          -      R        0
                                   L2          1          -      R        0
                                   L2          1          -      R        0
================================================================================
Link State: A-Active, D-Disabled, R-Ready, NP-Port not present, L-Loopback
Minimum Active: (<) Group is down. # active links less than configured minimum
Load Sharing Algorithm: (L2) Layer 2 address based, (L3) Layer 3 address based
                        (L3_L4) Layer 3 address and Layer 4 port based
                        (custom) User-selected address-based configuration
Custom Algorithm Configuration: ipv4 L3-and-L4, xor
Number of load sharing trunks: 1
 
show lacp [ lag 1 [ detail ] ]
Lag   Actor    Actor  Partner           Partner  Partner Agg   Actor            
      Sys-Pri  Key    MAC               Sys-Pri  Key     Count MAC              
--------------------------------------------------------------------------------
1           0  0x03e9 02:04:96:12:34:56       0  0x041c      4 02:04:96:12:34:56
 
Port list:
 
Member     Port      Rx           Sel          Mux            Actor     Partner 
Port       Priority  State        Logic        State          Flags     Port    
--------------------------------------------------------------------------------
1          0         Current      Selected     Collect-Dist   A-GSCD--  1052     
1          0         Current      Selected     Collect-Dist   A-GSCD--  2052     
1          0         Current      Selected     Collect-Dist   A-GSCD--  3052     
1          0         Current      Selected     Collect-Dist   A-GSCD--  4052     
================================================================================
 
show sharing detail
show sharing port-based keys
show lacp counters
 
# multi-lag = lag multi-chassis
show mlag port 10
show mlag peer

Exemple : configurer un sharing sur les ports 20-21 face à un bonding (Linux) en mode=0 (balance-rr) :

enable sharing 20 grouping 20-21 algorithm address-based L2

mirroring / monitoring

create mirror toto
configure mirror toto add vlan 9
 
configure mirror to port 1
enable mirror

Exemple de mirrorring 1→many = utilisation d'une loopback obligatoire

enable mirroring to port-list 2:5-2:7 loopback-port 3:1
configure mirroring add port 6:5 ingress

mac-locking

Le contrôle d'accès par adresse MAC / mac-locking permet de limiter l'accès d'un port à une ou des adresses MAC. Dans un premier temps on place le switch dans une période d’apprentissage des adresses, à l'issue de laquelle on fige les couples port;adresse MAC. Toute nouvelle adresse MAC dépassant le seuil d'adresse configurée par port provoquera une coupure de ce dernier et l'émission d'une alerte.

Exemple rapide de mise en place :

# activation du mac-locking sur tous les ports "user" (pas l'uplink)
enable mac-locking ports 1-47
# configuration de l''apprentissage dynamique, limité à 1 adresse par port
# nb: pas d''aging = les MAC apprises restent liées à leur port, même si la MAC disparait de la FDB
configure mac-locking ports 1-47 first-arrival limit-learning 1
# activation du mac-locking
enable mac-locking
 
# [ phase d''apprentissage ]
 
# vérifs
show mac-locking stations ports 1-47
# on limite le nombre d''adresse à une par port
configure mac-locking ports 1-47 static limit-learning 1
# copie des MAC apprises en static
configure mac-locking ports 1-47 first-arrival move-to-static
# vérifs
show mac-locking ports 1-47
show mac-locking stations ports 1-47
# configurer les actions si dépassement de seuil (violation)
configure mac-locking ports 1-47 learn-limit-action disable-port

Vérifications

show mac-locking ports 1-47
show mac-locking stations ports 1-47
 
# ajouter ou supprimer une MAC d''un port
configure mac-locking ports 47 static [add | enable | disable] @MAC

authentification par mac

On peut également faire vérifier l'adresse MAC d'un port par un serveur Radius, et si validé, basculer ce port sur le VLAN envoyé par le serveur Radius.

Configuration côté switch

# création du VLAN d'accueil (VLAN par défaut si MAC non authentifiée) et 10 (VLAN utilisateur)
create vlan v10_Users tag 10
create vlan v666_Accueil tag 666
!
# configuration du serveur Radius
configure radius netlogin primary server 10.4.1.1 1814 client-ip 10.5.255.253 vr VR-Default
configure radius netlogin primary shared-secret encrypted "blablahashé"
!
# configuration de l'authentification par adresse MAC
 
configure netlogin vlan v666_Accueil
enable netlogin mac 
configure netlogin mac authentication database-order radius
# on active la protection MAC sur les port 1 à 8 (arbitraire)
enable netlogin ports 1-8 mac 
configure netlogin add mac-list ff:ff:ff:ff:ff:ff 48
!
enable radius
enable radius netlogin

Configuration côté serveur Radius

Dans le cas de freeradius, il faut : * ajouter l'IP du switch (10.5.255.253) et son “secret” dans clients.conf * activer le plugin authorized_macs * peupler le fichier authorized_macs avec la liste des adresses MAC permises (format 00-11-22-33-44-55) * dans la section authorize de la configuration du site :

[...]
authorize {
   preprocess
   # convertir l'@ mAC dans le bon format
   rewrite_calling_station_id
   #auth_log
   authorized_macs
   if (ok) {
      # The MAC address was found, so update Auth-Type to accept this auth.
      update control {
         Auth-Type := Accept
      }
      update reply {
         Tunnel-Type := VLAN
         Tunnel-Medium-Type := IEEE-802
         Tunnel-private-Group-ID := 100
      }
   }
}
[...]

Spanning-tree

En vrac :

# Configuration de base
configure stpd s0 priority 16384
configure stpd s0 mode dot1w
configure stpd s0 add vlan Default ports 5:1 dot1d | emistp | pvst-plus
# (dés)activation du domaine s0
disable stpd s0
enable stpd s0
 
# Configurer un port edge
# attention cela bloque le port si l'on reçoit un BPDU dessus
# les bridges sous Linux peuvent en générer par exemple
configure stpd s0 ports link-type edge 1:14 edge-safeguard enable bpdu-restrict

Fast convergence

Lors d'un changement de topology (TC), le switch vide sa table ARP (“FDB Flushed due to topology Change”) et doit réapprendre toutes les correspondances IP ↔ MAC, ce qui peut prendre du temps et de la CPU. Aussi il est possible d'activer la fast-convergence, qui permet de ne pas vider cette table suite à un TC ; pour activer cette fonctionnalité :

configure iparp fast-convergence on
 
show iparp | grep Convergence
Fast Convergence :         On

Debug / diagnostique

Lister l'état STP des ports du domaine s0

show stpd s0 ports
[..]
1:12   802.1D FORWARDING 20000 eDee-d-S-- 128      800c    40:00:02:04:96:12:11:11
1:13   802.1D FORWARDING 20000 eDee-w-S-- 128      800d    40:00:02:04:96:12:22:22
1:14   802.1D LISTENING  2000  eDappw---- 128      800c    40:00:02:04:96:9b:33:33
# exemple de résultat : PC Linux ponté qui génère des BPDUs en 1:12
#                       port edge 'normal' en 1:13
#                       port bloqué en listening en 1:14

Afficher la raison du blocage d'un port :

show stpd s0 ports non-forwarding-reason
Port    State       Reason
-------------------------------------------------------------------------------
1:14    LISTENING   Placed in listening state because it is in dispute.

Logguer les événements STP :

# changements de topo STP :
configure stpd s0 trap topology-change on
configure stpd s0 trap topology-change edge-ports on
configure stpd s0 trap new-root on
 
# ajouter des msg de log
configure log filter "DefaultFilter" add events "STP.State.Topology"
configure log filter "DefaultFilter" add events "STP.State.PortState"
configure log filter "DefaultFilter" add events "STP.SendClntTopoChgMsg"
# vérifier qu'ils sont (I)ncluded = Y dans notre filtre
show log configuration filter "DefaultFilter"
# pour les msg de type : Debug-(S)ummary, Debug-(V)erbose ou Debug-(D)ata, il faut ajouter cette cmd :
enable log debug-mode
# voir le nb de msg généré pour un type de log :
show log counter "STP.State.Topology"

Sources :

CDP / LLDP

show lldp neighbors
 
enable cdp ports all
 
show cdp neigbors

Access-list

Les access-list et policy sont enregistrées dans des fichiers plats .pol dans le dossier /usr/local/cfg.

Créer une access-list :

edit policy internet-in
 entry RFC1918_1 {
 if match all { source-address 10.0.0.0/8 ;}
 then { count rfc1918 ; deny  ;}
 }

Pour enregistrer le fichier : <echap> ; puis :wq

check policy internet-in
# appliquer une acl sur un port
configure access-list internet-in port 32 ingress
 
# appliquer une acl sur un vlan
configure access-list internet-in vlan "Default" ingress
 
# appliquer une acl sur ttes les itf
configure access-list internet-in any [ ingress | egress ]
 
# pour supprimer une access-list d'un port:
# (le fichier .pol n'est pas supprimé)
unconfigure access-list internet-in ingress

Si on modifie une access-list déjà appliquée sur un port, il faut la réappliquer :

check policy internet-in
refresh policy internet-in

Créer une ACL dynamique

create access-list dynamic test-acl "protocol icmp;source-address 10.0.20.21/32" "deny"

Examples

ACL pour bloquer l'IPv6

edit policy block-ipv6
@description "ACL pour bloquer l'IPv6 et compter les paquets matchés"
# 20170323 v1
# 20170324 v1.1 retouche
entry ipv6 {
        if {
                protocol ipv6;
        } then {
                deny;
                count c_block-ipv6;
        }
}
 
configure access-list block-ipv6 vlan "Default" ingress

ACL pour bloquer les BPDUs (source)

edit policy <policy name>.pol
entry bpdu {
    if { ethernet-destination-address 01:80:c2:00:00:00; }
    then { deny;
           count bpdu; }
    }

Vérifications

# Filtrer les lignes de configuration:
show configuration acl
show configuration policy
 
# afficher les policys configurées
show policy detail
 
# afficher les compteurs d'une policy (si elle compte les paquets
show access-list counter vlan "Default" ingress

Sources :

Stacking

Certains modèles sont stackable, jusqu'à 8 par pile. Cela permet de regrouper plusieurs équipements physiques en un équipement logique, administrable avec une seule et même adresse IP. Les ports seront numérotés selon la convention <slot#>:<port#> (par ex : le port 5 du slot 3 sera le 3:5). Dans chaque stack, un switch est master (c'est lui qui gère le stack) et au moins un autre est backup (il prendra le relais si le master tombe).

Pré-requis pour monter un stack : tous les switchs doivent avoir :

De plus les switchs élligibles pour devenir master (“master-capable”) doivent avoir le même niveau de licence (show licenses).

Infos en vrac :

Créer une pile

refs: Create a Stack With Summit Switches (gtacknowledge)

Depuis une conf usine, se logguer sur le port CONsole en “admin” sans mot de passe, et quitter l'assistant de configuration qui s'affiche (q).

Vérifier les prérequis : la version, la partition active et la licence doivent être les même sur chaque switch :

show licenses
show version images
show sys | grep Selected

Éteindre les switchs et brancher leurs interfaces de stack (ports 40G éventuellement disponibles via l'ajout d'une carte VIM insérée à l'arrière de X460G2, par exemple). Pour une numérotation propre, brancher le port stack 2 du slot 1 sur le port stack 1 du slot 2, puis le port stack 2 du slot 2 sur le port stack 1 du slot 3, etc… jusqu'au port stack 2 du dernier slot qu'il faut brancher sur le port stack 1 du slot 1.

  -- slot 1(1)
 /   slot 1(2)---slot 2(1)
 |               slot 2(2)---slot 3(1)
 \                           slot 3(2)
  \--------------------------------/

Ceci afin d'obtenir une topologie de stack en ring, qui supporte la coupure d'un lien, à la différence de la daisy-chain (branchement en cascade)

Démarrer chaque switch et activer le stacking ; puis redémarrer :

enable stacking-support
reboot

Vérification : une fois tous les slots redémarrés, on peut tous les voir avec show stacking.

Sur le master uniquement, lancer l'assistant de configuration :

enable stacking
 
Execute "configure stacking easy-setup" ? Y
Executing "configure stacking easy-setup" command...
For every node in the 4-node stack, this command will:
- enable stacking
- configure a stack MAC address
- choose and configure a slot number (this node will be assigned to slot 1)
- configure redundancy to minimal (slot 1 will be the master node)
- configure the stacking protocol to enhanced
Upon completion, the stack will automatically be rebooted into the new configuration.
Warning: If stacking is already configured, this command will alter that configuration.
Do you wish to proceed? (y/N)Y

Après un reboot automatique des tous les slots, on doit maintenant les retrouver avec la commande :

show stacking
Stack Topology is a Ring
Active Topology is a Ring
Node MAC Address    Slot  Stack State  Role     Flags
------------------  ----  -----------  -------  ---
*00:04:96:01:01:01  1     Active       Master   CA-
 00:04:96:02:02:02  2     Active       Backup   CA-
 00:04:96:03:03:03  3     Active       Standby  CA-

Commandes en vrac :

show slot
 
# affiche la topologie (daisy-chain ou ring), les @ MAC, numéros de slot et les rôles de chaque slot
show stacking
show stacking configuration
 
# affiche les ports utiliser pour monter le stack sur le switch sourant
show stacking-support
# Pour configurer le sports utilisés pour monter le stack :
#    native ce sont les ports des modules additionnel dédiés VIM ;
#    alternate ce sont des ports classiques convertis en stack-ports
configure stacking-support stack-ports all selection [ alternate | native ]
 
# redémarre tous les slots en commençant pas les slaves
reboot stack-topology
 
# afficher les firmwares installés sur chaque partition de chaque slot :
show version images
 
# pour re-numéroter le slot 5 (34:56) en 6
configure stacking node-address 00:04:96:12:34:56 slot-number 6
 
# permet d'activer ou désactiver la capacité des slots à être master ou pas
configure stacking slot 2 master-capability on|off
 
#
# pour démonter un stack :
#
# reset factory default
unconfigure switch
disable stacking
unconfigure stacking
Warning: This command will reset all stacking parameters to factory defaults on the specified node(s).
unconfigure stacking-support
 
# re-synchroniser un slot (5 ici) avec le master (cela le fera rebooter)
synchronize slot 5
# synchroniser le stack
synchronize stacking
 
# forcer une bascule master -> backup (vérifier qu'ils soient sync)
run failover
 
# afficher les infos sur les nodes
show node detail
Node Slot-1 information:
   Node State:    BACKUP
   Node Priority: 0
   Sw Health:     0
   Hw Health:     34
 
Node Slot-2 information:
   Node State:    MASTER
   Node Priority: 0
   Sw Health:     0
   Hw Health:     34
 
# afficher les infos sur les liens de stacking ; ici 4 liens 40G pour le stacking mode V320
debug hal show stacking ports
Stack Port Bundles
------------------
SPB 1: Type 5(80G), Status UP
  Member [0,101]  hg0: Configured <40G>, Operational <40G>
  Member [0,103]  hg2: Configured <40G>, Operational <40G>
SPB 2: Type 5(80G), Status UP
  Member [0,102]  hg1: Configured <40G>, Operational <40G>
  Member [0,104]  hg3: Configured <40G>, Operational <40G>

Ajouter un switch dans un stack existant

configure stacking-support stack-port all selection native
enable stacking
reboot
# (optionnel) pour renuméroter le slot :
configure stacking node-address <mac_node> slot-number <slot#>
configure stacking slot <slot#>
reboot slot <slot#>
synchronize slot <slot#>

Vérifications sur le master :

show stacking
show slot
show slot detail

Sortir un switch d'un stack

unconfigure stacking slot <#slot>
reboot slot <#slot>
show stacking stack-ports | grep Topology
Stack Topology is a Ring

Synchroniser les images d'un slot

Il peut arriver qu'une stack monte avec une image active sur des partitions différentes entre plusieurs slots ; par exemple :

show switch
[..]
Slot:             Slot-1 *                     Slot-2
                  ------------------------     ------------------------
Current State:    MASTER                       BACKUP (In Sync)
 
Image Selected:   primary                      secondary
Image Booted:     primary                      secondary
Primary ver:      30.7.1.1                     30.5.1.15
                  patch1-23
Secondary ver:    30.2.1.8                     30.7.1.1
                                               patch1-23

On voit que la version 30.7.1.1 est installé sur des partitions différentes : primaru sur le slot1 et secondary sur le slot 2. Cela fonctionne, mais les montées de versions génèrent une erreur : Error: active partitions must be the same across the stack. Pour corriger cela il faut installer l'image courante (30.7.1.1patch1-23) sur la partition primary du slot 2:

install image inactive slot 2
 This will overwrite the image installed on the secondary partition with the image installed on the primary partition.
 Do you want to proceed? (y/N) Yes
 Copying image to secondary partition... 100% complete.
 Image installed to the secondary partition successfully.

Puis définir cette partition comme active :

use image primary slot 2
 
# vérification:
show slot 2 detail | grep ary
     Image Selected:      primary
     Image Booted:        secondary
     Primary ver:         30.7.1.1
     Secondary ver:       30.7.1.1
 
# Puis, rebooter:
reboot
 
# après reboot:
show switch
[..]
Slot:             Slot-1 *                     Slot-2
                  ------------------------     ------------------------
Current State:    MASTER                       BACKUP
 
Image Selected:   primary                      primary
Image Booted:     primary                      primary
Primary ver:      30.7.1.1                     30.7.1.1
                  patch1-23                    patch1-23
Secondary ver:    30.2.1.8                     30.7.1.1
                                               patch1-23

Liens

Divers

Afficher les compteurs des ports de la stack :

show port stack-ports rxerrors no-refresh
show port stack-ports txerrors no-refresh

Se connecter à slot (5, dans l'exemple suivant) via un autre slot :

# se connecter sur le premier slot, puis lancer une session telnet interne :
telnet slot 5

Modifier l'adresse MAC d'un stack :

configure stacking node-address "00:04:96:00:11:22" mac-address

packet capture

Pour réaliser une capture des paquets qui remontent à la CPU (sniff / tcpdump-like)

# activer/désactiver la capture
debug packet capture on
debug packet capture off
 
# limiter la capture aux ports 2 et 3, et à 100 paquets
debug packet capture port 2-3 on count 100
 
# sauvegarde dans un fichier pcap, récupérable dans /usr/local/tmp
debug packet capture ports 2-3 on file-name <pcap-file> count 100
 
# limiter la capture sur le port 8, le vlan Default et à 100 paquets (alt.)
debug packet capture ports 8 on vlan Default cmd-args "-c 100"

Il est important de toujours désactiver la capture, quelque soit les options utilisées (même count).

Sources :

Routage

# Afficher la configuration IP :
show ipconfig
 
# Déclarer une route statique
config iproute add 10.1.8.x/24 10.1.10.1
 
# Déclarer la route par défaut
config iproute add default 10.1.1.1
 
# Activer le routage de VLAN
# NB : il faut activer le routage sur le VLAN ingress et egress (source et destination) :
# ou ne pas préciser de VLAN pour tous les router
enable ipforwarding [ vlan ingress ]
enable ipforwarding [ vlan egress ]
 
# Déclarer un "blackhole"/Null0, pour éviter les boucles avec les paquets reçus non gérés
# ne repartent par la route par défaut
configure iproute add blackhole 192.168.0.0/16

Diagnostique :

# résoudre une IP :
rtlookup 8.8.8.8
Ori  Destination        Gateway         Mtr  Flags         VLAN       Duration
#s   default            10.20.1.2      1    UG---S-um--f- Default    180d:22h:49m:26s

BGP

Le BGP n'est activé qu'à partir d'une licence Core.

Exemple de configuration BGP simple et exhaustive :

# création du VR dédié au BGP
create vr "VR-BGP" 
configure vr VR-Default del ports 15
configure vr VR-BGP add ports 15
# activation du BGP sur le VR-BGP
configure vr VR-BGP add protocol bgp
 
# on entre sur le VR pour le reste de la conf
vr VR-BGP
 
# création du VLAN d'interco avec le peer
create vlan "Vl-BGP" vr VR-BGP
configure vlan Vl-BGP description "interco BGP"
configure vlan Vl-BGP tag 6
configure vlan Vl-BGP add ports 15 untagged
configure vlan Vl-BGP ipaddress 10.55.6.93 255.255.255.254
enable ipforwarding vlan Vl-BGP
 
# création d'une interface de loopback
create vlan "lo0" vr VR-BGP
enable loopback-mode vlan lo0
configure vlan lo0 ipaddress 10.24.255.1 255.255.255.255
enable ipforwarding vlan lo0
configure bgp AS-number 64512
configure bgp routerid 10.24.255.1
# préfixes annoncés
configure bgp add network 10.24.255.1/32
# déclaration du peer
create bgp neighbor 10.55.6.92 remote-AS-number 64513
configure bgp neighbor 10.55.6.92 description "peer-BGP"
enable bgp neighbor 10.55.6.92
enable bgp

On peux ajouter une protection par mot de passe MD5 :

configure bgp neighbor 10.55.6.92 password encrypted "#$r7jd531s6df4s6f8ze+rENrdw=="

Ainsi qu'une route-map pour contrôler les annonces reçues :

edit policy BGP-in
 @description "routemap BGP in"
 # on ne permet que le préfixe 10.24.255.2/32
 entry lo0-BGP-den-face {
   if { nlri 10.24.255.2/32; }
   then { permit; }
 }
 entry deny_all {
   if { nlri 0.0.0.0/0; }
   then { deny; }
 }
 
# application de la routemap
configure bgp neighbor 10.55.6.92 route-policy in BGP-in

Après la MAJ d'une policy, pour qu'elle soit prise en compte :

check policy BGP-in.pol
refresh policy BGP-in
configure bgp soft-reconfiguration

Vérifications :

show vr
Virtual                               Number of    Number of    Flags       
Router                                VLANs        Ports                    
--------------------------------------------------------------------------------
VR-Default                                    4           32    bopri-ORS46 
VR-BGP                                        3            3    b-------U46 
# (Le flag "b" indique que le BGP est bien activé sur notre VR-BGP)
 
# (en se connectant sur le bon VR !)
ping <IP_du_peer>
show bgp
show bgp neighbor
show bgp routes all
show bgp routes detail all
 
show iproute origin bgp
 
# afficher les routes reçues/acceptées/rejetées depuis un pair et celles envoyées/supprimées vers un pair
show bgp neighbor 10.55.200.92 received-routes all
Routes:
     Destination         Peer                         Next-Hop        LPref Weight MED        AS-Path
------------------------------------------------------------------------------------------------------
*>i  10.143.6.8/29       10.55.200.92                 10.55.200.92   100   1      0          64200 64047 
*>i  10.143.8.0/29       10.55.200.92                 10.55.200.92   100   1      0          64200 65025 
*>i  10.204.255.2/32     10.55.200.92                 10.55.200.92   100   1      0          64200 65025 
*>i  10.204.255.3/32     10.55.200.92                 10.55.200.92   100   1      0          64200 64047 
*>i  10.55.200.94/31     10.55.200.92                 10.55.200.92   100   1      0          64200 65025 
*>?  10.55.200.254/31    10.55.200.92                 10.55.200.92   100   1      0          64200
 
show bgp neighbor 10.55.200.92 accepted-routes all
show bgp neighbor 10.55.200.92 rejected-routes all
!
show bgp neighbor 10.55.200.92 transmitted-routes all
Advertised Routes:
     Destination                        Next-Hop       LPref Weight MED        AS-Path
----------------------------------------------------------------------------------------
 >i  10.31.0.24/29                      10.55.200.93   0            0          64512 
 >i  10.204.241.1/32                    10.55.200.93   0            0          64512 
 >i  10.204.255.1/32                    10.55.200.93   0            0          64512
 
show bgp neighbor 10.55.200.92 suppressed-routes all

Suppression de la conf BGP

configure bgp delete network 10.24.255.1/32
delete bgp neighbor 10.55.6.92
# mais surtout :
configure bgp router-id 0.0.0.0
configure bgp AS-number 0

Tips

VRRP

# Configure VRRP
create vrrp Data vrid 1
config vrrp Data vrid 1 add 10.1.10.1
create vrrp vlan Voice vrid 2
config vrrp Voice vrid 2 add 2 10.1.20.1
enable vrrp
 
show vrrp

Scripts Python

Les EXOS interprètent les scripts Python depuis la v15.7 ; 2 scripts sont fournis de base pour aider au diagnostique :

On peut les exécuter avec la commande : run script ; par exemple run script mem-stats.py.

Tips

password recovery

src : https://gtacknowledge.extremenetworks.com/articles/How_To/How-to-Recover-A-Switch-And-Its-Configuration-Without-The-Password/

config none
reboot
vi autoexec.xsf
create account admin toto titi

→ ce fichier, “autoexec.xsf”, sera exécuté automatiquement au prochain boot. Il créera un administrateur “toto”.

configure account admin <NEW_PWD>
save
reboot
delete account toto
save

Bootreplay

~ip-helper DHCP ; permet de router des paquets DHCP vers un serveur sur un autre réseau.

# enable bootprelay for every VLAN
enable bootprelay
# or just for the upstream and downstream VLANs
enable bootprelay vlan data
enable bootprelay vlan backbone
# either way, add the IP address of the DHCP server
config bootprelay add 10.1.30.254
# To disable BOOTP relay on one or more VLANs, use the following command:
disable bootprelay vlan data
# To see the bootprelay configuration and statistics
show bootprelay

MAC-tracking

Cas d'étude : problème de performance sur un switch.

Pour voir les modules consommant de la mémoire :

debug hal show sys-health-check
[..]
<Erro:Kern.Card.Error> Slot-6: async queue is growing (900000) type is 704536, customType is 24
<Erro:Kern.Card.Error> Slot-6: async queue is growing (800000) type is 245785, customType is 25

Custom type 24 et 25 sont des suppressions et ajouts dans la FDB (table d'adresses MAC par port).

C'est donc un problème d'adresse mac qui apparait sur différents ports ; pour activer le tracking d'adresses MAC afin de diagnostiquer le flapping :

configure fdb mac-tracking ports all
configure log filter "DefaultFilter" add events FDB.MACTracking.MACMove
 
# et éventuellement
configure log filter "DefaultFilter" add events FDB.MACTracking.MACAdd
configure log filter "DefaultFilter" add events FDB.MACTracking.MACDel

Pour trouver les adresses MAC et les ports, voir les logs :

show log messages memory-buffer

Pour info, on peut aussi activer les TRAP SNMP (mais attention au flood !) pour récupérer les infos sur un serveur externe :

enable snmp traps fdb mac-tracking

Une fois trouvée la source du problème (l'adresse MAC qui change de port régulièrement) il faut penser à désactiver le mac tracking car cela consomme des ressources :

configure log filter "DefaultFilter" del events FDB.MACTracking.MACMove
configure fdb mac-tracking delete ports all

source

Bloqué en "Pending AAA"

Un switch peut être bloqué au boot , avec le message Pending AAA… affiché sur la console. Plusieurs erreurs peuvent provoquer ce problème, dont notamment un problème de licence :

show stacking configuration
[blabla]
Node               Slot         Alternate          Alternate      
MAC Address        Cfg Cur Prio Mgmt IP / Mask     Gateway         Flags     Lic
*00:04:96:00:00:01 1   1   Auto <none>             <none>          CcEeMm-Nn --
 00:04:96:00:00:02 2   2   Auto <none>             <none>          CcEeMm-Nn --
 00:04:96:00:00:03 3   3   Auto <none>             <none>          CcEeMm-Nn --
 00:04:96:00:00:04 4   4   Auto <none>             <none>          CcEeMm-Nn Ee

Dans la commande suivante on voit que le dernier switch (slot 4) possède une licence Edge alors que les autres n'en ont pas (et, de fait, bénéficient d'une Adv. Edge supérieure). Pour corriger cela il faut supprimer le licence du slot 4 :

unconfigure stacking license-level slot 4
reboot slot 4

MAC 00-E0-2B-00-00-01 moved

Sur certains switch il est possible de surveiller et remonter les adresses MAC changeant de port, c'est le cas des châssis S4 par exemple. Cela permet de mettre en lumière des problèmes les problèmes de configuration sur le réseau (STP, agrégats, etc…).

Dans le cas de l'adresse MAC 00:e0:2b:00:00:01, par exemple :

AddrNtfy[2]MAC: 00-E0-2B-00-00-01 moved to port lag.0.1, FID 1#015
AddrNtfy[2]MAC: 00-E0-2B-00-00-01 moved to port tg.2.8, FID 1#015

D'après le GTAC c'est un problème connu lié à l'implémentation du protocole EDP (Extreme Discovery Protocol) sur les switchs EXOS : à l'instar du CDP et LLDP, celui-ci permet de découvrir le réseau et les switchs voisins, mais utilise la même adresse MAC source pour tous les switchs ! Il suffit donc d'avoir plusieurs EXOS sur son réseau pour avoir du flapping avec cette adresse MAC.

Pour résoudre le problème, il faut désactiver le protocole en mousse, activé par défaut sur les EXOS :

disable edp port all

BOOTPrelay

Comme chez Cisco & consorts, il est possible de relayer les paquets broadcastés sur un réseau (VLAN) vers une adresse IP unicast située sur un autre réseau (VLAN). C'est nécessaire en DHCP/BOOTP par exemple, si le serveur DHCPd est centralisé et adresse plusieurs réseaux clients. Chez Cisco/Enterasys cette fonctionnalité est nommée ip helper address, chez Extreme (EXOS) c'est bootprelay.

configure bootprelay add 10.0.0.1 [ vr VR-Default ]
enable bootprelay ipv4 vlan LAN-clients
enable bootprelay ipv4 vlan ico-vers-DHCPd

NB : à noter qu'il faut activer le bootprelay à la fois que le VLAN ingress (côté clients) et egress (côté serveur DHCP), même si le serveur DHCP n'est adressé dans un VLAN directement connecté sur ce routeur. NB2 : bien sûr puisque cela implique du routage, cela n'est possible qu'en activant l' ipforward (le routage quoi) sur VLANs sus-cités. En gros :

enable ipforwarding vlan LAN-clients
enable ipforwarding vlan ico-vers-DHCPd
 
# le serveur DHCPd doit être joignable également
rtlookup 10.0.0.1
Ori  Destination        Gateway         Mtr  Flags         VLAN             Duration
#s   default            10.20.1.2      1    UG---S-um--f- ico-vers-DHCPd    181d:0h:6m:52s

Conduit error

Lorsqu'une stack rencontre des problèmes de communication entre slots, il génère des messages de type : Conduit receive error encountered, ou <Warn:HAL.Card.Warning> pibConduitMasterRcvOneSlot(): failed [..]. Cela vient souvent d'un problème de câblage inter-slots, et peut produite des reboots forcés. On peut vérifier les erreurs des ports de stack avec les commandes :

show ports stack-ports txerrors no-refresh
Port Tx Error Monitor
Port      Link      Tx          Tx          Tx          Tx       Tx       Tx
          State     Coll        Late coll   Deferred    Errors   Lost     Parity
================================================================================
1:1       A         0            0           0         0         0         0
1:2       A         0            0           0         0         0         0
2:1       A         0            0           0         0         0         0
2:2       A         0            0           0         0         0         0
================================================================================
!
show ports stack-ports rxerrors no-refresh
Port Rx Error Monitor
Port      Link     Rx      Rx      Rx        Rx      Rx         Rx         Rx
          State    Crc    Over    Under     Frag    Jabber      Align      Lost
================================================================================
1:1       A        0       0        0        0        0          0          0
1:2       A        0       0        0        0        0          0          0
2:1       A        0       0        0        0        0          0          0
2:2       A        0       0        0        0        0          0          0
================================================================================
          Link State: A-Active, R-Ready, NP-Port Not Present L-Loopback

Ici, tout va bien.

src: Switch in Summit Stack Failed with Conduit Receive Error

Ressources