KVM: Communication entre invité en mode pont

Cette article est un pense bête et peut aussi servir aux personnes utilisant kvm en mode bridge (pont).

KVM est configuré en mode pont pour permettre la communication entre l’hôte et les invités. Il arrive que les invités ne puissent pas communiquer entre eux. Cela est du à des règles de filtrage du pont au niveau de l'hôte.

Attention! Si vous perdez la connectivité entre invités suite à une mise à jour, penser à revoir le fichier suivant.

Pour régler le problème, il faut ajouter au fichier suivant les informations:

/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Si vous n'utilisez pas IPV4, ajouter que les informations concernant IPV6 et vice et versa

Source:
https://wiki.libvirt.org/page/Networking#Host_configuration_2
https://wiki.debian.org/BridgeNetworkConnections

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

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

nettoyage des anciens kernels

Au gré des mises à jour, vous pouvez vous trouver avec plusieurs kernels installés, mais pas utilisés. Si vous avez besoin de faire de la place, il semble judicieux de les retirer de votre système. nous allons voir comment installer le dernier kernel et retirer les anciens.

D'abord, Il faut savoir quelle est la version courante du kernel pour ne pas le supprimer.

uname -r
4.9.0-5-amd64

Nous allons chercher si une mise à jour existe. Elle se caractérise par  une version plus récente avec un "un".
Les deux premiers caractères à gauche vous donnent des indications sur l'état du paquet
Première colonne : souhait
i : Install (à installer)
r : Remove (à supprimer)
u : Unknown (inconnu)
p : Purge (à supprimer avec les fichiers de configuration)
h : Hold (à conserver)
Seconde colonne : état
i : Installed (installé)
c : Config-files (fichier(s) de configuration existant)
u : Unpacked (dé-compressé)
n : Not Installed (non installé)
f : Failed-config (problème de configuration)
h : Half-installed (installé partiellement)

apt-get update
****
dpkg -l 'linux-image*'
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                      Version           Architecture      Description
+++-========================-=================-=================-======================================================
rc  linux-image-4.9.0-3-amd6 4.9.30-2+deb9u5   amd64             Linux 4.9 for 64-bit PCs
ii  linux-image-4.9.0-5-amd6 4.9.65-3+deb9u2   amd64             Linux 4.9 for 64-bit PCs
un  linux-image-4.9.0-6-amd6 4.9.82-1+deb9u3   amd64             Linux 4.9 for 64-bit PCs
ii  linux-image-amd64        4.9+80+deb9u4     amd64             Linux for 64-bit PCs (meta-package)

Si vous avez besoin d'installer une version plus récente comme ici, lancer la commande suivante.
Pour chez vous, remplacer le numéro de version et "amd64" par votre architecture ou "generic" si vous n'en avez pas spécifié.

apt-get install linux-image-4.9.0-6-amd64

Démarrer de nouveau votre machine pour que la version courante du kernel soit la dernière installée.

reboot

Vérifier

uname -r
4.9.0-6-amd64

Nous pouvons maintenant supprimer les anciennes versions.
un conseil: ne supprimer pas tout de suite la dernière version utilisé. Vérifier d'abord que tout va bien avec le nouveau kernel. Nous ne sommes jamais à l'abri de surprise!!!

apt-get purge linux-image-4.9.0-3-amd64
apt-get purge linux-image-X.X.X-X-amd64

Normalement, apt-get s'occupe de tout mais nous allons tout de même mettre à jour Grub.

update-grub2 

démarrer  de nouveau la machine.

c'est fini.