NOPE LinkedIn

Catégories:
wireguard

Vérification de la santé de WireGuard avec Python 3

Vérification de la santé de WireGuard avec Python 3 image

{< admonitionblock style=“important” >} Traduction d’un article du site Pro Custodibus

Le contenu de cette page est la traduction Française de l’article Python 3 WireGuard Health Check de Justin Ludwig

{< /admonitionblock >}

Python 3 WireGuard Health Check

Dans l’article High Availability WireGuard on AWS (Disponibilité élevée de WireGuard sur AWS), j’ai inclus le code source d’un service simple que vous pouvez utiliser comme un contrôle de santé pour AWS ELB (Amazon Web Services Elastic Load Balancing). Ce code est conçu pour être exécuté sur Amazon Linux 2 (une dérivée de Red Hat Enterprise Linux 7), qui comprend une version plus ancienne du langage de programmation Python, Python 2.

De nouvelles distributions Linux comprennent Python 3, cependant. Voici la version Python 3 du code de contrôle de santé :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from http.server import HTTPServer, BaseHTTPRequestHandler
from optparse import OptionParser
from os import popen

class HealthCheck(BaseHTTPRequestHandler):

    def do_GET(self):
        if check(self.server.device):
            self.send_response(200)
            self.send_header("Content-Type", "text/plain")
            self.end_headers()
            self.wfile.write(b"healthy\n")
        else:
            self.send_error(404)

    def do_HEAD(self):
        self.do_GET()

def check(device):
    return popen(f"ip link show {device} up").read() != ""

def test(device):
    if check(device):
        print(f"{device} up")
    else:
        print(f"{device} down")

def main(port, device):
    server = HTTPServer(('', port), HealthCheck)
    server.device = device
    server.serve_forever()

def opts():
    parser = OptionParser(
            description="HTTP server that sends 204 response when device is up.")
    parser.add_option("-d", "--device", dest="device", default="wg0",
            help="device name to check (default wg0)")
    parser.add_option("-p", "--port", dest="port", default=8080, type="int",
            help="port on which to listen (default 8080)")
    parser.add_option("-t", "--test", action="store_true", dest="test", default=False,
            help="show status and exit")
    return parser.parse_args()[0]

if __name__ == "__main__":
    options = opts()
    if options.test:
        test(options.device)
    else:
        main(options.port, options.device)

Il exécute un simple serveur HTTP qui répond avec un code d’état 200 (OK) lorsque l’interface WireGuard configurée est active, et un code d’état 404 (Not Found) lorsque elle est inactive.

Vous pouvez configurer l’interface qu’il vérifie via le drapeau --device, et le port sur lequel il écoute via le drapeau --port. Par exemple, pour vérifier l’interface wg1 et écouter sur le port 8000, exécutez-le comme suit :

$ ./wg-health-check.py --device=wg1 --port=8000

Les valeurs par défaut sont de vérifier l’interface wg0 et d’écouter sur le port 8080.

Pour l’exécuter en tant que service au démarrage du système, utilisez le même fichier systemd unit utilisé par la version Python 2 de ce code à partir de la section Set Up WireGuard Server Health Check de l’article original.

3/25/2021

par Justin Ludwig