# Accès distant et vpn

**URL:** <https://www.debian-fr.org/t/acces-distant-et-vpn/84934>\
**Category:** Support Debian\
**Created:** [Juillet 7, 2021, 4:27 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934 "2021-07-07T04:27:07Z")\
**Posts on this page:** 19\
**Page:** 2

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2021, 2:13 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/21 "2021-07-14T14:13:01Z")

</div>

> [@toto69](#):
>
> > [@PascalHambourg](#):
> >
> > les règles doivent être ajoutées une fois au démarrage.
> 
> donc pas dans le script ?

Si, mais quand $reason = PREINIT comme déjà dit.

> [@toto69](#):
>
> çà je ne sais pas où le mettre !?

Dans le script, et pas lié au if sur $interface.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 14, 2021, 3:25 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/22 "2021-07-14T15:25:30Z")

</div>

> [@PascalHambourg](#):
>
> Je ne vois paque ce que viennent faire l’echo et l’exec.

l’echo c’est pour que les erreurs s’inscrivent dans un fichier si la connexion ne se fait pas. Le 'exec c’est pour terminer le script.  
J’ai mis le ‹&nbsp;fi&nbsp;› à la fin de la ligne correspondant à l’ajout de la route.  
J’ai mis la parenthèse à la fin de la syntaxe ‹&nbsp;case&nbsp;›.

```
            #!/bin/bash
    # Si l'interface est ce qui est entre crochet : enxb827ebf0443a alors une route dans la table de routage n°100 par défaut sur la passerelle 192.168.1.1 sera ajoutée #

            if [“${interface}” = “enxb827ebf0443a”]; then

# lorsque l'interface ethernet sera configurée en DHCP#

            case “${reason}” in BOUND)
                      route add default via 192.168.1.1 table 100
           fi

        case "$reason" = PREINIT)
                  rule add from 192.168.1.0/24 table 100
                  rule add to 192.168.1.0/24 table main

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 14, 2021, 5:18 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/23 "2021-07-14T17:18:48Z")

</div>

Ça ne va pas.  
Il manque le fi pour terminer le if.  
La syntaxe du case est incorrecte.  
Si tu comptes utiliser un case avec $reason, il faut le mettre autour du if sur l’interface, et pas dedans.  
Je ne vois paque ce que viennent faire l’echo et l’exec.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 15, 2021, 8:08 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/24 "2021-07-15T08:08:04Z")

</div>

Je ne sais pourquoi ma réponse s’est intercalée entre les deux précédents messages ?

J’ai modifié le script.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 15, 2021, 11:23 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/25 "2021-07-15T11:23:18Z")

</div>

> [@toto69](#):
>
> l’echo c’est pour que les erreurs s’inscrivent dans un fichier si la connexion ne se fait pas. Le 'exec c’est pour terminer le script.

Ton `echo` ne fait qu’écrire le texte qui suit sur la sortie standard, pas la sortie d’erreur.  
`exec` sans commande ne termine pas le script, et sa redirection de la sortie d’erreur dans un fichier ne va rien écrire puisque la seule commande qui suit est `exit` qui termine le script. Il faudrait le mettre au début du script.

> [@toto69](#):
>
> Je ne sais pourquoi ma réponse s’est intercalée entre les deux précédents messages ?

Tu as modifié ton message au lieu d’en créer un nouveau.

> [@toto69](#):
>
> J’ai modifié le script.

Il y a encore des erreurs et des maladresses.  
La syntaxe des `case` n’est toujours pas bonne, il manque les `;;` à la fin de chaque liste de commande et les `esac` pour terminer les `case`. D’autre part `case` n’est intéressant que s’il y a plusieurs valeurs d’une expression à tester, ce qui n’est pas le cas ici, donc un simple `if` suffirait. Tu pourrais utiliser un `case` sur `$reason` en le mettant en premier, et faire le `if` sur `$interface` dans le cas ou `$reason` est égal à `PREINIT`.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 15, 2021, 1:18 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/26 "2021-07-15T13:18:15Z")

</div>

script 1

```nohighlight
#!/bin/bash

# L'interface ethernet est configurée donc une nouvelle route est ajoutée 
            case “${reason}” in BOUND | “${interface}” = “enxb827ebf0443a”)
                    route add default via 192.168.1.1 table 100
            ;;
            esac
# PREINIT : dhcpcd démarre et toute pré-initialisation est terminée. 
           if ["$reason" = PREINIT] 
           then
                  rule add from 192.168.1.0/24 table 100
                  rule add to 192.168.1.0/24 table main
           fi

```

J’ai fait un deuxième script qui reprend ce que tu me conseilles de faire :

Script2

```
#!/bin/bash

# Tu pourrais utiliser un `case` sur `$reason` en le mettant en premier 

                case “$reason” in BOUND)
                      rule add from 192.168.1.0/24 table 100
                      rule add to 192.168.1.0/24 table main
                ;;
                esac

# et faire le `if` sur `$interface` dans le cas ou `$reason` est égal à `PREINIT`

               if [“${interface}” = “enxb827ebf0443a”] && ["$reason" = PREINIT]
               then
                      route add default via 192.168.1.1 table 100
               fi

```

Et comme les deux précédents ne me plaisent pas j’en ai fait un troisième

Script 3:

```nohighlight
#!/bin/bash

# la route doit être ajoutée uniquement lorsque l’interface ethernet est configurée, soit si $interface = enxb827ebf0443a et $reason = BOUND (si DHCP) ou STATIC

if [“${interface}” = “enxb827ebf0443a"]; then
    case “${reason}” in BOUND | STATIC)
        route add default via 192.168.1.1 table 100
        ;;
    esac
fi

# et les deux règles ne doivent être ajoutées qu’une seule fois au démarrage, donc si 

if ["${reason}=PREINIT]; then
            rule add from 192.168.1.0/24 table 100
            rule add to 192.168.1.0/24 table main
fi

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 15, 2021, 2:28 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/27 "2021-07-15T14:28:39Z")

</div>

Je sens qu’on n’y arrivera pas de cette façon, il va falloir que je te montre quand j’aurais un moment…

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 15, 2021, 2:59 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/28 "2021-07-15T14:59:52Z")

</div>

Entendu. Merci

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 15, 2021, 8:38 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/29 "2021-07-15T20:38:59Z")

</div>

Voilà, quelque chose comme ceci :

```
#!/bin/sh

# si tu veux des logs d'erreur
exec 2> /var/log/routage_avance.log

case “$reason” in
  PREINIT)
    ip rule add from 192.168.1.0/24 table 100
    ip rule add to 192.168.1.0/24 table main
    ;;
  BOUND)
    if [“$interface” = “enxb827ebf0443a”] ; then
      ip route add default via 192.168.1.1 table 100
    fi
    ;;
esac
```

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 15, 2021, 8:53 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/30 "2021-07-15T20:53:11Z")

</div>

Merci. J’en suis effectivement encore bien loin ! Mais ça m’a intrigué et amusé. Je t’en remercie car je vais creuser l’affaire.  
Je teste demain. Et comme j’ai des logs, je vais voir ce qui se passe.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 16, 2021, 11:54 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/31 "2021-07-16T11:54:05Z")

</div>

Il y a quelque chose que je n’ai encore pas dû faire correctement :

```nohighlight
# nano /etc/dhcpcd.exit-hook

```

copier-coller du script

```nohighlight
# chmod +x /etc/dhcpcd.exit-hook

#reboot

```

Cela ne fonctionne pas. Aucun accès exterieur. J’ai voulu aller voir dans le fichier log 'routage\_avance.log". Rien

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 16, 2021, 12:57 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/32 "2021-07-16T12:57:33Z")

</div>

Tu peux regarder si quelque chose a été ajouté avec

```
ip rule
ip route ls table 100

```

Tu peux aussi instrumenter le script en ajoutant ceci :

```
echo $(date) reason="$reason" interface="$interface" >> /var/log/dhcpcd.exit-hook.log

```

et regarder ce que contient /var/log/dhcpcd.exit-hook.log après le démarrage.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 16, 2021, 1:06 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/33 "2021-07-16T13:06:57Z")

</div>

```
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
root@raspberrypi:/home/pi# ip route ls table 100
root@raspberrypi:/home/pi#

```

J’ai ajouté la ligne au début du script, juste en dessous de ‹&nbsp;exec 2\> /var/log/routage\_avance.log&nbsp;›

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 16, 2021, 1:08 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/34 "2021-07-16T13:08:25Z")

</div>

> [@toto69](#):
>
> J’ai voulu aller voir dans le fichier log 'routage\_avance.log". Rien

Le fichier a été créé au moins ? Si oui ça veut au moins dire que le script est exécuté.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 16, 2021, 1:11 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/35 "2021-07-16T13:11:29Z")

</div>

oui il a été créé. Je m’absente une ou deux heures.

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 16, 2021, 3:24 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/36 "2021-07-16T15:24:49Z")

</div>

> [@PascalHambourg](#):
>
> /var/log/dhcpcd.exit-hook.log

```
pi@raspberrypi:~ $ cat /var/log/dhcpcd.exit-hook.log
Fri Jul 16 14:06:05 BST 2021 reason=STOPPED interface=wlan0
Fri Jul 16 14:06:05 BST 2021 reason=STOPPED interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=PREINIT interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=NOCARRIER interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=PREINIT interface=wlan0
Fri Jul 16 14:06:12 BST 2021 reason=NOCARRIER interface=wlan0
Fri Jul 16 14:06:15 BST 2021 reason=CARRIER interface=enxb827ebf0443a
Fri Jul 16 14:06:21 BST 2021 reason=BOUND interface=enxb827ebf0443a
Fri Jul 16 14:11:58 BST 2021 reason=STOPPED interface=wlan0
Fri Jul 16 14:11:58 BST 2021 reason=STOPPED interface=enxb827ebf0443a
Fri Jul 16 14:12:04 BST 2021 reason=PREINIT interface=enxb827ebf0443a
Fri Jul 16 14:12:04 BST 2021 reason=NOCARRIER interface=enxb827ebf0443a
Fri Jul 16 14:12:05 BST 2021 reason=PREINIT interface=wlan0
Fri Jul 16 14:12:05 BST 2021 reason=NOCARRIER interface=wlan0
Fri Jul 16 14:12:07 BST 2021 reason=CARRIER interface=enxb827ebf0443a
Fri Jul 16 14:12:13 BST 2021 reason=BOUND interface=enxb827ebf0443a

$ ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

pi@raspberrypi:~ $ ip route ls table 100
pi@raspberrypi:~ $

```

Toujours rien dans le fichier ‹&nbsp;routage\_avance.log&nbsp;›

```
pi@raspberrypi:~ $ cat /var/log/routage_avance.log
pi@raspberrypi:~ $

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Juillet 16, 2021, 6:18 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/37 "2021-07-16T18:18:15Z")

</div>

Trouvé. Je ne sais comment, les guillemets normaux ont été changés en guillemets «&nbsp;pas normaux&nbsp;» lorsque j’ai copié le script dans le forum.

Par contre l’instrumentation révèle que dhcpcd ne se comporte pas comme je pensais : il appelle le script avec `reason=PREINIT` pour chaque interface, ce qui n’est pas bon car les commandes `ip rule` ne doivent être exécutées qu’une fois en tout et pour tout.

Nouvelle version :

```
if ["$interface" = "enxb827ebf0443a"] ; then
  case "$reason" in
    PREINIT)
      ip rule add from 192.168.1.0/24 table 100
      ip rule add to 192.168.1.0/24 table main
      ;;
    BOUND)
      ip route add default via 192.168.1.1 table 100
      ;;
  esac
fi
```

---

<div class="post-metadata">

**Author:** ![toto69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/ed8c4c/32.png) [@toto69](https://www.debian-fr.org/u/toto69)\
**Post date:** [Juillet 16, 2021, 8:33 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/38 "2021-07-16T20:33:02Z")

</div>

Je teste…

```
pi@raspberrypi:~ $ cat /var/log/dhcpcd.exit-hook.log
Fri Jul 16 14:06:05 BST 2021 reason=STOPPED interface=wlan0
Fri Jul 16 14:06:05 BST 2021 reason=STOPPED interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=PREINIT interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=NOCARRIER interface=enxb827ebf0443a
Fri Jul 16 14:06:12 BST 2021 reason=PREINIT interface=wlan0
Fri Jul 16 14:06:12 BST 2021 reason=NOCARRIER interface=wlan0
Fri Jul 16 14:06:15 BST 2021 reason=CARRIER interface=enxb827ebf0443a
Fri Jul 16 14:06:21 BST 2021 reason=BOUND interface=enxb827ebf0443a
Fri Jul 16 14:11:58 BST 2021 reason=STOPPED interface=wlan0
Fri Jul 16 14:11:58 BST 2021 reason=STOPPED interface=enxb827ebf0443a
Fri Jul 16 14:12:04 BST 2021 reason=PREINIT interface=enxb827ebf0443a
Fri Jul 16 14:12:04 BST 2021 reason=NOCARRIER interface=enxb827ebf0443a
Fri Jul 16 14:12:05 BST 2021 reason=PREINIT interface=wlan0
Fri Jul 16 14:12:05 BST 2021 reason=NOCARRIER interface=wlan0
Fri Jul 16 14:12:07 BST 2021 reason=CARRIER interface=enxb827ebf0443a
Fri Jul 16 14:12:13 BST 2021 reason=BOUND interface=enxb827ebf0443a
Fri Jul 16 21:33:02 BST 2021 reason=STOPPED interface=wlan0
Fri Jul 16 21:33:02 BST 2021 reason=STOPPED interface=enxb827ebf0443a
Fri Jul 16 21:33:08 BST 2021 reason=PREINIT interface=enxb827ebf0443a
Fri Jul 16 21:33:08 BST 2021 reason=NOCARRIER interface=enxb827ebf0443a
Fri Jul 16 21:33:09 BST 2021 reason=PREINIT interface=wlan0
Fri Jul 16 21:33:09 BST 2021 reason=NOCARRIER interface=wlan0
Fri Jul 16 21:33:11 BST 2021 reason=CARRIER interface=enxb827ebf0443a
Fri Jul 16 21:33:16 BST 2021 reason=BOUND interface=enxb827ebf0443a

$ ip rule
0: from all lookup local
32764: from all to 192.168.1.0/24 lookup main
32765: from 192.168.1.0/24 lookup 100
32766: from all lookup main
32767: from all lookup default

$ ip route ls table 100
default via 192.168.1.1 dev enxb827ebf0443a

```

Je suppose qu’au vu des résultats des commandes il est inutile d’ajouter que tout fonctionne parfaitement !!!

Merci

---

<div class="post-metadata">

**Author:** ![AnonymousCoward](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f9ae1b/32.png) [@AnonymousCoward](https://www.debian-fr.org/u/AnonymousCoward)\
**Post date:** [Juillet 16, 2021, 8:54 UTC](https://www.debian-fr.org/t/acces-distant-et-vpn/84934/39 "2021-07-16T20:54:36Z")

</div>

> [@PascalHambourg](#):
>
> les commandes `ip rule` ne doivent être exécutées qu’une fois en tout et pour tout.

Non, pas nécessairement.

Si tu précises la priorité / le numéro de la règle de routage, la règle ne sera inscrite qu’une seule fois (du moment que c’est toujours le même contenu).  
D’ailleurs, la commande retournera 0.

Par exemple :

```plaintext
ip -4 rule add prio 31000 from 192.168.1.0/24 table 100
ip -4 rule add prio 31001 to 192.168.1.0/24 table main

```

Et si on ajoute deux règles de contenu différent avec la même priorité, cela marche aussi. Les règles sont ajoutées puis éventuellement supprimées en mode [FIFO](https://fr.wikipedia.org/wiki/File_(structure_de_donn%C3%A9es)).  
Par exemple, imaginons que tu veuilles remplacer la règle de routage de priorité 1000, tu peux faire :

```plaintext
ip -4 rule add prio 1000 from 192.168.1.0/24 table 100
ip -4 rule del prio 1000

```

–  
AnonymousCoward

[Page précédente](https://www.debian-fr.org/t/acces-distant-et-vpn/84934.md?page=1)
