Forum Linux.général Auto-hébergement derrière CGNAT et OpenVPN avec connexion internet d'un tiers

Posté par  . Licence CC By‑SA.
Étiquettes :
2
12
mai
2025

Bonjour la compagnie 👋,

Je lance aujourd'hui une bouteille à la mer.
Bien que je n'avais plus le temps de faire autre chose que les mises à jour sur mon petit serveur auto-hébergé à la maison, celui-ci était bien utilisé, notamment par ma famille que j'avais (difficilement) réussi à convaincre de basculer sur mon serveur de messagerie matrix (avec en complément un bridge whatsapp)

Ma ligne internet est coupée depuis 5 jours 🥵 et la réparation via le FAI pourrait désormais ne pas avoir lieu avant la fin du mois 😱…
Une box 4G m'a été prêtée mais évidement pas possible d'attaquer l'IP publique de cette box 4G pour atteindre le serveur.

Depuis j'essaye de mettre en place un VPN pour utiliser la connexion internet d'un tiers habitant à proximité. J'ai réussi à installer un serveur temporaire OpenVPN chez lui et à établir la connexion depuis le réseau derrière la box 4G 👍️

🆘 Si certains sont calés en iptables, nftables et OpenVPN, j'aurais besoin d'un coup de mains pour que tout cela communique correctement. (ce n'est pas le cas actuellement).
=> Je suppose qu'il faut créer des routes, des ponts, d'autres choses?

Avant la coupure cela fonctionnait ainsi:
001_Hebergement avant panne

Chaque service tourne dans un conteneur LXC unpriviligied indépendant.
Alors je sais beaucoup de services étaient attaqués directement par leur port alors qu'il aurait mieux fallu passer par le reverse proxy. Mais bon je n'y suis pas arrivé pour tous les services et cela fonctionnait donc voilà :)

Mise en place de la Box 4G, du VPN hébergé sur le serveur (à gauche ma maison avec le serveur qui fonctionnait jusque là; à droite la maison d'un tiers chez qui j'ai installé le serveur temporaire avec OpenVPN (également dans un conteneur LXC unprivilegied) (ce qui est entouré en vert est nouveau):
002_Hebergement avec solution secours 4G et tiers

J'arrive à établir la connexion entre mon routeur OpenWRT (à gauche) ou un PC en 192.168.11.4 (à gauche) et le serveur OpenVPN (à droite):
003_OpenVPN connecte
Lorsque c'est fait, je peux me connecter en ssh aux différents conteneurs en 10.0.4.x de droite à travers le VPN. Par contre, je perds l'accès internet à gauche.

Voilà il me reste à configurer tout ça, ajouter les règles pour le client extérieur attaquant l'IP publique de droite atteigne son service sur le serveur de gauche en passant par le VPN:
Reseau14_004_Comment arriver a faire ca

J'ai déjà sollicité l'aide précieuse du salon matrix auto-hébergement ce qui a notamment permis d'avoir le subnet du serveur temporaire de droite différent de celui gauche (10.0.4.0 vs 10.0.3.0)
Il m'a été conseillé de faire les choses suivantes :
Sens Entrée:
- Une redirection vers le serveur Temporaire de chacun des port => Je pense que c'est fait (voir règles décrites sur le croquis 004)
- X Nat sur l'ip 10.0.3.11/32, sur l'ip 10.0.3.12/32 , sur l'ip 10.0.3.13/32 etc… ou voir pour faire du /31 / 30 etc… => C'était avant d'arriver à changer le subnet de lxcbr0 sur le serveur temporaire (de droite). Du coup il doit être possible de faire cela d'un coup pour l'ensemble du subnet? Je n'ai aucune idée de comment faire
- Routage du serveur temporaire de 10.0.3.11/32, 10.0.3.12/32, 10.0.3.13/32 etc…. via le serveur OpenVPN => Idem
- Vérifier l'ip forward sur le serveur OpenVPN et mettre le routage de 10.0.3.11/32, 10.0.3.12/32, 10.0.3.13/32 etc… vers le client OpenVPN => Idem
- Vérifier l'ip forward sur le client OpenVPN => Je suppose qu'il s'agit de ce que j'ai mis dans la config du client OpenVPN, je vais décrire ci-dessous mais je ne maîtrise pas

Sens Sortie:
- Router sur les serveur 10.0.3.11/32, 10.0.3.12/32, 10.0.3.13/32 l'ip du serveur temporaire en /32 via le client OpenVPN => C'était avant d'arriver à changer le subnet de lxcbr0 sur le serveur temporaire (de droite). Du coup il doit être possible de faire cela d'un coup pour l'ensemble du subnet? Je n'ai aucune idée de comment faire
- Sur le client OpenVPN faire le routage l'ip du serveur temporaire en /32 => Idem

La config du serveur OpenVPN propre au réseau:

port 1194
proto udp
dev tun
topology subnet
client-config-dir ccd
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 5 60
cipher AES-256-GCM
max-clients 5
max-routes-per-client 50
stale-routes-check 300
verify-client-cert require
auth SHA512
tls-server
tls-version-min 1.3
remote-cert-tls client
crl-verify crl.pem
push "block-outside-dns"
user openvpn
group openvpn
mute 10
explicit-exit-notify 1

La config du client OpenVPN propre au réseau:

client
dev tun
remote IPPubliquedutiers(droite) 1194 udp
auth SHA512
cipher AES-256-GCM
tls-client
tls-version-min 1.3
remote-cert-tls server
connect-retry 5 600
resolv-retry infinite
nobind
verb 3
mute 10
explicit-exit-notify 1

Voilà j'aimerais mettre en place tout ce qu'il faut pour que:
- Le serveur derrière la Box 4G en CGNAT soit accessible de l'extérieur au travers du VPN
- Avoir accès internet sur le réseau de gauche lorsque le VPN est connecté (via la Box 4G ou via la connexion du tiers, peu importe.)
- Ne rien rater sur la sécurité du bouzin
- Comprendre ce que je fais (oui parce que pour la mise en place du VPN j'ai suivi au moins 6 tutos avec certains points restés obscurs)

En tout cas, déjà, merci beaucoup d'avoir lu jusque là ^

  • # le plus simple

    Posté par  . Évalué à 4 (+1/-0). Dernière modification le 12 mai 2025 à 11:51.

    Chez TOI :
    1°) chez toi, definir le client VPN comme la gatewway par defaut de tes machines, le plus simple donne lui simplement la meme IP que ta box internet (celle qui ne fonctionne plus, et debranche celle-ci)
    seul le client VPN aura comme passerelle la box 4G

    => bon c'est deja le cas, tu as un routeur openWRT en coupure entre ton ADSL/4G et ton LAN
    => OK

    Chez ton voisin
    1°) masquer tous tes trafics derrieres ton serveur openvpn, ainsi toutes tes machines sortantes seront vu comme etant le "serveur VPN", le retour se fera alors par la box du voisin, qui renverra vers le serveur VPN, qui renverra au client

    2°) Pour les services Externes qui vont rentrés par la box du voisin, redirection de port sur la box ou DMZ vers le serveur VPN, puis routage classique

    2.1°) ajouter une route vers le reseau LAN de gauche (chez toi derriere la 4G) via le tunnel VPN du server VPN

    ip r a 10.0.x.y/24 via ipclientVPN

    2.2°) faire des regles de nat prerouting (redirection de port sur le serveur VPN) pour que le port XXXX coté LAN du server VPN, soit renvoyé vers l'IP YYYY de ton lan sur le port XXXX

    • [^] # Re: le plus simple

      Posté par  . Évalué à 1 (+0/-0).

      Bonjour,

      Merci beaucoup pour ces réponses. Ne travaillant pas dans l'informatique, j'essaye de traduire cela en faisant des recherches.. Est-ce qu'il est possible d'avoir un peu de détail/confirmation ci-après ?

      Chez le voisin:
      1°)
      Sur le conteneur serveur OpenVPN j'avais fait cela:
      sudo nano /etc/sysctl.conf

      avec ajout de:
      net.ipv4.ip_forward=1

      Puis cette règle iptable:
      sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

      Est-ce qu'il faut faire quelque chose de plus?

      2°)
      Sur dernier croquis j'avais indiqué tous les ports routés, j'espère qu'il y a tout.

      En résumé c'était : Sur box fibre du voisin : ports routés vers IP du serveur temporaire
      Sur serveur temporaire : port routés vers conteneur du serveur OpenVPN

      Et là je ne sais pas comment faire le reste du routage. Je suppose qu'il y a des règles à mettre dans le conteneur serveur OpenVPN

      2.1°)
      Donc c'est une commande en dehors d'iptables pour ajouter une route?
      Du coup si j'ai bien compris de l'ip du conteneur serveur OpenVPN (côté voisin) vers le routeur OpenWRT client OpenVPN (côté chez moi)? du coup cela? :
      ip r a 192.168.11.1/24 via 10.0.4.17 dev eth0

      2.2°)
      Donc là je mets simplement en place dans le conteneur serveur OpenVPN le routage des ports vers le routeur OpenWRT de l'autre côté?
      Comme ceci?:
      iptables -t nat -A PREROUTING -p tcp --dport 3001 -j DNAT --to-destination 192.168.11.1
      iptables -t nat -A PREROUTING -p tcp --dport 3002 -j DNAT --to-destination 192.168.11.1
      iptables -t nat -A PREROUTING -p tcp --dport 3xxx -j DNAT --to-destination 192.168.11.1

      Est-ce que grâce au VPN il aura bien accès au réseau 192.168.11.x de chez moi?

      Ensuite°)
      Comment faire pour que le côté chez moi (gauche) utilise le VPN pour accéder à l'internet? Le point 1°) suffit?

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.