Cela fait maintenant un peu plus de deux mois que mon chat a disparu. Après plusieurs phases mélant tristesse profonde, espoir, effort de recherches et finalement, toujours rien, je crois qu'il est temps pour moi de la laisser partir définitivement. Et c'est pourquoi, pour marquer solennement le coup, je fais ici son espèce d'éloge funèbre.

Photo de Mimi-Pop mon chat

C'est en 2005 que nos vies se sont croisées. Une de mes collègues avait eu une portée de chats et je suis allé en choisir un parce que je sentais que c'était le bon moment pour moi: j'avais acheté une nouvelle maison, mon ancien chat était parti et, ayant toujours eu depuis l'enfance des chats, j'avais besoin de repartir sur de bonnes bases.

Quand je suis arrivé dans cette grande maison bourgeoise, il y avait tout un tas de chatons qui s'affairaient dans le jardin. Certains grimpaient aux troncs avec leurs griffes, certains courraient dans tous les sens. J'ai remarqué que l'un d'entre-eux était beaucoup plus calme, plus posé et aussi plus rond que les autres. C'est ce chaton que j'ai choisi, ma petite Mimi-Pop de l'époque. C'est comme ça que tout a commencé.

S'en sont suivis plusieurs déménagements dont un dans un appartement de centre-ville qui a du la gonfler généreusement. Je me souviens à cette époque qu'elle parcourait en courant les pièces de la porte d'entrée jusqu'au bout de la salle de bain, histoire d'avoir la plus grande distance à parcourir. Je voyais bien que ça n'allait pas être simple pour elle qui avait connu le luxe d'un grand jardin auparavant. Heureusement, au bout de quelques mois, nous voilà à nouveau dans une maison avec jardin où elle peut rester un peu plus libre de ses promenades.

Et puis comme d'un seul mouvement, le temps s'est accéléré, la routine a pris place, et Mimi-Pop est restée, incarnant une certaine forme de stabilité dans ma vie. Pour moi, ce chat était la douceur incarnée et j'avais un certain sentiment de responsabilité par rapport à elle. Je l'ai toujours bien aimé et apprécié la relation que je pouvais avoir avec elle. J'adorais quand ces dernières années je rentrais tard du travail et qu'elle attendait dehors (sans doute pas après moi mais ça faisait son effet).

Ce n'est pas pour rien que ma gallerie publique est remplie de photos de chats et de Mimi-pop, notamment. 14 années de partagées, ça en fait des caresses. Même le favicon de ce site est directement inspiré d'une de ses photos.

Mais finalement, après près de 14 ans de vie commune, la vieillesse a rattrapé mon chat. Elle a commencé à avoir des problèmes de santé: un peu d'arthrose comme 80% des chats de son âge. L'hiver dernier elle a attrapé une infection généralisée où elle a failli rester sur le carreau. Je voyais bien aussi que les autres chats du quartier étaient plus présents dans notre jardin, signe d'un essouflement de maintenance de territoire.

Jusqu'au jour fatidique du 14 décembre 2018 et cette disparition très soudaine. Le matin je la caressais encore avant de partir au travail, alors qu'elle dormait dans le canapé. Je ne savais pas encore que ce serait la dernière fois... Quand je suis rentré le soir et qu'elle n'était pas à la maison, j'ai eu tout de suite un mauvais préssentiment. Il faut dire que pendant toute sa vie, elle n'a jamais disparu plus de 24h et que son territoire était assez restreint, d'un rayon d'une centaine de mètres autour de notre maison. Et le mauvais sentiment s'est révélé malheureusement amèrement juste...

Immédiatement, toute la famille s'est mise en mode recherche et je crois que nous avons fait le maximum pour la retrouver. Voici la liste de nos actions:

  • Deux premières recherches, le soir de sa disparition dans le quartier, entre 21h et 22h30.
  • Dépôt d'environ 300 prospectus dans les boîtes aux lettres de tout le quartier, dans un rayon de 500m autour de la maison. Et croyez-moi, 500m de rayon, ça fait une surface de près de 80 ha !
  • Parcours le lendemain, sous la flotte, de l'intégralité du quartier.
  • Un type a appelé pour dire qu'il avait aperçu le chat et nous sommes donc allé explorer de ce côté pendant 2 heures.
  • Une autre personne a également appelé le lendemaine et nous y sommes également allés mais nous avons juste croisé un chat qui lui ressemblait (beaucoup certes).
  • J'ai pris une journée de congés pour la chercher pendant une journée de grand beau temps en l'appelant fort avec un paquet de croquettes que je remuais.
  • Puis, pendant plusieurs soirées, j'ai refait le parcours surfacique du quartier en prenant soin de cibler les garages et les abris de jardins en l'appelant en sachant qu'elle pouvait être enfermée quelque-part.
  • J'ai déposé son avis de disparition à la SPA d'Angers ainsi qu'aux deux cliniques vétérinaires à proximité du quartier.
  • Nous avons déposé des annonces sur les réseaux sociaux et sur Internet. Pendant plus de 2 mois, j'ai scruté l'intégralité des pages Facebook de Pet-alert en finissant par élargir ma recherche à toute la France.

Mais, après plus de deux mois, je ne peux que constater que tous ces efforts ont été vains.

Cela fait des années que j'essaye de me préparer à l'éventualité de son départ car je sais très bien que la durée de vie d'un chat est potentiellement inférieure à celle d'un être humain. Mais je n'avais jamais imaginé que ça se fasse comme ça, dans l'attente, partagé entre espoir et résignation. Je croyais qu'elle allait vieillir doucement et qu'un jour elle partirait, qu'on la retrouverait morte. Ou encore qu'elle se ferait renverser par une voiture. Jamais qu'elle disparaîtrait du jour au lendemain, sans prévenir, avec aucun indice.

Quoiqu'il en soit, j'essaye de me consoler en me disant que j'ai fait le maximum pour lui apporter confort et douceur dans un cadre agréable pendant toute sa vie. J'ai toujours pris son parti et ai toujours, du mieux que j'ai pu, essayé de lui consacrer le plus de temps. Il faut dire qu'elle me le rendait bien, et puis, j'avais besoin de ce contact, de cette forme de relation extra-humaine, inter-espèces.

Quels sont mes regrets ? Sans doute de ne pas l'avoir emmené en randonnée au moins une fois. J'ai toujours été partagé entre le fait de lui faire découvrir de nouveaux espaces et de lui laisser faire sa place dans un environnement stable, car je voyais bien que les petits changements lui posaient parfois problème.

Mon autre regret est de ne pas l'avoir tatouée ou identifiée. Je ne voulais pas lui imposer cette peine ou cette petite douleur mais je pense que j'aurais été sans doute plus serein pendant sa phase de disparition si elle avait été pucée. Je me dis que mon prochain chat devrait avoir un collier qui me permette de le retrouver, sans le géner dans le parcours de son territoire.

A la lumière de ce temps qui est maintenant passé, je crois que finalement personne n'a vu Mimi-pop depuis le jour de sa disparition. Je finis par croire qu'elle a dû se faire renverser par une voiture et que le conducteur l'a embarquée pour ne pas faire de vagues. D'autres pensent qu'elle s'est éclipsée pour aller mourir dans un coin. Dans tous les cas, je lui souhaite de ne pas avoir souffert et d'avoir trouvé un lieu de calme où elle restera en paix.

Quant à moi, après avoir épuisé toutes les larmes de mon corps, il me reste tant de souvenirs dans la tête. Regarder la télé avec le chat sur les genoux, dormir toute une nuit avec le chat qui ronronne entre les jambes, coder avec elle sur les genoux, lui montrer des vidéos d'oiseaux sur Youtube, aller la promener dans le parc derrière la maison, lui donner des petites croquettes en motifs sur le carrelage, l'appeler le soir pour la faire rentrer...

Je crois que je ne pourrais jamais plus écouter "Festival", "All Right" ou "Ekki Múkk" de Sigur Rós sans me rappeler avec émotion cette petite boule de poils noirs et blancs qui a égayé ma vie pendant près de quatorze ans.

Adieu Mimi-pop, adieu mon chat. Je te remercie pour toutes ces années où tu m'as tant apporté. Peut-être qu'un jour tu reviendras. Dans tous les cas, tu resteras toujours dans mes pensées et dans mon coeur...

La dernière image de Mimi-Pop...

Posted lun. 25 févr. 2019 12:13:30

Introduction

Si vous avez lu ma page dédiée à mon infrastructure de sauvegarde, vous savez que j'utilise Borg et que mon installation est particulière.

En effet, le serveur de sauvegarde n'est pas relié directement au réseau local (qui est en Wifi chez moi) mais relié en ethernet à une station de travail principale. Cette dernière héberge le contenu le plus volumineux et relier le serveur de sauvegarde directement par un câble réseau me permet de disposer d'un débit de l'ordre du Gigabits/seconde soit près de 125Mo/seconde. Le Wifi ne monterait qu'à 54MBits/s soit 6,5Mo/seconde, près de 20 fois plus lent.

Donc, ma station de travail qui est également reliée au Wifi sert de passerelle Wifi au serveur de sauvegarde. Dans un sens j'ai le meilleur des deux mondes car les clients à sauvegarder du réseau local peuvent tous attaquer le serveur local via la station de travail.

Néanmoins depuis près d'un an, je loue un serveur dans le "cloud" et j'ai besoin de récupérer une partie de son contenu pour faire une sauvegarde. Or, il est difficile pour ce serveur de franchir les 2 NAT.

J'ai testé l'utilisation de SSHFS et je dois dire que, même si ça marchait, je n'étais pas du tout satisfait des performances.

Au final, après avoir déployé Wireguard sur toutes mes machines, je me suis demandé s'il était simple de passer par le VPN pour faire la sauvegarde du client "cloud". Cet article montre un élément d'explication de la méthode que j'ai employée avec succès.

Un rappel du schéma d'infrastructure de backup

Voici un petit schéma de comment le tout est organisé:

                                                        __   _
                                                      _(  )_( )_
                                     Wi-Fi           (_   _    _)
        +--------+                   .....             (_) (__)
        |        |                  .......            Internet
        |        |                 .  ...  .            ^   ^
        +--------+                     .                |   |
        +--------+                  +------+            |   |
          Laptop ^ - - - - - - - - >|      |<-----------+   |
                                    +------+                |
                                     Router                 | 
                                       ^                    |
                                       |                    |
                                                            |
                                       |                    |
 +-------+        +-------+                            +----+--+
 |       |  Eth   |       |            |               |       |
 |       +<------>+       +< - - - - - +               |       |
 |       |        |       |                            |       |
 |       |        |       |                            |       |
 +-------+        +-------+                            +-------+
BackupServer      WorkStation                         CloudServer
  • Workstation fait du NAT pour BackupServer.
  • Router fait du NAT pour le réseau local vers Internet.

Configuration du VPN wireguard

Vous allez me dire que Wireguard pour écrire derrière un double NAT c'est un peu overkilling. Vous n'aurez sans doute pas tort mais, à bien y réfléchir, ce n'est pas si compliqué à faire et, dans tous les cas, cela demande bien moins de compétences réseau de bas niveau que d'autres solutions.

Ce qui est bien dans Wireguard, c'est qu'il suffit de peu pour faire en sorte que les clients puissent se parler les uns les autres et ce, peu importe le réseau qui est en dessous. A partir du moment où un client arrive à sortir sur Internet, il fait partie du VPN.

Le principe que j'ai suivi est donné dans l'exemple de passerelle Wireguard que j'ai trouvé sur la mailing list du logiciel.

Globalement il consiste à disposer d'une machine qui servira de passerelle à l'ensemble du VPN. Cette dernière connaît tous les clients potentiels et elle dispose de toutes les clefs publiques des clients du VPN. Chaque client ne connaît que la passerelle et accepte tout ce qui vient du sous-réseau du VPN (la variable AllowedIPs de la passerelle est le sous-réseau Wireguard). De cette manière, la passerelle peut transmettre n'importe quel paquet venu d'un client A vers un client B.

Bien entendu, la passerelle sait faire de l'IP Forwarding.

Dans mon cas, la passerelle est le serveur "Cloud". De cette manière, elle peut facilement atteindre le serveur de sauvegarde via le VPN car Wireguard traverse tous les NAT. L'intérêt de passer par l'interface réseau du VPN (wg0) est que borg ou ssh peuvent l'utiliser directement pour atteindre la machine cible sans avoir à se préocupper de la gestion réseau derrière.

Configuration nftables fonctionnelle

Mais avant de pouvoir faire passer Wireguard, il faut encore configurer comme il se doit la station de travail et notamment activer le NAT de manière sécurisée. C'est sur ce point que j'ai dû bataillé ferme et que j'ai pris le temps de comprendre comment ça fonctionnait.

Globalement, il faut:

  • Activer l'ip forwarding au niveau de la station de travail.
  • Mettre en place du NAT entre le serveur de sauvegarde et la station de travail vers le LAN et Internet.
  • Faire en sorte que la station de travail puisse faire partie du VPN.

L'IP forwarding s'active en indiquant la ligne suivante dans /etc/systctl.conf:

net.ipv4.ip_forward=1

Pour le reste, j'ai utilisé nftables qui est l'outil de configuration de netfilter recommendé dans Debian. Voici mon fichier de configuration que j'ai détaillé:

#!/usr/sbin/nft -f

# On vide la table
flush ruleset

# Gestion de la table ip (v4)
table ip filter {
  # On scanne ce qui passe en entrée
  chain input {
    type filter hook input priority 0; policy drop;

    # On autorise les connexions est déjà acceptées
    ct state {established, related} accept

    # On jete ce qui est invalide
    ct state invalid drop

    # On accepte ce qui vient de loopback
    iifname lo accept

    # On accepte ce qui vient de Wireguard
    iifname wg0 accept

    # On accepte le trafic qui vient de la carte Ethernet
    # C'est tout ce qui vient du serveur de sauvegarde.
    iifname eno1 accept

    # On permet le ping
    ip protocol icmp accept comment "Accept all icmp types"

    # On accepte tout ce qui vient du réseau local
    ip saddr 192.168.0.0/24 accept

    # On rejete le reste    
    counter log prefix "Rejecting input " level warn reject
  }

  # Chaîne qui sert à faire le forwarding
  chain forward {
    type filter hook forward priority 0; policy accept;
    # Règles d'acceptation du forward
    ## ça vient du réseau ethernet et ça veut sortir sur le wifi
    iifname "eno1" oifname "wlp6s0" accept

    ## ça vient du réseau Wifi et ça veut rentrer sur ethernet
    ## ON accepte ce qui est en relation ou établi et ce qui vient
    ## du LAN Wifi.
    iifname "wlp6s0" oifname "eno1" ct state established accept
    iifname "wlp6s0" oifname "eno1" ct state related accept
    iifname "wlp6s0" oifname "eno1" ip saddr 192.168.0.0/24 accept

    ## Sinon, on jette
    iifname "wlp6s0" oifname "eno1" drop
    counter log prefix "rejecting forward shit " level warn
  }

  # Chaîne de sortie (non filtrée)
  chain output {
    type filter hook output priority 0; policy accept;
  }

}

# Gestion du NAT via nftables
table ip nat {
  # Globalement, on accepte tout
  chain prerouting {
    type nat hook prerouting priority 0; policy accept;
  }

  chain input {
    type nat hook input priority 0; policy accept;
  }

  chain output {
    type nat hook output priority 0; policy accept;
  }
  # Mais au moment du postrouting, on active le masquerade
  # sur l'interface Wi-fi de la station de travail
  chain postrouting {
    type nat hook postrouting priority 0; policy accept;
    oifname "wlp6s0" masquerade
    # Et on compte les paquets pour voir ce qui passe.
    counter log prefix "nat postrouting " level warn
  }
}

Configuration du client à sauvegarder dans le cloud

Enfin, pour le client final, il reste à configurer certains points:

  • borgmatic.
  • la clef SSH vers le dépôt Borg.

Mais tout est déjà décrit dans la documentation générale.

Conclusions

Voilà, grâce à ce dispositif, je peux utiliser borgbackup sur un client dans le "cloud" qui peut écrire directement sur mon serveur de sauvegarde, situé derrière 2 réseaux IP nattés. Les performances sont bonnes et grâce à la déduplication et au fait que le client conserve les blocs de fichiers en cache, je suis passé d'une sauvegarde de près d'une heure via SSHFS à quelques secondes via Wireguard. C'est vraiment impressionnant !

En conclusion, Wireguard c'est bien, mangez-en...

Posted mar. 26 févr. 2019 10:20:45 Tags: