Forum Linux.debian/ubuntu Raspberry gateway vpn + iptable + nginx

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
18
mar.
2019

Bonjour à tous,

J'ai un petit soucis, je me suis monté un client vpn sur mon raspberry et tout mon réseau interne transit via ce vpn pour aller sur le net.
J'aimerai à présent utiliser nginx, mais lorsque mon vpn est connecté le site est inaccessible.
J'arrete le service openvpn et nginx est UP…

Je pense que le problème est lié à cette commande que j'ai passé :
iptables --table nat -A POSTROUTING -o tun0 -j MASQUERADE

D'après ce que je comprends tout transit par la carte tun0 (vpn) et du coup nginx est down

J'ai tenté de modifier le fichier de config openvpn avec des commandes :
route-nopull
route 0.0.0.0 128.0.0.0

mais rien a faire je suis dépassé.
Je suis sur que c'est une connerie mais je suis noobs sur iptable etc..

Si quelqu'un à une idée ? Merci :)

  • # ip forward

    Posté par  . Évalué à 2.

    Salut Grad76

    Est ce qu'il n'y a que ton nginx qui n'est pas joignable à travers ton tunnel ou tu n'as aucun accès à l’extérieur ?

    As tu vérifié que le forwarding est actif dans /etc/sysctl.conf ?

    (https://linuxconfig.org/how-to-turn-on-off-ip-forwarding-in-linux)

    • [^] # Re: ip forward

      Posté par  . Évalué à 1.

      Salut fe3lgo0d,

      J'ai effectivement activé le forwarding => net.ipv4.ip_forward = 1

  • # Serveur VPN perso ?

    Posté par  . Évalué à 1.

    Concernant le serveur VPN il est à toi ?

    S'il n'est pas à toi, attention à bien vérifier que tu peux faire du port forwarding dessus… sinon effectivement une fois connecté au VPN tu ne pourras plus accéder à ton client depuis l'extérieur.

    • [^] # Re: Serveur VPN perso ?

      Posté par  . Évalué à 1.

      Salut ptit_poulet,

      Je n'ai rien d'autre qu'un client vpn et nginx qui tourne.

      • [^] # Re: Serveur VPN perso ?

        Posté par  . Évalué à 1.

        Je pense que ce que ptit_poulet voulait mettre en évidence, c'est est ce que le tuyau de sortie t'appartient ou tu passes par un fournisseur de services VPN.

        Car, et il a raison de le faire remarquer, si tu n'es pas maître du VPN en sortie, alors tu devras t'adapter, alors que si c'est ton propre VPN hébergé sur un serveur sur le net, alors il faut adapter ta conf.

        • [^] # Re: Serveur VPN perso ?

          Posté par  . Évalué à 1. Dernière modification le 19 mars 2019 à 12:32.

          En fait je vais vous détaillé mon réseau :

          Mes équipements se connectent sur la freebox : 192.168.10.252
          Le serveur DHCP est le raspberry et envoi en gateway 192.168.10.111
          Comme dit de ce fait tout transit via VPN (presta NordVPN).

          J'ai ouvert le port 443 et 80 qui redirige sur l'IP de mon rasp 192.168.10.111
          Le site est accessible en interne seulement et KO depuis l'extérieur lorsque mon service openvpn tourne.

          Je ne comprends pas en quoi le fournisseur est en question ?

          Sachant que j'ai une carte rj et une wifi, je peux pas faire une modif pour passer par la carte wifi en interne et dédié la rj45 pour mon website ?

          Certains ont pu résoudre via des modification dans le fichier de conf de nordvpn en ajoutant des lignes de ce genre : route-nopull

          mais la ca sort de mon domaine de compétence.

          • [^] # Re: Serveur VPN perso ?

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            C'est normal,
            quand le vpn est en haut, la connexion rentre via l'adresse ip publique de ta box, et le raspberry pi répond via le vpn vu que ça devient la route par défaut.
            Quand ton vpn est déconnecté c'est la box qui redevient route par défaut.

            Tu pourrait contourner le problème en faisant du masquerade sur la box en direction du raspberry (on peut le faire facilement avec un vrai routeur genre pfsense) (dans ce cas la le raspberry voit comme adresse entrante celle de ton routeur (un nat à l’envers)).

            Le plus simple est de faire tourner ton nginx sur un autre raspberry (que tu configure le réseau manuellement en mettant comme route ta box), ou faire tourner ton nginx dans un container lxc (je ne sais pas si on peut sur arm) qui aurait sa propre configuration réseau par défaut.

            Ou voir si nordvpn permet de faire de la redirection de port.

  • # Soluce

    Posté par  . Évalué à 2. Dernière modification le 19 mars 2019 à 12:39.

    J'ai tenté de modifier le fichier de config openvpn avec des commandes :
    route-nopull
    route 0.0.0.0 128.0.0.0

    1) solution 1
    Éditer le fichier de configuration du serveur :

    sudo nano /etc/openvpn/server.conf
    

    Cherchez (CTRL+W) push "redirect-gateway def1" et vérifier que la ligne est bien commentée (ou supprimée) en placant un dièse (#) en tout début de la ligne.

    2) solution 2

    As-tu tenté d'ajouter --route-nopull à ta commande de lancement du client openvpn comme suit ?

    openvpn --route-nopull --cd /etc/openvpn --config myUser.ovpn
    
    • [^] # Re: Soluce

      Posté par  . Évalué à 1.

      Solution 1 :

      J'utilise un fichier client.conf et non un fichier .ovpn
      Dans ce fichier je n'ai pas de redirect-gateway def1

      Solution 2 :
      J'ai tenté et le problème persiste.

      Pour la mise en place de tout cela, j'ai suivi le tuto suivant
      http://blog.dahanne.net/2015/01/05/utiliser-le-raspberry-pi-comme-passerelle-openvpn-pour-permettre-un-acces-vpn-a-tout-votre-reseau-local/

      Si ça peut éclairer..

      merci :)

      • [^] # Re: Soluce

        Posté par  . Évalué à 1.

        En complément, voici mon fichier de conf openvpn :

        client
        dev tun
        proto tcp
        remote-random
        port 443
        remote 77.243.177.55
        resolv-retry infinite
        nobind
        tun-mtu 1500
        tun-mtu-extra 32
        mssfix 1450
        persist-key
        persist-tun
        ping 15
        ping-restart 0
        ping-timer-rem
        reneg-sec 0
        comp-lzo no

        remote-cert-tls server

        mute 10000

        auth-user-pass id.txt
        verb 3
        pull
        fast-io
        cipher AES-256-CBC
        auth SHA512

        mon certificat

        • [^] # Re: Soluce

          Posté par  . Évalué à 1. Dernière modification le 19 mars 2019 à 14:27.

          Penses à censurer ton adresse IP et toutes autres informations plus ou moins sensible quand tu partages des fichiers de conf etc ;)

          Tu peux aussi utiliser le balisage (indiqué en bas de page lorsque tu postes un nouveau message) afin que le site met en forme correctement tes copier-coller :)

          • [^] # Re: Soluce

            Posté par  . Évalué à 1.

            Je n'ai pas partagé d'information confidentiel, l'adresse IP en question est simplement un serveur VPN de NordVPN ;-)

        • [^] # Re: Soluce

          Posté par  . Évalué à 1. Dernière modification le 19 mars 2019 à 14:38.

          Dans ta conf je lis "pull" dont voici la documentation :

          This option must be used on a client which is connecting to a multi-client server. It indicates to OpenVPN that it should accept options pushed by the server, provided they are part of the legal set of pushable options (note that the–pull option is implied by –client ).In particular, –pull allows the server to push routes to the client, so you should not use –pull or –client in situations where you don’t trust the server to have control over the client’s routing table.
          

          Si tu la supprimes, normalement le serveur ne va plus pouvoir ajouter des routes (et donc la commande route -n devrait être bien différente avant et après suppression de cette option).
          Par contre il faudra ajouter manuellement à ton système d'exploitation les nouvelles routes.

          sudo route add -net 10.8.1.0 netmask 255.255.255.0 gw 10.8.0.1 dev tun0
          

          Commande récupérée ici qu'il faudra adapter en fonction de tes envies. De souvenir, cette commande est non persistante (donc en cas de redémarrage, il faut la relancer).

  • # routage assymetrique

    Posté par  . Évalué à 2.

    quand tous les services sont UP

    ton client web arrive par la box -> cause à ton rpi/ngnix -> qui repond via le VPN

    du coup personne ne recoit le paquet quand la reponse recue ne vient pas de l'adresse interrogée

    il n'y a pas trop de solution "propre" pour faire cela,
    d'un coté du veux tout faire sortir par le VPN (pour te cacher ?)
    de l'autre tu veux faire rentrer un service sur ton IP publique (pour etre visible ?)

    c'est contradictoire, et ca foire :p

    la solution serait donc de pouvoir marquer le paquet qui entre sur le port 80/443 du RPI
    pour que ce paquet et les reponses soient ensuite routés vers la box.

    il faut donc jouer avec iptables mangle pour marquer le dit paquet,
    avec ip rule pour changer de table de routage si le paquet est marqué, et l'envoyer vers la route via la box par defaut

Suivre le flux des commentaires

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