Annonce

Réduire
Aucune annonce.

Aux experts unix : rien a voir avec x-plane : commande dans script

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Aux experts unix : rien a voir avec x-plane : commande dans script

    Bonjour;

    Pour créer une redirection IP et port d'un serveur (VPS) vers ma box je veut écrire un script qui récupère l'ip de la box et qui cré la règle de redirection.

    Voici mon essai, j'ai un problème avec l'intégration de la variable $HOST_IP_H dans la ligne iptables

    le script :

    Code:
    #/bin/sh                                                                                                                                                                                                                                                                                                                                          
    HOST_IP_H= dig +short adresse no-ip de la box                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    echo $HOST_IP_H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    echo 1 > /proc/sys/net/ipv4/ip_forward                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5001 -j DNAT --to-destination ${HOST_IP_H}:5001                                                                                                                                                                                                                                                                                                                                                                                
    iptables -A FORWARD -i eth0 -p tcp --dport 5001 -j ACCEPT
    merci

    Hervé
    La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
    X -plane 11 Win 11 Pro Gigabyte Z690 I7 12700K /64DDR5 5600Mhz RTX 3090 24Go

  • #2
    Envoyé par djetdail Voir le message
    Code:
    #/bin/sh                                                                                                                                                                                                                                                                                                                                          
    HOST_IP_H= dig +short adresse no-ip de la box                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    echo $HOST_IP_H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    echo 1 > /proc/sys/net/ipv4/ip_forward                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5001 -j DNAT --to-destination ${HOST_IP_H}:5001                                                                                                                                                                                                                                                                                                                                                                                
    iptables -A FORWARD -i eth0 -p tcp --dport 5001 -j ACCEPT
    Bonjour,

    première chose dans la ligne d'assignation que signifie "dig + short adresse no_ip box", je crois comprendre que tu veux affecter le numéro d'IP de ta box à ta variable. Correct?
    sinon le shell ne tolère aucun espace autour du signe ègal (HOST_IP_H=suite).
    Tu pourrais éviter la variable locale HOST_IP_H en mettant directement en dur l'adresse IP dans la ligne "iptables......... PREROUTING ...... --to-destination 192.168.x.x:5001 ( avec les x qui vont bien.)
    Enfin pour activer ip_forward (echo 1 > .........) il faut que la commande soit exécutée en mode superuser. Par défault il est à 0, tu vérifies par " cat /proc/sys/net/ipv4/ip-forward" qui doit retourner 1 si la commande est bien passée.
    Attention cette méthode est temporaire si tu reboots par défault ip-forward sera de nouveau à 0. pour le faire en dur il faut passer par sysctl.
    J'espère que cela t'aidera.

    Daniel
    Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
    Ubuntu 22.04.1 LTS 64bits
    X-Plane 12.0.8
    ToLiss : A321neo, A319, A346, A320neo
    Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
    Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
    FFA350

    Commentaire


    • #3
      Envoyé par papet30 Voir le message
      Bonjour,

      première chose dans la ligne d'assignation que signifie "dig + short adresse no_ip box", je crois comprendre que tu veux affecter le numéro d'IP de ta box à ta variable. Correct?
      oui, mais l'adresse IP dynamique qui malheureusement change :-(

      sinon le shell ne tolère aucun espace autour du signe ègal (HOST_IP_H=suite).
      c'est noté

      Tu pourrais éviter la variable locale HOST_IP_H en mettant directement en dur l'adresse IP dans la ligne "iptables......... PREROUTING ...... --to-destination 192.168.x.x:5001 ( avec les x qui vont bien.)
      Et non justement, ce script doit tourner sur un petit VPS (IP fixe), je doit donc :
      - entrer dans une variable la nouvelle adresse IP dynamique de la box
      - faire créer par le script une nouvelle redirection avec la nouvelle IP dynamique contenue dans la variable.



      Enfin pour activer ip_forward (echo 1 > .........) il faut que la commande soit exécutée en mode superuser. Par défault il est à 0, tu vérifies par " cat /proc/sys/net/ipv4/ip-forward" qui doit retourner 1 si la commande est bien passée.
      ca c'est ok

      Attention cette méthode est temporaire si tu reboots par défault ip-forward sera de nouveau à 0. pour le faire en dur il faut passer par sysctl.
      Je compte faire réaliser ce script régulièrement (crontab)

      J'espère que cela t'aidera.

      Daniel
      Oui, cela me fait progresser mais ma variable (qui s'appelle maintenant $host_h ) n'est toujours pas reconnue par la commande iptables :-(

      merci

      Hervé
      La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
      X -plane 11 Win 11 Pro Gigabyte Z690 I7 12700K /64DDR5 5600Mhz RTX 3090 24Go

      Commentaire


      • #4
        Re,
        sans être insdiscret ton modem box c'est Orange, SFR, Bouygues...?.En complèment tu as bien vérifié que tu as une adresse dynamique parceque chez SFR pa rexemple l'adresse est dynamique en ADSL mais fixe en fibre.

        Daniel
        Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
        Ubuntu 22.04.1 LTS 64bits
        X-Plane 12.0.8
        ToLiss : A321neo, A319, A346, A320neo
        Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
        Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
        FFA350

        Commentaire


        • #5
          Tu as oublié les quotes inverses autour de ta commande (AltGr-7 sur clavier français), du coup ta variable n'est pas correctement renseignée:
          Code:
          MAISON=`dig +short adresse no-ip de la box`
          Par ailleurs et sans pour autant être sûr de moi à 100%, il me semble quand même que l'option --to-destination ne supporte qu'une IP, pas un combo IP:port, cela donnerait donc:
          Code:
          iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5001 -j DNAT --to-destination $MAISON
          Je ne suis pas sûr que les autres règles soient nécessaires non plus.

          Plutôt que de lancer ça via cron, il vaudrait mieux un script lancé au démarrage ou par l'init avec une boucle infinie (et un sleep dedans). Ça te permettrait facilement de vérifier via dig si tu as une nouvelle adresse et ne refaire les iptables que quand cela se produit.

          Pour finir, +1 avec Daniel pour coller le forwarding dans sysctl une fois pour toutes.
          Ubuntu 22.04 LTS - Ryzen 9 5950X - 64GB DDR4 - RTX3080 12GB

          Commentaire


          • #6
            Envoyé par yoyoz Voir le message
            Par ailleurs et sans pour autant être sûr de moi à 100%, il me semble quand même que l'option --to-destination ne supporte qu'une IP, pas un combo IP:port.
            Bonsoir yoyoz
            uniquement pour info le combo "ip:port" est valide dans iptables, on peut même donner une plage de ports sous la forme "--to-destination xxx.xxx.x.x:80-100" par exemple.

            Bon vols.
            Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
            Ubuntu 22.04.1 LTS 64bits
            X-Plane 12.0.8
            ToLiss : A321neo, A319, A346, A320neo
            Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
            Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
            FFA350

            Commentaire


            • #7
              J'aurai aller dû lire la doc avant mais pour celle des iptables j'ai besoin d'aspirine à chaque fois ;-). J'espère que le coup des quotes suffira à résoudre son problème...
              Ubuntu 22.04 LTS - Ryzen 9 5950X - 64GB DDR4 - RTX3080 12GB

              Commentaire


              • #8
                Envoyé par yoyoz Voir le message
                J'aurai aller dû lire la doc avant mais pour celle des iptables j'ai besoin d'aspirine à chaque fois ;-). J'espère que le coup des quotes suffira à résoudre son problème...
                Re,
                ( humour ON) si tu veux j'ai un "iptables-tutorial" de 200 pages en pdf...!! (perso j'ai pas lu....).
                Oui les quotes inverses ca va marcher, mais je ne sais toujours pas comment Hervé récupère automatiquement l'IP de sa box, sinon en se connectant dessus. parce que, c'est sûr, la commande `dig + short adresse et le N° d'IP` va renvoyer l'IP.
                De toute façon il faut être certain d'avoir une adresse dynamique pour la box.
                Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
                Ubuntu 22.04.1 LTS 64bits
                X-Plane 12.0.8
                ToLiss : A321neo, A319, A346, A320neo
                Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
                Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
                FFA350

                Commentaire


                • #9
                  Pour la doc je passe pour le moment! :-) (mais je veux bien pour mes archives).

                  Pour le dig, c'est en fait dig +short nom, et ça te renvoie l'adresse, donc pas de souci. Sans le +short tu as un retour comparable à nslookup, en plus moche et inutilisable dans un script.

                  (EDIT) le dig peut retourner plusieurs résultats, même avec +short. A creuser...
                  Dernière modification par yoyoz, 15 juillet 2017, 20h00.
                  Ubuntu 22.04 LTS - Ryzen 9 5950X - 64GB DDR4 - RTX3080 12GB

                  Commentaire


                  • #10
                    Bonjour;

                    @papet30
                    C'est un abonnement sosh-orange avec un IP dynamique.
                    Pour la récupération de l'IP, pas de problème, j'ai une adresse no-ip mis à jour par la box, donc comme le dit yoyoz pas de problème de ce coté la.
                    Ton pdf m’intéresse également.

                    @yoyoz
                    J'essaie avec les quotes inverses
                    Par ailleurs et sans pour autant être sûr de moi à 100%, il me semble quand même que l'option --to-destination ne supporte qu'une IP, pas un combo IP:port, cela donnerait donc:
                    J'ai lu des exemples où ils lient les deux IP et ports ...... ??




                    Oui la doc iptables est ardue, il va falloir que je réactive plus de 3 neurones :-)
                    Merci à vous
                    Je vous fait un retour

                    Hervé
                    La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
                    X -plane 11 Win 11 Pro Gigabyte Z690 I7 12700K /64DDR5 5600Mhz RTX 3090 24Go

                    Commentaire


                    • #11
                      CA MARCHE !!!!

                      Après exécution du script voici le résultat d'une iptables -t nat -n -L

                      Chain PREROUTING (policy ACCEPT)
                      target prot opt source destination
                      DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:92.144.xxx.xxx:9000

                      sur ma box j'ai créer une NAT/PAT qui redirige le port 9000 vers le port 80 d'un raspberry et quand je fait IP_serveur:9000 ma jolie page du rasp s'affiche.

                      Maintenant il faut que je comprenne cela

                      Plutôt que de lancer ça via cron, il vaudrait mieux un script lancé au démarrage ou par l'init avec une boucle infinie (et un sleep dedans). Ça te permettrait facilement de vérifier via dig si tu as une nouvelle adresse et ne refaire les iptables que quand cela se produit.

                      Pour finir, +1 avec Daniel pour coller le forwarding dans sysctl une fois pour toutes.
                      Je cherche et vous reviens

                      Hervé
                      La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
                      X -plane 11 Win 11 Pro Gigabyte Z690 I7 12700K /64DDR5 5600Mhz RTX 3090 24Go

                      Commentaire


                      • #12
                        Envoyé par djetdail Voir le message
                        J'ai lu des exemples où ils lient les deux IP et ports ...... ??
                        Je n'avais lu ni la doc ni les exemples , mais heureusement @papet30 a rectifié

                        Envoyé par djetdail Voir le message
                        CA MARCHE !!!!
                        Bravo!

                        Envoyé par djetdail Voir le message
                        Maintenant il faut que je comprenne cela
                        La mise en place ve dépendre du système de démarrage (systemd ou upstart) mais n'hésite pas à regarder ce qui est en place et à pomper. Le but est de créer un sciprt qui sera lancé au démarrage, après le réseau, et dont le système n'attendra pas la fin (comme quand il lance ta session X par exemple), mais qu'il relancera éventuellement si il se plante (c'était tellement facile à mettre en place à l'époque de l'inittab...).

                        Voilà le pseudo-code pour le script:
                        Code:
                        #!/bin/bash
                        MAISON=`dig +short adresse no-ip de la box`
                        while true; do
                        	# on attend 5 minutes
                        	sleep 300
                        	NEW=`dig +short adresse no-ip de la box`
                        	if [ "$MAISON" != "$NEW" ]; then
                        		MAISON=$NEW
                        		# mise à jour des iptables
                        		iptables ...
                        	fi
                        done
                        (Je dis pseudo-code car je n'ai pas lu la doc de bash non plus )
                        Ubuntu 22.04 LTS - Ryzen 9 5950X - 64GB DDR4 - RTX3080 12GB

                        Commentaire


                        • #13
                          Envoyé par djetdail Voir le message
                          CA MARCHE !!!!Maintenant il faut que je comprenne cela

                          Hervé
                          Bonjour Hervé,
                          - afin que le forwarding soit activer par défault il faut que dans le fichier "/etc/sysctl.conf" tu décommentes (suppression du # )la ligne 28 : #net.ipv4.ip_forward=1
                          - pour l'activation au démarrage c'est dans "/etc/init.d" c'est là que cela se passe.Tu écrit ton script shell, tu n'oublies pas de le rendre éxécutable.
                          Mais comme tu veux le lancer périodiquement,tu as raison la solution c'est "cron et crontab", et yoyoz a la bonne idée de vérifier que ton adresse a changé avant de lancer ton script.

                          Par curiosité je te répète ma question : as tu vérifié que ton adresse box est bien dynamique?

                          Bon développement.
                          Dernière modification par papet30, 16 juillet 2017, 13h38.
                          Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
                          Ubuntu 22.04.1 LTS 64bits
                          X-Plane 12.0.8
                          ToLiss : A321neo, A319, A346, A320neo
                          Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
                          Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
                          FFA350

                          Commentaire


                          • #14
                            @yoyoz
                            Bravo!
                            Merci, un bravo de yoyoz c'est collecteur ..... ;-)

                            La mise en place ve dépendre du système de démarrage (systemd ou upstart) mais n'hésite pas à regarder ce qui est en place et à pomper. Le but est de créer un sciprt qui sera lancé au démarrage, après le réseau, et dont le système n'attendra pas la fin (comme quand il lance ta session X par exemple), mais qu'il relancera éventuellement si il se plante (c'était tellement facile à mettre en place à l'époque de l'inittab...).
                            Voilà le pseudo-code pour le script:
                            Je regarde, je vais faire des essais (je maitrise mieux crontab)


                            @papet30
                            - afin que le forwarding soit activer par défault il faut que dans le fichier "/etc/sysctl.conf" tu décommentes (suppression du # )la ligne 28 : #net.ipv4.ip_forward=1
                            OK ce qui veut dire que je peut virer la ligne ci dessous dans mon script oui ? non ?
                            echo 1 > /proc/sys/net/ipv4/ip_forward

                            - pour l'activation au démarrage c'est dans "/etc/init.d" c'est là que cela se passe.Tu écrit ton script shell, tu n'oublies pas de le rendre éxécutable.
                            Mais comme tu veux le lancer périodiquement,tu as raison la solution c'est "cron et crontab", et yoyoz a la bonne idée de vérifier que ton adresse a changé avant de lancer ton script.
                            l'activation au démarrage c'est si je ne fait pas de crontab ?
                            si je fait un crontab je n'ai pas besoin de mettre mon fichier dans le répertoire init.d ?

                            Par curiosité je te répète ma question : as tu vérifié que ton adresse box est bien dynamique?
                            Oui j'ai une IP dynamique qui se modifie au reboot de la box ou au bon vouloir d'orange.

                            Bon développement
                            Merci .... mes neurones ne sont pas contents :-)

                            Je vais essayer de configurer également un serveur de courrier pour que mon serveur m'avertisse à chaque changement d'IP de la box


                            Hervé
                            Dernière modification par djetdail, 16 juillet 2017, 15h05.
                            La lecture des manuels, tutos, docs ... libère le pilote de la machine :-)
                            X -plane 11 Win 11 Pro Gigabyte Z690 I7 12700K /64DDR5 5600Mhz RTX 3090 24Go

                            Commentaire


                            • #15
                              Envoyé par djetdail Voir le message
                              @papet30 OK ce qui veut dire que je peut virer la ligne ci dessous dans mon script oui ? non ?
                              Oui, par sysctl.conf à 1 le forwarding est toujours activer au démarrage.

                              l'activation au démarrage c'est si je ne fait pas de crontab ?
                              si je fait un crontab je n'ai pas besoin de mettre mon fichier dans le répertoire init.d ?
                              Oui, "/etc/init.d" c'est pour le lancement au boot de tous les process, démons et/ou tâches de fond du système et/ou de l'utilisateur.
                              pour un lancement périodique c'est cron et contrab ( regarde aussi la commande "at")

                              Oui j'ai une IP dynamique qui se modifie au reboot de la box ou au bon vouloir d'orange.
                              j'ai insisté parce que pour moi par exemple avec SFR (malheureusement!!!!) je suis censé en ADSL être en dynamique, mais je suis en IP fixe ( remarque je préfère )

                              Merci .... mes neurones ne sont pas contents :-)
                              Je vais essayer de configurer également un serveur de courrier pour que mon serveur m'avertisse à chaque changement d'IP de la box
                              Hervé
                              Eh bien bravo tu attaques dans le dur! manager les techniques réseaux c'est pas anecdotique. futur guru.....

                              Sans vouloir jouer les vieux crabes un site ci-après assez sympa


                              Bon courage
                              Daniel.
                              Asus Z390-E , I7-9700K 32Gb (3200 Mz)- SSD 950Pro 256 Gb - SSD 980 1Tb - SSHD 1Tb - 2 x HDD 3Tb - HDD 6Tb (USB_3.1) - HDD 4Tb (USB3.0) - Asus Strix 1070 (Driver 535.161.07)
                              Ubuntu 22.04.1 LTS 64bits
                              X-Plane 12.0.8
                              ToLiss : A321neo, A319, A346, A320neo
                              Aerobask : Viperjet, DA50G, DA62, DA42NG, Phenom300,
                              Epic Victory, Legacy_RG, Epic E1000G, Shark UL Mustang-P51D
                              FFA350

                              Commentaire

                              Chargement...
                              X