VPS + Wireguard + Mikrotik : accédez à vos serveurs locaux !

Voici une config demandée par un client :

Il utilise :

  • un serveur Wireguard hébergé sur un VPS Pulseheberg
  • une connexion internet gérée par un routeur Mikrotik
  • plusieurs serveurs locaux avec pas mal d’applications dédiées sous Linux, Docker, etc.

Pour simplifier la configuration, un script a été créé pour envoyer les commandes au Mikrotik :

#!/bin/bash

# Ce script génère les lignes à saisir sur Mikrotik Router OS 7
# pour arriver sur le wireguard du Mikrotik via un port externe du tunnel
# et se connecter à une IP locale, accessible depuis le routeur Mikrotik
# sur un port de destination précis
#
# #############################################################################
# #                               SCHÉMA DE PRINCIPE                          #
# #############################################################################
# #                                                                           #
# #      INTERNET (Utilisateur)                                               #
# #          |                                                                #
# #          | Requête sur vpn.monserveur.com:[EXT_PORT]                      #
# #          v                                                                #
# #  +-----------------------------+                                          #
# #  |       VPS (Linux)           |                                          #
# #  |  [ IP Publique : X.X.X.X ]  |                                          #
# #  |                             |                                          #
# #  |  (Serveur WireGuard)        | <--- Interface wg0 (10.10.20.1)          #
# #  +--------------|--------------+                                          #
# #                 |                                                         #
# #        [ TUNNEL WIREGUARD ]    <--- Flux Chiffré                          #
# #                 |                                                         #
# #  +--------------|--------------+                                          #
# #  |   MIKROTIK (RouterOS 7)     | <--- Interface [WG_INT] (10.10.20.2)     #
# #  |                             |                                          #
# #  |  1. DST-NAT (Ext -> Int)    | (Vers $DEST_IP:$DEST_PORT)               #
# #  |  2. SRC-NAT (Masquerade)    | (Assure le retour via le tunnel)         #
# #  |  3. FILTER (Forward)        | (Autorise le passage)                    #
# #  +--------------|--------------+                                          #
# #                 |                                                         #
# #         [ RÉSEAU LOCAL ]       <--- Switch / LAN                          #
# #                 |                                                         #
# #  +--------------|--------------+                                          #
# #  |     SERVEUR LOCAL           |                                          #
# #  |    ($DEST_IP)               | <--- Reçoit sur $DEST_PORT               #
# #  +-----------------------------+                                          #
# #                                                                           #
# #############################################################################

echo "--- Configuration de redirection MikroTik via WireGuard ---"

# Fonction pour forcer une saisie non vide
ask_required() {
    local prompt_text=$1
    local var_name=$2
    local input=""
    while [[ -z "$input" ]]; do
        read -p "$prompt_text : " input
        if [[ -z "$input" ]]; then
            echo "Erreur : Ce champ est obligatoire. Veuillez saisir une valeur."
        fi
    done
    eval "$var_name=\"$input\""
}

# Demande des informations avec validation
ask_required "IP de destination locale (ex: 192.168.1.182)" DEST_IP
ask_required "Port de destination local (ex: 80)" DEST_PORT
ask_required "Port externe (sur le tunnel) arrivant sur le Mikrotik (ex: 8097)" EXT_PORT
ask_required "Nom de l'interface WireGuard sur le Mikrotik (ex: wireguard-client)" WG_INT

# Génération du bloc de commande
echo ""
echo "------------------------------------------------------------"
echo " COPIEZ ET COLLEZ LES COMMANDES CI-DESSOUS DANS MIKROTIK :"
echo "------------------------------------------------------------"
echo ""

cat << EOF
# 1. Destination NAT (Redirection entrante)
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=$DEST_IP to-ports=$DEST_PORT \\
    protocol=tcp in-interface=$WG_INT dst-port=$EXT_PORT \\
    comment="Redirection $EXT_PORT vers $DEST_IP:$DEST_PORT"

# 2. Source NAT (Masquerade pour le retour des paquets)
/ip firewall nat
add chain=srcnat action=masquerade dst-address=$DEST_IP \\
    protocol=tcp dst-port=$DEST_PORT \\
    comment="Masquerade retour pour $DEST_IP"

# 3. Autorisation dans le Firewall (Forward)
/ip firewall filter
add chain=forward action=accept connection-nat-state=dstnat \\
    in-interface=$WG_INT \\
    comment="Autoriser flux NAT via $WG_INT"
EOF

echo ""
echo "------------------------------------------------------------"

Vous allez donc obtenir les lignes de commande nécessaires pour qu’une demande arrivant sur le port Eth1 du Mikrotik, avec un port spécifique, soit redirigée vers une IP et le bon port de destination.

Prenons un exemple, avec un serveur Web local sur 192.168.1.90, port 80.
Voici les commandes à entrer dans le Mikrotik :

# 1. Destination NAT (Redirection entrante)
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.1.90 to-ports=80 \
    protocol=tcp in-interface=wg0 dst-port=8080 \
    comment="Redirection 8080 vers 192.168.1.90:80"

# 2. Source NAT (Masquerade pour le retour des paquets)
/ip firewall nat
add chain=srcnat action=masquerade dst-address=192.168.1.90 \
    protocol=tcp dst-port=80 \
    comment="Masquerade retour pour 192.168.1.90"

# 3. Autorisation dans le Firewall (Forward)
/ip firewall filter
add chain=forward action=accept connection-nat-state=dstnat \
    in-interface=wg0 \
    comment="Autoriser flux NAT via wg0"

Pour la configuration du VPS, installons Apache2, Let’s Encrypt pour obtenir une connexion SSL sécurisée, dans cet exemple sur le port 8070, et allons éditer par exemple : etc/apache2/sites-enabled/vpn-proxy.conf :

<VirtualHost *:8070>
    ServerName vpn.monserveur.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/vpn.monserveur.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/vpn.monserveur.com/privkey.pem

    ProxyPreserveHost On
    ProxyRequests Off

    # Redirection vers le serveur local via WireGuard
    ProxyPass / http://10.20.20.2:8080/
    ProxyPassReverse / http://10.20.20.2:8080/

    ProxyPass /api/live/ ws://10.20.20.2:8080/api/live/
    ProxyPassReverse /api/live/ ws://10.20.20.2:8080/api/live/

</VirtualHost>

Allons maintenant éditer /etc/apache2/ports.conf et ajoutons une simple ligne :

Listen 8070

Cela mettra votre serveur Apache 2 en écoute du port 8070, utilisé pour notre exemple, en plus des autres ports.

Vous allez alors pouvoir tout activer et relancer Apache 2 :

a2enmod ssl proxy proxy_http proxy_wstunnel
a2ensite vpn-proxy.conf
systemctl restart apache2

Vous allez désormais pouvoir accéder à votre serveur local, 192.168.1.90, sur son port 80 (ou autre), en demandant https://vpn.monserveur.com:8070 : le VPS reçoit la demande du port 8070, la dirige sur le Mikrotik port 8080 via un tunnel sécurisé, Mikrotik qui va alors convertir vers le bon port de destination : 80. Vous avez désormais accès à votre serveur local depuis internet !

Publications similaires

  • AirOS 3.5.1-RC disponible

    Le firmware AirOS 3.5.1-RC (Release Candidate) est disponible depuis aujourd’hui. Elle concerne tous les modules Ubiquiti à l’exception des modules AirMax. Voici les nouveautés, en anglais comme toujours : Version 3.5.1-RC (04/20/2010) —————————— – fixed: B-only station can connect to G-only AP. – fixed: Enabling AutoACK on AP will not accept any station connection. Version 3.5.1-Beta (03/23/2010) ——————————- – new: Auto ACK implementation. – new: AirControl agent: Restore active heartbeat connections after firmware upgrade. – fixed: Crash when using HTC…

  • Wimax : mise en demeure !

    Sept opérateurs Wimax (Altitude Wireless, Axione, Bolloré Telecom, département de la Charente, collectivité territoriale de Corse, Société du Haut Débit, Nomotech) ont été mis en demeure par le gendarme des télécoms, l’Arcep, de tenir leurs engagements. d’ici le 30 juin 2012 : utilisation effective des fréquences dans l’ensemble des départements dans lesquels le Wimax est autorisé, avec déploiement d’un nombre de sites au moins égal à la moitié du nombre de sites que le titulaire s’était engagé à déployer au 30…

  • En voiture avec le Wimax !!

    Motorola a débuté des test d’intégration de sa carte Wimax X24, destinée à alimenter des applications de télémétrie à bord de nos véhicules. Le Vehicle Infrastructure Integration Consortium (VII) envisage un déploiement sur tout le territoire américain d’une infrastructure routière adaptée, ainsi qu’une intégration dans les nouveaux véhicules. La bande 5.9 GHz est actuellement utilisée en Californie pour des applications de péages, utilisant la technologie MARK IV. Cette gamme de fréquences est dédiée aux communications à courte distance. A ce…

  • Wimax 2 à 300 Mbps

    Un test de Wimax 2 à 300 Mbps, voici ce qu’a réalisé Samsung lors du CEATEC, un salon japonais. Est-ce une tentative pour redonner un nouveau souffle à ce Wimax bien moribond dans les pays industrialisé, se cantonnant souvent à établir de simples infrastructures dans les pays dits émergents ? Avec l’arrivée de la LTE, cette fameuse 4G devant profiter des fréquences laissées libres par l’arrêt des émissions TV analogiques, on ne peut que se poser des questions sur cette Nième tentative…

  • Le RCEA refuse le Wimax

    Clermain, mardi soir, le collectif Rassemblement des Clerminois pour un Environnement d’Avenir (NDR : oh le joli mot…), membre de l’association Robin des Toits, a manifesté dans le village et devant sa mairie du village pour refuser l’installation de l’antenne WiMax. Créé le 21 novembre, le RCEA fait circuler une pétition ayant déjà recueilli 100 signatures sur les 168 inscrits sur la liste électorale. Le plus amusant dans cette histoire, exception faite d’une communication systématiquement articulée autour de la peur, réside…

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.