Tous les articles par pierre

Mise en place d’un gestionnaire de paquet centralisé (NEXUS)

Construction du gestionnaire avec Docker

Nous allons installer NEXUS via Docker. Il faut donc connaître un peu Docker, avoir installé les outils nécessaires. Nous les verrons au fur et à mesure.

De base, NEXUS n’est pas pas packagé avec la gestion des paquets pour les distribution se basant sur débian (apt). Il existe un plugin nexus-repository-apt. Attention, le plugin n’est pas supporté par NEXUS, prenez vos responsabilités. Le conteneur contenant le plugin apt se sert du conteneur de base pour ajouter le plugin.

Il va falloir construire le conteneur à partir des sources sur github.

Pour cela, se placer à l’endroit désiré:

cd /home/pierre/Documents

Cloner le dépot officiel du plugin nexus-repository-apt, n’oubliez pas la ligne 2

git clone https://github.com/sonatype-nexus-community/nexus-repository-apt.git
cd nexus-repository-apt/

Se placer sur le bon tag, le master n’est pas nécessairement celui que vous voullez

git checkout UpdateToThreeDotFourteen

Lancer le build, n’oubliez pas le point à la fin de la ligne

docker build -t nexus-repository-apt:3.14.0 .
  • nexus-repository-apt correspond au nom du conteneur construit localement
  • 3.14.0 correspond à la version

Lancer le conteneur

Directement via ligne de commande

docker run -d -p 8081:8081 --name nexus -v /media/raid5/nexus-data:/nexus-data nexus-repository-apt:3.14.0
  • -d, faire tourner le docker en tant que daemon
  • -p 8081:8081, mappe le port 8081 de l’hôte au port 8081 dans le conteneur
  • --name nexus, nom du conteneur
  • -v /media/raid5/nexus-data:/nexus-data, mappe le répertoire /media/raid5/nexus-data de l’hôte au répertoire/nexus-data du conteneur. Docker se débrouille pour créer et monter le répertoire dans le conteneur. Nous faisons cela pour la persistance des données
  • nexus-repository-apt:3.14.0 nexus-repository-apt correspond au nom du conteneur construit localement, 3.14.0, correspond à la version

Vérifier que tous fonctionne bien:

docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
36be3444152e        nexus-repository-apt:3.14.0   "sh -c ${SONATYPE_DI…"   4 weeks ago         Up 4 weeks          0.0.0.0:8081->8081/tcp   nexus

Connectez-vous à votre gestionnaire de dépôt:

localhost:8081 ou ip-hote:8081

Via SystemD

Créer un service nexus à l’aide du fichier suivant (/etc/systemd/system/nexus.service)


[Unit]
Description=nexus docker service
After=syslog.target docker.service

[Service]
ExecStartPre=-/usr/bin/docker kill nexus
ExecStartPre=-/usr/bin/docker rm nexus
ExecStart=/usr/bin/docker run \
  --name nexus \
  --publish 8081:8081 \
  --volume /media/raid5/nexus-data:/nexus-data \
  nexus-repository-apt:3.14.0
ExecStop=-/usr/bin/docker stop nexus
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  • ExecStartPre, commande à lancer avant le start
  • --name, nom du conteneur, il doit être unique
  • --publish, mappage du port 8081 au port 8081 du conteneur, seul port ouvert du conteneur
  • --volume, mappe le répertoire /media/raid5/nexus-data de l’hôte au répertoire/nexus-data du conteneur. Docker se débrouille pour créer et monter le répertoire dans le conteneur. Nous faisons cela pour la persistance des données

Mise à jour de SystemD avec le nouveau service


systemctl daemon-reload

Permettre au service de démarrer lors du démarrage de la VM ou du PC


systemctl enable nexus.service

Mise à disposition derrière Apache

Créer le fichier de configuration d’Apache:

nano /etc/apache2/sites-available/exemple.com.conf

Contenu du fichier:

Protocols http/1.1
<VirtualHost *:80>
 ServerAdmin contact@exemple.com
 ServerName exemple.com
 Redirect permanent / https://exemple.com/
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
<virtualhost>

<virtualhost *:443="">
 ServerAdmin contact@exemple.com
 ServerName exemple.com
 Protocols h2 http/1.1

 ErrorLog ${APACHE_LOG_DIR}/error_ssl.log
 CustomLog ${APACHE_LOG_DIR}/access_ssl.log common
 LogLevel warn

 SSLEngine on
 SSLProtocol all -SSLv2 -SSLv3
 SSLHonorCipherOrder on
 SSLCertificateFile /etc/letsencrypt/live/exemple.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/exemple.com/privkey.pem

 AllowEncodedSlashes NoDecode
 RequestHeader set X-Forwarded-Proto "https"
 ProxyPass / http://p-nexus:8081/ nocanon
 ProxyPassReverse / http://p-nexus:8081/
<virtualhost>
  • ServerName, nom du serveur sur internet ou dans votre réseau
  • Redirect permanent met en place une redirection permanente sur une connexion sécurisé
  • Protocols définit les protocoles disponible, nous indiquons ici que nous préférons utiliser http2

Voila, nexus est fonctionnel.

PS: une fois le conteneur monté, il faut attendre un peu que Nexus démarre. Ca prend un peu de temps, entre une minute pour un Nexus vierge à 20 minutes pour un Nexus avec des données

Commande Linux en vrac

Taille d’un répertoire:

du -hs /media/raid5/
2,3T	/media/raid5/

Chercher du texte dans les fichiers d’un répertoire:

grep -rnw '/repertoire/de/recherche/du/texte' -e 'texte recherché'
  • -r or -R Recherche récursive,
  • -i ignore la casse
  • -n indique le numéro de ligne dans le fichier trouvé
  • -w pour chercher le mot entier.
  • -l (petit L) pour donner uniquement le nom des fichiers trouvés
  • --include=\*.{c,h} uniquement les fichiers .c et .h
  • --exclude=*.o exclure les fichiers .o
  • --exclude-dir={dir1,dir2,*.dst} exclut le repertoire dir1, dir2 et tous les répertoires répondant au regex *.dst

source: https://stackoverflow.com/questions/16956810/how-do-i-find-all-files-containing-specific-text-on-linux

Historique des cron

grep CRON /var/log/syslog
Jun 13 07:17:01 hostname CRON[11824]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun 13 08:17:01 hostname CRON[11900]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun 13 09:17:01 hostname CRON[11977]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun 13 10:17:01 hostname CRON[13108]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun 13 10:30:01 hostname CRON[13483]: (root) CMD (docker exec --user www-data nc php -f /var/www/html/cron.php)
Jun 13 10:45:01 hostname CRON[14134]: (root) CMD (docker exec --user www-data nc php -f /var/www/html/cron.php)
Jun 13 11:00:01 hostname CRON[15160]: (root) CMD (docker exec --user www-data nc php -f /var/www/html/cron.php)
Jun 13 11:17:01 hostname CRON[15439]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Ou se trouve une commande

whereis docker
docker: /usr/bin/docker /etc/docker /usr/share/man/man1/docker.1.gz

type -a docker
docker est /usr/bin/docker

Libérer un disque exécutant des services pour le démonter

A exécuter en root
umount /media/raid5 
umount: /media/raid5: la cible est active.

fuser -kimuv /media/raid5/
                     UTIL.       PID ACCÈS  COMMANDE
/media/raid5:        root     kernel mount (root)/media/raid5
                     root       1059 ..c.. (root)in.tftpd
Tuer le processus 1059 ? (y/N) y

umount /media/raid5 

redirection de port avec ssh

Vous êtes loin de vos serveur.
Vous désirez vous connecter à une ressource (hors ligne) de votre serveur exemple.fr
Nous allons utilisé un tunnel ssh

ressource désirée => https://exemple.fr:8443/maxview/manager/login.xhtml

La commande SSH à taper est la suivante:

ssh -L 8000:localhost:8443 exemple.fr -p 10145

-p 10145 correspond au port ssh d’écoute du serveur exemple.fr
-L 8000 port local redirigé ver le port 8443 du serveur

Dans votre navigateur, lancer http://localhost:8000/maxview/manager/login.xhtml

installer WordPress sous Debian

WordPress est à la base un moteur de blog qui s’est enrichi pour devenir un système de gestion de contenu (CMS).

Nous allons installer WordPress dans une Debian 7 (Wheezy). Pour faciliter la rédaction de mon document, nous réaliserons toutes les étapes en ligne de comande dans un terminal administrateur.

Prérequi WordPress

WordPress a besoin de:

  • Un Serveur HTTP, nous utiliserons Apache
  • Un serveur de base de donnée, nous utiliserons MySQL
  • PHP (language de programation pour produire des pages webs dynamiques

Apache

Normallement, si vous avez, lors de votre installation de Debian, coché la case d’installation du serveur HTTP, Apache devrait déjà être installé. Pour vérifier, lancer la commande apt-get update pour faire une mise à jour de l’état d’installation des packets, puis lancer aptitude search ‘apache2‘. Vous obtiendrez quelque chose comme ceci.

# aptitude search 'apache2'
i   apache2                                                      - Métapaquet pour le serveur HTTP Apache
p   apache2-dbg                                                  - symboles de débogage pour Apache
p   apache2-doc                                                  - Documentation du serveur HTTP Apache
v   apache2-mpm                                                  - 
p   apache2-mpm-event                                            - serveur HTTP Apache - modèle géré par événements
p   apache2-mpm-itk                                              - MPM multiutilisateur pour Apache&amp;amp;amp;nbsp;2.2
p   apache2-mpm-prefork                                          - serveur HTTP Apache - modèle traditionnel «&amp;amp;amp;nbsp;non-threaded&amp;amp;amp;nbsp;»
i A apache2-mpm-worker                                           - serveur HTTP Apache - modèle multi-processus
p   apache2-prefork-dev                                          - en-têtes de développement Apache - MPM sans fils d'exécution
p   apache2-suexec                                               - programme standard suexec pour le mod suexec d'Apache&amp;amp;amp;nbsp;2
p   apache2-suexec-custom                                        - programme suexec configurable pour mod_suexec de Apache&amp;amp;amp;nbsp;2
p   apache2-threaded-dev                                         - en-têtes de développement Apache - MPM avec fils d'exécution
i A apache2-utils                                                - programmes utilitaires pour serveurs web
i A apache2.2-bin                                                - fichiers binaires communs pour le serveur HTTP Apache
i A apache2.2-common                                             - serveur HTTP Apache (fichiers communs)
p   libapache2-authcassimple-perl                                - Apache2 module to authentificate trough a CAS server
....
p   libapache2-webauth                                           - Apache 2 modules for WebAuth authentication
p   libapache2-webkdc                                            - Apache 2 modules for a WebAuth authentication KDC
p   rt4-apache2                                                  - Apache 2 specific files for request-tracker4
p   torrus-apache2                                               - Universal front-end for Round-Robin Databases (for apache 2.x) (depreca

Si Apache est installé, vous devriez avoir un petit « i » en début de ligne avant ‘apache2‘. Donc pas besoin d’aller plus loin pour l’instant.

Si ce n’est pas le cas, lancer la commande:

#apt-get install apache2

C’est tout pour apache.

MySQL

Normallement, si vous avez, lors de votre installation de Debian, coché la case d’installation du serveur de base de données, ‘MysQL-Server’ devrait déjà être installé. Pour vérifier, lancer la commande apt-get update pour faire une mise à jour de l’état d’installation des packets, puis lancer aptitude search ‘mysql-server‘. Vous obtiendrez quelque chose comme ceci.

# aptitude search 'mysql-server'
p   mysql-server                                                 - MySQL database server (metapackage depending on the latest version)
p   mysql-server-5.5                                             - serveur de bases de données MySQL - binaires et configuration
v   mysql-server-core                                            - 
p   mysql-server-core-5.5                                        - binaires du serveur de bases de données MySQL
v   virtual-mysql-server                                         - 

Ici, nous voyons que le serveur MySQL n’est pas installé, indiqué par le ‘p‘ devant ‘mysql-server‘. Nous allons donc l’installer. Si chez vous, ‘mysql-server‘ est déjà installé, ne pas exécuter la commande d’installation suivante.

#apt-get install mysql-server

Pendant le processus d’installation, il va vous être demandé de compléter certainne information. Je vais mettre des copies d’écran pour vous accompagner dans le processus d’installation.

La première information demandée est le mot de passe administrateur de MySQL. Faire en sorte de bien le définir et ne pas le perdre.

MysqlServer

Valider et retaper le mot de passe administrateur pour vérifier qu’il n’y a pas eu d’erreur de frappe.

MySQLServeurConfirmationA la fin de l’installation de MySQL, si tout s’est bien passé, vous devriez obtenir ceci.

[ ok ] Starting MySQL database server: mysqld ..
[info] Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly..
Paramétrage de libhtml-template-perl (2.91-1) ...
Paramétrage de mysql-server (5.5.38-0+wheezy1) ...

PHP

Php n’est pas sistématiquement installé. Pour vérifier, taper la commande que vous commencez à connaître: aptitude search ‘php5*’. Cela donne quelque chose comme ca:

# aptitude search 'php5*'
p   cakephp                                                      - MVC rapid application development framework for PHP
p   cakephp-instaweb                                             - Development webserver for CakePHP applications
....
p   php5                                                         - langage de script côté serveur, inclus dans du HTML (méta-paquet)
....
v   php5-mssql                                                   - 
p   php5-mysql                                                   - modules MySQL pour PHP5
p   php5-mysqlnd                                                 - MySQL module for php5 (Native Driver)
....
p   suphp-common                                                 - Common files for mod suphp
p   uphpmvault                                                   - upload recovery images to HP MediaVault2 via Ethernet

Les lignes, qui nous intéressent, sont php5 et php5-mysql. Elles doivent être installé (petit ‘i‘ au début de la ligne). Si ce n’est pas le cas, installer ces deux packets:

#apt-get install php5 php5-mysql

Voila! C’est tout pour les prérequis. Nous allons maintenant installer WordPress.

Worpess

installation de WordPress

Au jour d’aujourd’hui (18-01-2015), la version courante de WordPress est la version 4.1. Nous allons la télécharger, la décompresser, préparer la base de donnée et l’installer.

Téléchargement de WordPress

Lancer la commande suivante

#wget https://fr.wordpress.org/wordpress-4.1-fr_FR.zip

Pour vérifier que le fichier est bien téléchargé, lancer:

# ls -l
total 6896
-rw-r--r-- 1 user user      65 oct.   6 22:06 bash_profile
-rw-r--r-- 1 user user      61 oct.   6 00:08 bash_profile~
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Bureau
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Documents
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Images
drwxrwxr-x 3 user user    4096 oct.   6 21:44 lorrainng
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Modèles
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Musique
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Public
drwxr-xr-x 4 user user    4096 oct.  11 12:48 Téléchargements
drwxr-xr-x 2 user user    4096 oct.   2 22:52 Vidéos
-rw-r--r-- 1 root   root   7016086 sept.  4 19:05 wordpress-4.1-fr_FR.zip

Le fichier ‘wordpress-4.1-fr_FR.zip’ est bien présent. Nous pouvons continuer.

Si vous voullez télécharger la dernière version directement, aller sur le site de wordpress france et passer la sourie sur le bouton de téléchargement, cliquer droit et selectionner ‘copier l’adresse du lien‘. Puis télécharger cette dernière version en tapant:

#wget 'adresse du lien collée ici'

Décompression et autorisation de WordPress

Nous décompresserons WordPress dans le répertoire /var/www/ et lui donnerons les bonnes autorisations.

#unzip wordpress-4.1-fr_FR.zip -d /var/www

Changer le groupe des répertoires et fichier dans wordpress.

#chgrp -R www-data /var/www/

Pour pouvoir installer des modules, charger des images, faire des mises à jour, il faut changer les autorisations d’écriture du répertoire ‘wp-content‘ dans le répertoire d’installation de WordPress.

#chmod 2775 -R /var/www/wordpress/wp-content/

Préparation de la base de donnée

WordPress lors de l’installation ne crée pas la base de donnée qu’il va utiliser. Il faut donc la créer manuellement, ainsi que l’utilisateur qui va être autorisé à s’y connecter et faire les modifications nécessaires.

Lancer le client mysql en tant que root (-u = définit l’utilisateur, -p demande le mot de passe):

# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.5.38-0+wheezy1 (Debian)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Creation de la base de donnée ‘wordpress

mysql> CREATE DATABASE wordpress  DEFAULT CHARACTER SET utf8   DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

Création de l’utilisateur (wpdb) et attribution des droits sur la base de donnée (wordpress)

mysql> grant all privileges on wordpress.* to wpdb identified by 'password';
Query OK, 0 rows affected (0.00 sec)

Normallement, c’est bon. Nous allons tout de même vérifier que la connection à Mysql pour la base de donnée wordpress se fait bien. Quitons le client mysql pour nous reconnecter en tant que wpdb. Nous quitterons de nouveau le client MySQL pour revenir dans le shell.

mysql> exit
Bye
root@machine:/home/user# mysql -u wpdb -p wordpress
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.5.38-0+wheezy1 (Debian)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit

La base de donnée est prête, les droits sont données, nous allons maintenant réaliser l’installation de WordPress.

Installation de WordPress

wp-config.php

Pour faire au plus rapide, nous allons d’abord copier le fichier wp-config-sample.php vers wp-config.php et donner les droits en écriture.

#cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
#chown root:www-data /var/www/wordpress/wp-config.php
#chmod 2755 /var/www/wordpress/wp-config.php

Nous allons maintenant modifier le fichier pour nos besoins.

PS: navigation dans nano => avec les flèches du clavier. Possibilité de coller du texte en placant le curseur au préalable à l’endroit désiré.

#nano /var/www/wordpress/wp-config.php

Chercher les lignes suivante:

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** //
/** Nom de la base de données de WordPress. */
define('DB_NAME', 'votre_nom_de_bdd');

/** Utilisateur de la base de données MySQL. */
define('DB_USER', 'votre_utilisateur_de_bdd');

/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', 'votre_mdp_de_bdd');

/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');

/** Jeu de caractères à utiliser par la base de données lors de la création des tables. */
define('DB_CHARSET', 'utf8');

/** Type de collation de la base de données. 
  * N'y touchez que si vous savez ce que vous faites. 
  */
define('DB_COLLATE', '');

et sles modifier en:

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** //
/** Nom de la base de données de WordPress. */
define('DB_NAME', 'wordpress');

/** Utilisateur de la base de données MySQL. */
define('DB_USER', 'wpdb');

/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', 'password');

/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');

/** Jeu de caractères à utiliser par la base de données lors de la création des tables. */
define('DB_CHARSET', 'utf8');

/** Type de collation de la base de données. 
  * N'y touchez que si vous savez ce que vous faites. 
  */
define('DB_COLLATE', '');

Tout en restant dans nano, il faut aussi modifier les données suivantes dans le même fichier:

Supprimer les lignes suivantes:

define('AUTH_KEY',         'put your unique phrase here'); 
define('SECURE_AUTH_KEY',  'put your unique phrase here'); 
define('LOGGED_IN_KEY',    'put your unique phrase here'); 
define('NONCE_KEY',        'put your unique phrase here'); 
define('AUTH_SALT',        'put your unique phrase here'); 
define('SECURE_AUTH_SALT', 'put your unique phrase here'); 
define('LOGGED_IN_SALT',   'put your unique phrase here'); 
define('NONCE_SALT',       'put your unique phrase here'); 

et les remplacer par les lignes générées dans le lien indiqué dans le commantaire juste au dessus des lignes à modifier (à la date du 11/10/14, https://api.wordpress.org/secret-key/1.1/salt/):

saltEnregistrer le fichier avec la combinaison des touches CTRL + O et quitter nano avec CTRL + x.

Voila, nous sommes prêt à lancer l’installation.

Installation de WordPress

Pour ce faire, allé dans votre navigateur préféré et taper l’adresse suivante: localhost/wordpress/wp-admin/install.php. Vous devriez avoir la page suivante.

WordpressInstallRemplir ce qu’il faut et valider. Vous obtiendrez la page suivante:

Cliquer sur connexion.

SuccesInstallWordpressVoila! c’est fini et installé.

 

 

Failover Vpn site à site (GRE + IPSec)

Ce document fournit une configuration pour les tunnels IPsec entre deux routeurs Cisco placés dans 2 sites distincts, entre deux réseaux locaux (lien site à site). Les configurations se feront sur des routeurs C892FSP-K9, avec comme rom, la c800-universalk9-mz.SPA.152-4.M6.bin. J’ai choisi de garder les box pour bénéficier des autres services fournis (TV et téléphone), cela influera un peu sur la configuration.

Pour bien comprendre ce que nous allons faire, voici la topologie du réseau:

Topologie reseau

Du côté Free, le routeur aura pour nom, Routeur2 et du côté Bouygues-SFR, le routeur aura pour nom Routeur1.

Le but du VPN est de faire en sorte que les 2 sites communiquent exactement comme si ils étaient directement reliés entre eux, de manière à ce que les 2 réseaux puissent êtres directement routés (et non passer par du NAT).

Voici donc à quoi ressemblera là topologie du réseau final:

Topologie reseau idealise 001La liaison directe entre les 2 routeurs se fera via les 2 réseaux (172.16.1.0/30 => SFR et 172 .16.2.0/30 => Bouygues). Ils symbolisent les liens que nous souhaitons créer avec les VPNs.

La mise en place des VPNs se fera en 3 phases:

  • Mise en place des Tunnels (GRE) entre les 2 sites (définition des interfaces virtuelles)
  • Mise en place du routage entre les 2 Réseaux locaux
  • Cryptage des tunnels.

Configuration des interfaces

Pas de difficulté particulière. Je le mets pour information.

Réseau1:

Nous allons d’abord configurer les interfaces Gi8, Gi9, Vlan1:


>en
#conf t
(config)#interface gi9
(config-if)#Description Lien secondaire Bouygues
(config-if)#ip address 192.168.2.100
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface gi8
(config-if)#Description Lien primaire SFR
(config-if)#ip address 192.168.1.100
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface vlan1
(config-if)#Description Reseau local
(config-if)#ip address 192.168.100.254
(config-if)#ip nat inside
(config-if)#exit
(config)#

Configurons maintenant les tunnels, interfaces virtuel tunnel 0 et 1:


>en
#conf t
(config)#interface Tunnel0
(config-if)#Description Lien Tunnel SFR
(config-if)#ip address 172.16.0.1 255.255.255.252
(config-if)#tunnel source 192.168.1.100
(config-if)#tunnel destination 78.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

(config)#interface Tunnel1
(config-if)#Description Lien Tunnel Bouygues
(config-if)#ip address 172.16.1.1 255.255.255.252
(config-if)#tunnel source 192.168.2.100
(config-if)#tunnel destination 78.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

La configuration d’un tunnel se fait de la même manière que pour une interface normale. Il faut seulement définir la source du tunnel (ip wan du routeur, ici 192.168.1.100 et 192.168.2.100) et la destination (l’adresse ip publique du site au bout du tunnel, ici 78.0.0.1).

Attention, les commandes « tunnel source » et « tunnel destination » fonctionneront uniquement dans des interfaces de type « interface tunnel x« .
Attention, nous sommes dans le réseau qui a 2 liens vers internet, nous connectons le réseau via 2 tunnels à 1 seul site distant. Donc 2 tunnels avec deux sources et une seul destination.

Réseau2:

Nous allons configurer les interfaces Gi9 et Vlan1:


>en
#conf t
(config)#interface gi9
(config-if)#Description Lien vers Internet
(config-if)#ip address 192.168.10.200
(config-if)#ip nat outside
(config-if)#exit
(config)#

(config)#interface vlan1
(config-if)#ip address 192.168.200.254
(config-if)#ip nat inside
(config-if)#exit
(config)#

Configurons maintenant les interfaces virtuel tunnel 0 et 1:

Ici, nous faisons l’inverse. Nous allons paramétrer 2 tunnels avec 1 source et 2 destinations.


>en
#conf t
(config)#interface Tunnel0
(config-if)#Description Lien Tunnel SFR
(config-if)#ip address 172.16.0.2 255.255.255.252
(config-if)#tunnel source 192.168.10.200
(config-if)#tunnel destination 109.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

(config)#interface Tunnel1
(config-if)#Description Lien Tunnel Bouygues
(config-if)#ip address 172.16.1.2 255.255.255.252
(config-if)#tunnel source 192.168.10.200
(config-if)#tunnel destination 128.0.0.1
(config-if)#ip nat inside
(config-if)#exit
(config)#

Routage et accès à internet

Les interfaces sont configurées, mais pour l’instant, rien ne communique avec rien. Du fait que les routeurs sont derrières des box, les ip sur les interfaces WAN (Gi8 / Gi9) sont des ip locales non routables. Il faut donc mettre en place du nat pour que les machines derrière le routeur puissent accéder à internet. Nous allons voir ça maintenant.

Nat sur le réseau 1

Pourquoi nonat (pas de nat)? Parceque le trafique qui doit passer dans les tunnels ne doit pas être naté. Nous nous en assurerons en définissant les « deny« . Tout ce qui est « permit » sera autorisé et naté (ici, l’acces à internet), le reste ne sera pas autorisé car à la fin d’une access list, il y a toujour un deny implicit.

Définition de l’access list SFR-nonat :


>en
#conf t
(config)#ip access-list extended SFR-nonat
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Le « deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255 » permet d’interdire le trafic pour les machines à destionation du réseau 192.168.200.0/24. Ce trafic passera par les tunnels et donc ne doit pas être autorisé sur cette interface. Cela revient à dire qu’il ne faut pas que le trafic soit natter.
Idem pour « deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255« .

Le « permit ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255 » permet au réseau 2 (192.168.200.0/24) d’être natter pour avoir accès à la box SFR (192.168.1.1)
Le « permit ip 192.168.100.0 0.0.0.255 any » met en place le NAT pour le Vlan1 pour l’accès à internet.

Définition de l’access list Bouygues-nonat :


>en
#conf t
(config)#ip access-list extended Bouygues-nonat
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.200.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 192.168.2.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Le principe reste le même que pour l’access list SFR-nonat.

Activation du nat sur chaque interface :


>en
#conf t
(config)# ip nat inside source list SFR-nonat interface gi8 overload
(config)# ip nat inside source list Bouygues-nonat interface gi9 overload

Maintenant, nous allons mettre en place le failover et les routes qui vont biens.

Nat sur le réseau 2

Définition de l’access list Free-nonat :


>en
#conf t
(config)#ip access-list extended Free-nonat
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.100.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.1.0 0.0.0.255
(config-ext-nacl)#deny ip 192.168.200.0 0.0.0.255 192.168.2.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.100.0 0.0.0.255 192.168.10.0 0.0.0.255
(config-ext-nacl)#permit ip 192.168.200.0 0.0.0.255 any
(config-ext-nacl)#exit
(config)#

Activation du nat :


>en
#conf t
(config)# ip nat inside source list Free-nonat interface gi9 overload

Failover (Uniquement sur le réseau 1)

Nous allons utiliser IPSla pour réaliser le failover. IPSla va permettre de pinger une ip et en fonction du résultat, activera ou désactivera la route. Pour plus de détail, voir l’article que j’ai réaliser: Cliquer ici

IPSla pour le réseau 1 (nous ne configurerons que celui-ci):

ip sla 1
icmp-echo 8.8.8.8 source-interface GigabitEthernet8
frequency 5
ip sla schedule 1 life forever start-time now
!
track 1 ip sla 1
!
ip route 8.8.8.8 255.255.255.255 192.168.1.1

Routage

Réseau 1:


>en
#conf t
(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2

ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1 = route par défaut tant que le track 1 sera bon (OK)
ip route 0.0.0.0 0.0.0.0 192.168.2.254 2 = si le track 1 est KO, la route par défaut disparait et celle-ci, pondérée par le 2 à la fin de la ligne, deviendra la route pour l’acces à Internet. L’instance (le 2) à la fin de la ligne définit la priorité.

Avec le changement de route vers internet, le tunnel changera.

Réseau 2:


>en
#conf t
(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.254

Rien de bien difficile.

Juqu’ici, nous avons configuré les interfaces, les tunnels, les routes et le failover. Avant de commencer à mettre en place le cryptage sur les tunnels, nous allons d’abord tester que ceux-ci sont fonctionnels et que le basculement entre les deux tunnels fonctionne.

Vérification des tunnels et du failover

Tout est déjà configuré et la route par défaut passe par SFR.


routeur1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 192.168.1.1

Regardons l’état de nos interfaces:


routeur1#show ip interface brief 
Interface                  IP-Address      OK? Method Status                Protocol
GigabitEthernet0           unassigned      YES unset  up                    up
GigabitEthernet1           unassigned      YES unset  down                  down    
GigabitEthernet2           unassigned      YES unset  down                  down    
GigabitEthernet3           unassigned      YES unset  down                  down    
GigabitEthernet4           unassigned      YES unset  up                    up      
GigabitEthernet5           unassigned      YES unset  down                  down    
GigabitEthernet6           unassigned      YES unset  up                    up      
GigabitEthernet7           unassigned      YES unset  up                    up      
GigabitEthernet8           192.168.1.100   YES NVRAM  up                    up      
GigabitEthernet9           192.168.2.100   YES NVRAM  up                    up
NVI0                       unassigned      YES unset  administratively down down
Tunnel0                    172.16.0.1      YES NVRAM  up                    up
Tunnel1                    172.16.1.1      YES NVRAM  up                    down
Vlan1                      192.168.100.254 YES NVRAM  up                    up

Nous pouvons voir que les deux tunnels sont « up » au niveau du status mais que Tunnel 1 est « down » au niveau du protocole. C’est normal car la route par défaut emprunte une route via SFR. Le tunnel1 emprunte la route via Bouygues et donc ne peut pas utiliser la route par défaut. Celle-ci n’est pas active d’ou le protocol = down.

Que se passe-t-il si nous retirons le cable entre l’ONT et la box SFR (supression du lien entre la box et le fournisseur, SFR), la route SFR va tomber et celle de Bouygue va devenir up.


routeur1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.2.254 to network 0.0.0.0

S*    0.0.0.0/0 [2/0] via 192.168.2.254

routeur1#show ip interface brief 
Interface                  IP-Address      OK? Method Status                Protocol
GigabitEthernet0           unassigned      YES unset  up                    up      
GigabitEthernet1           unassigned      YES unset  down                  down    
GigabitEthernet2           unassigned      YES unset  down                  down    
GigabitEthernet3           unassigned      YES unset  down                  down    
GigabitEthernet4           unassigned      YES unset  up                    up      
GigabitEthernet5           unassigned      YES unset  down                  down    
GigabitEthernet6           unassigned      YES unset  up                    up      
GigabitEthernet7           unassigned      YES unset  up                    up      
GigabitEthernet8           192.168.1.100   YES NVRAM  up                    up      
GigabitEthernet9           192.168.2.100   YES NVRAM  up                    up      
NVI0                       unassigned      YES unset  administratively down down    
Tunnel0                    172.16.0.1      YES NVRAM  up                    down      
Tunnel1                    172.16.1.1      YES NVRAM  up                    up    
Vlan1                      192.168.100.254 YES NVRAM  up                    up

La route et le tunnel actif ont changés. Si le status et le protocol du deuxième tunnel sont up, cela veux dire que le lien fonctionne. Pour le voir, il suffit de pinger l’autre bout du tunnel.


routeur1#ping 172.16.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max

Pour l’instant, tout ce qui passe par le tunnel n’est pas crypter. Nous allons maintenant mettre en place le cryptage.

Cryptage

Mise en place du cryptage dans le réseau 2 (Free)

Nous allons utiliser le cryptage IKE, aussi appelé ISAKMP qui est chargé de négocier les Associations de Sécurité (AS) entre deux appareils voulant communiquer.
ISAKMP sépare les négociations en deux phases: Phase 1 et Phase 2.

  • La Phase 1 crée le premier tunnel, qui protègera les futurs messages de négociation d’ISAKMP, Il s’agit de la politique IKE qui définit une méthode de chiffrement, la durée de vie, la méthode d’intégrité, etc.
  • La Phase 2 crée un tunnel qui protègera les données qui transitent entre les deux réseaux. Nous configurerons la politique de sécurité IPSec.

Phase 1: configuration de la politique IKE


(config)# crypto isakmp policy 1
(config-isakmp)# encr 3des
(config-isakmp)# authentication pre-share
(config-isakmp)# group 2
(config-isakmp)# exit

Création de clés pré-partagées

Nous définissons les clés pré-partagées : le mot de passe ainsi que les adresses IP du routeur distant avec lequel nous communiquons. Vous remarquerez ici que nous définissons 2 clés partagées car nous créons 2 tunels qui ont pour cible les adresse IP publiques du réseaux Bouygues-SFR.


(config)#  crypto isakmp key motdepasse address 128.0.0.1
(config)#  crypto isakmp key motdepasse address 109.0.0.1

Phase 2: configuration de la politique IPSEC

Nous définissons notre transform-set pour l’établissement d’une liaison IPSec SA. Elle aura pour nom « TSET ».


(config)# crypto ipsec transform-set TSET esp-3des esp-md5-hmac 
(cfg-crypto-trans)# mode tunnel

 

Voila, c’est tout pour aujourd’hui.

Référence:

Documentation Cisco sur IPSEC (en anglais)
Comparaison des différentes solution VPN pour Cisco (en anglais)
Vue d’ensemble d’ISAKMP (en anglais)
Scénarios VPN Site à Site (en anglais)
Configuring IPSec Network Security (en anglais)

Autres références intéressantes:

Easy VPN Server Avec DVTI (Dynamic Vpn Tunnel Interfaces) par Bastien Migette (en français)

Installation du serveur TFTP sous Debian

TFTP signifie en Français « Protocole simplifié de transfert de fichiers ». TFTP est donc utilisé pour transférer des fichiers de manière simple dans un réseau privé. Je l’utilise pour démarer mes OS via le réseau et pour mettre à jour les firmwares de mes équipements réseaux et sauvegarder leur configuration.

Dans ce tutoriel pour installer un serveur tftp sous linux et plus particulièrement sous Debian, je vais détailler comment procéder et donner quelque explication.

Installation:

On utilise le paquet tftpd-hda qui se trouve dans les dépôts Debian (commande à saisir dans un terminal root ou en étant sudo):


root@server:/home/user# apt-get install tftpd-hpa

On doit ensuite créer le répertoire ou seront stockés les fichiers dont nous avons besoins sur le réseau via TFTP (/media/raid5/Install/tftp dans mon cas).


root@server:/home/user# mkdir /media/raid5/Install/tftp

Attention! nous venons de créer le répertoire en tant que root. Il faut changer le propiétaire et le groupe pour le répertoire.


root@server:/home/user# chown tftp:tftp /media/raid5/Install/tftp

Ensuite, donner les droits sur le répertoire:

Le 2 devant 777 spécifie que les fichiers créés dans le répertoire appartiendront toujours au groupe tftp.


root@server:/home/user# chmod 2777 /media/raid5/Install/tftp

Pour vérifier les droits:


root@server:/home/user# ls -lAh /media/raid5/Install/ |grep tftp
drwxrwsr-x  2 tftp   tftp 4,0K août  18 19:52 tftp

Une dernière chose, l’installation crée un utilisateur tftp avec comme « home » le répertoire /srv/tftp. Nous allons modifier le home de l’utilisateur tftp:


root@root:/home/user# usermod --home /media/raid5/Install/tftp tftp

Sécurité:

L’utilisation d’un service TFTP ne requière pas de compte et de mot de passe spécifique sur le serveur. Du fait qu’il n’y ait pas d’autentification, tftpd-hda n’autorisera que les fichiers publiquement accessible (o+r) à être lu, sauf si un permission spécifique a été précisée. Un fichier pourra être modifié seulement si il existe déjà. Par défaut, de nouveaux fichiers ne peuvent pas être créés à moins de préciser l’option –create.

Le serveur TFTP devrait être paramétré pour s’exécuter avec le privilège le plus bas possible. Pour cela,  utiliser le parametre –user pour spécifier l’ID du service tftpd-hpa et créer un utilisateur spécifique avec peu de privilège. Lors de l’installation, l’utilisateur tftp est créé.

L’acces aux fichiers peut et devrait être restreint en invoquant tftpd-hpa avec une liste de répertoire. Cela se fait via le parametre TFTP_DIRECTORY= et permet de limiter l’access aux fichiers inclus dans le répertoite défini. Si possible, il est recommander d’utiliser le paramètre –secure pour ch-rooter le tout une fois que le serveur est lancer.

Ajout d’un utilisateur local au groupe tftp pour l’écriture en local:

Après la procédure d’installation ci-dessus,  seuls les membres du groupe tftp ont le droit d’écrire dans l’arborescence du service TFTP. Tous les utilisateurs du système ont le droit de lire le contenu de cette même arborescence. Pour autoriser un utilisateur à écrire dans le répertoire /media/raid5/Install/tftp/, il suffit de l’ajouter au groupe système dédié. Voici un exemple :


root@server:/home/user# adduser user tftp
Ajout de l'utilisateur « user » au groupe « tftp »...
Ajout de l'utilisateur user au groupe tftp
Fait.

Configuration du service tftp:

Fichier de configuration:

Il se trouve pour Debian dans le répertoire : « /etc/default/tftpd-hpa »

Par défaut, voici son contenu

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Nous allons le personnaliser via la commande:


root@server:/home/user# nano /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/media/raid5/Install/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

On redémare le service:


root@server:/home/user# service tftpd-hpa restart

Creation du fichier désiré sur le serveur tftp:

PS: J’ai choisi de ne pas autoriser la création de fichier via le service tftpd-hpa. Je les créerai moi même directement sur le serveur.


root@server:/home/user# touch /media/raid5/Install/tftp/nom du fichier désiré
root@server:/home/user# chmod 775 /media/raid5/Install/tftp/nom du fichier désiré
root@server:/home/user# chown tftp:tftp /media/raid5/Install/tftp/nom du fichier désiré

Réseau et firewall:

La partie réseau et firewall a été rédigé par Loïc BLOT, cf (son blog). Je n’ai fait que le reprendre.

Le TFTP est un protocole particulier basé sur le port 69 UDP et un port aléatoire. Le soucis vient du fait, que les réponses sont envoyées depuis et sur un port aléatoire. De ce fait vos firewall ne peuvent pas laisser passer tous ces flux, ce serait extrêmement dangeureux.

Afin d’activer le TFTP, il faut ajouter des règles de NAT et d’autorisation :


iptables -I FORWARD -p udp --dport tftp -j ACCEPT
iptables -t nat -A POSTROUTING -p udp --destination-port tftp -j MASQUERADE

et ensuite activer le module noyau de netfilter permettant de nater correctement les réponses TFTP:


modprobe nf_nat_tftp

Vérification:

Installer le packet tftp: apt-get install tftp
Se connecter au serveur tftp: tftp 192.168.10.13
Lancer le mode verbeur pour voir ce qui se passe: tftp>  verbose
Récrupérer le fichier désiré: tftp> get c800-universalk9-mz.SPA.153-3.M.bin
Lire le résultat qui normallement doit être bon et quiter: tftp> quit
En restant dans le répertoire courant, vérifier que le fichier a bien été reçu: root@server:/home/user# ls


root@server:/home/user# apt-get install tftp
root@server:/home/user# tftp 192.168.10.13
tftp>  verbose
tftp> get c800-universalk9-mz.SPA.153-3.M.bin
tftp> getting from 192.168.10.13:c800-universalk9-mz.SPA.153-3.M.bin to c800-universalk9-mz.SPA.153-3.M.bin [netascii]
Received 68390499 bytes in 26.9 seconds [20359837 bit/s]
tftp> quit
root@server:/home/user# ls
c800-universalk9-mz.SPA.153-3.M.bin

Voila!

Configurer la route par défaut en utilisant IPSLA

IP SLA a été inventé par Cisco. Cisco IOS IP SLA est à la base une technologie qui permet de mesurer les performances du réseau.
Ici, nous l’utiliserons non pas pour réaliser des mesures de performance, mais pour modifier la table de routage sur une modification d’état d’une route ou d’une interface (route ou interface UP/DOWN).

Toutes les commandes suivantes ont été testées sur un routeur cisco C892FSP-K9 avec comme rom, la c800-universalk9-mz.SPA.152-4.M6.bin.

Configuration des interfaces

rtr>en
Password: 
rtr#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
rtr(config)#interface gigabitEthernet 8
rtr(config-if)#description Primary link ISP1
rtr(config-if)#ip address 192.168.1.1 255.255.255.0
rtr(config-if)#exit
rtr(config-if)#
rtr(config)#interface gigabitEthernet 9
rtr(config-if)#description Primary link ISP2
rtr(config-if)#ip address 192.168.2.1 255.255.255.0
rtr(config-if)#exit

Je ne m’attarderai pas ici sur la configuration complete des interfaces, ce n’est pas l’objet. Je les ai indiqués uniquement pour la compréhension. L’acces à Internet se fait donc via les interface GI8 et GI9 du routeur, cf diagramme ci-dessous.

Diagramme1

Création du SLA:

Tester un accès à Internet et donc un défaut de service de l’ISP1:

Dans cet exemple, nous allons pinger le dns primaire de google. Si vous faites cela, il vaut mieux au préalable demander une autorisation. Vous n’aimeriez pas que quelqu’un face la même chose avec vos serveurs. Choisissez bien l’adresses que vous voulez pinger.

Si le ping ne fonctionne pas, cela veut dire que soit le DNS de google n’est plus joignable, soit il y a un probleme d’acces à internet (DNS de l’ISP, box en panne…), tout ceci, même si le lien entre la box et le routeur fonctionne parfaittement.

rtr(config)#ip sla 1
rtr(config-ip-sla)#icmp-echo 8.8.8.8 source-interface GigabitEthernet8
rtr(config-ip-sla)#frequency 5
rtr(config-ip-sla)#exit
rtr(config)#ip sla schedule 1 life forever start-time now

ip sla 1 = entre dans le mode de configuration d’IPSLA en définissant l’instance, ici 1

icmp-echo 8.8.8.8 source-interface GigabitEthernet8 = configuration de l’action désiré. ici, un ping sur 8.8.8.8 avec comme source Gi8

frequency 5 = toutes les 5 secondes, le ping sera lancé

ip sla schedule 1 life forever start-time now = définit quand IPSLA (ici, notre ping) doit commancer et quand il doit se terminer. Il doit commancer maintenant et ne jamais s’arrêter. Attention, le numero 1 n’est pas anodin, il definit l’instance qui est à démarer.

Tester un probleme de lien avec la box, modem:

rtr(config)#ip sla 1
rtr(config-ip-sla)#icmp-echo 192.168.1.254 source-interface GigabitEthernet8
rtr(config-ip-sla)#frequency 5
rtr(config-ip-sla)#exit
rtr(config)#ip sla schedule 1 life forever start-time now

Ici, ce sont les mêmes paramètres. Au lieu de pinger le DNS de google, nous pingons la box d’ISP1. Nous testons le lien entre le routeur et la box. Si le ping ne fonctionne pas, la box est en panne ou le câble est débranché ou altéré.

Création du trackers:

rtr(config)#track 1 ip sla 1

track 1 ip sla 1 = surveille l’instance 1 d’IPSLA. Telle que la commande est définie, le code retourné par IPSLA (OK/Non-OK) sera surveillé. c’est l’option par défaut.

Définition des routes par défaut:

Cas du test d’un acces à Internet:

rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2
rtr(config)#ip route 8.8.8.8 255.255.255.255 192.168.1.254

ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1 = ce sera la route par défaut tant que le track 1 sera bon (OK)
ip route 0.0.0.0 0.0.0.0 192.168.2.254 2 = si le track 1 est Non-OK, la route par défaut disparait et celle-ci, pondérée par le 2 à la fin de la ligne, deviendra la route pour l’acces à Internet. L’instance à la fin de la ligne définit la priorité.
ip route 8.8.8.8 255.255.255.255 192.168.1.254 = je défini la route manulellement pour cette adresse. Cela permet de forcer le ping via l’interface voulu. Ici, GigabyteEthernet 8. Ceci même si la route pour internet (0.0.0.0) est définit via GigabyteEthernet 9 (192.168.2.254). Dès que le ping fonctionnera de nouveau, le tracker deviendra OK et la route pour internet redeviendra la permière ligne (celle avec le tracker 1)

Cas du probleme de lien avec la box:

rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.254 track 1
rtr(config)#ip route 0.0.0.0 0.0.0.0 192.168.2.254 2

ici, pas besoin de définir une route pour atteindre la box. La box est directement branché à GI8.

Vérification du bon fonctionnement de notre configuration:

Vérification quand tout va bien sur Gi8:

Vérifions l’état de l’IPSLA:

rtr#sh ip sla summary 
IPSLAs Latest Operation Summary
Codes: * active, ^ inactive, ~ pending

ID           Type        Destination       Stats       Return      Last
                                           (ms)        Code        Run 
-----------------------------------------------------------------------
*1           icmp-echo     8.8.8.8         RTT=1       OK          3 seconds ago

Ici, nous pouvons voir:

  • l’instance (*1)
  • le type de test effectué (ping)
  • la destination du ping (8.8.8.8)
  • le temps mis pour recevoir le retour du ping (1ms)
  • le code retourné (OK)
  • le temps depuis la dernière exécution du dernier ping (3s).

Vérifions les routes:

rtr#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.1.1 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 192.168.1.1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, GigabitEthernet8
L        192.168.1.1/32 is directly connected, GigabitEthernet8
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet9
L        192.168.2.1/32 is directly connected, GigabitEthernet9
....
      8.0.0.0/8 is subnetted, 1 subnets
S        8.8.8.8 [1/0] via 192.168.1.254

Quand Il y a un probleme sur la route utilisant Gi8:

Vérifions l’état de l’IPSLA:

rtr#sh ip sla summary 
IPSLAs Latest Operation Summary
Codes: * active, ^ inactive, ~ pending

ID           Type               Destination       Stats                  Return                        Last
                                                  (ms)                   Code                          Run 
--------------------------------------------------------------------------------------------------------------------
*1           icmp-echo           8.8.8.8          RTT=1         Socket set option erro            24 seconds ago

ici, la route est tombé depuis 24 secondes et le code de retour est en erreur.

Vérifions les routes:

rtr#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is 192.168.2.1 to network 0.0.0.0

S*    0.0.0.0/0 [2/0] via 192.168.2.1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, GigabitEthernet8
L        192.168.1.1/32 is directly connected, GigabitEthernet8
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, GigabitEthernet9
L        192.168.2.1/32 is directly connected, GigabitEthernet9
....
      8.0.0.0/8 is subnetted, 1 subnets
S        8.8.8.8 [1/0] via 192.168.1.254

Ici, nous voyons que la route vers le 0.0.0.0 (internet) a changé. La route n’est plus via 192.168.1.1, mais via 192.168.2.1. C’est la route avec l’instance 2 qui a pris le relais ([2/0]).
Les autres routes sont toujours en place car les interfaces fonctionnent encore. Cela indique un probleme chez le fournisseur d’acces (ISP1) ou un probleme sur le dns de google. Je vous laisse juger.

Voila, c’est tout pour aujourd’hui.

Référence:

Information sur Cisco IOS IP SLA (en anglais)
Analyse des performances d’un réseau grâce à IPSLA (en français)
Documents à partir desquels je me suis basé pour faire ce tutoriel:
Dual internet links NATing with PBR and IP SLA par Marwan ALshawi (en anglais)
Configuring Static Route Tracking using IP SLA (Basic) par un auteur inconnu (en anglais)

 

Protection de la console (>…)

Le mot de passe de la console sera unique, ne dépendra pas de tel ou tel utilisateur. Voici ce qu’il faut entrer comme commande:

>enable
#configure terminal
(config)#line console 0
(config-line)# password «mot de passe»
(config-line)#login
(config-line)#exit

un peu d’explication:

>enable = demande l’entrée dans le mode privilégié
#configure terminal = demande l’entrée en mode de configuration
line console 0 = demande d’entrer dans le mode de configuration de la console
(config-line)# password «mot de passe» = parametre le mot de passe de la console, ne pas entrer les guillements, seulement le mot de passe
(config-line)#login = active la de mande de mot de passe pour avoir accès à la console.

voila, c’est tout pour aujourd’hui
Pierre

Sauvegarde IOS sur un Serveur TFTP

Cette opération est à réaliser des la réception de votre matériel. Elle permet de sauvegarder votre IOS en lieu sûr au cas ou quoi que ce soit arrive.
Toute les commande suivantes ont été réalisées sur un routeur Cisco C892-SPF. Elles sont identiques sur les autres appareils ayant un IOS.
Pour bien sauvegarder l'IOS de son appareil, il faut connaitre le fichier binaire qui est installé. Pour ce faire, faire ce qui suit.

Pour connaître le nom du fichier binaire installé et chargé dans la flash :

>en
# show version

=> lire la ligne « System image file is "xxxxxxxxxxxxx.bin"  »,
dans mon cas le nom du fichier est : « c800-universalk9_npe-mz.SPA.153-2.T.bin »

Sauvegarde de la flash contenant l’IOS sur un serveur tftp :

>en
#copy flash tftp

Répondre aux questions posé…

Source filename []? c800-universalk9_npe-mz.SPA.153-2.T.bin
Address or name of remote host []? 192.168.100.2
Destination filename [s]? c800-universalk9_npe-mz.SPA.153-2.T.bin

Source filename []? = nom du fichier trouvé précédement avec la commande "show version"
Address or name of remote host []? = ip ou nom du serveur TFTP
Destination filename [s]? =  Même nom que le "source filename" car il vaut mieux garder les mêmes références que Cisco.

Si cela ne fonctionne pas pour le tftp, voir si le serveur est démaré et si le port 69 en udp est autorisé, voir aussi les droits d'accès en écriture sur le serveur TFTP.