Author: Michel Roche Date: To: guilde Subject: Re: OpenVPN et PPP au boot
Ah, j'ai fait des progrès !
Dans le service OpenVPN, j'a rajouté les directives suivantes :
Restart=always
et
restartSec=10 (pour ne pas me faire engueuler par le système parce
qu'openvpn a redémarré trop vite).
Ça fait un peu bourrin dans le syslog lorsque la connexion ppp tarde à
monter, mais ça marche à tous les coups quand même -)
Par contre, j'ai besoin d'un troisième étage à ma fusée : régler
quelques routes et rules après l'établissement du tunnel. J'ai donc créé
un petit script qui fait :
#/chemin/zescript.sh
ip rule add priority 100 fwmark 10 table 10
ip route add default dev tun10 table 10
(ensuite c'est iptables qui se chargera de marquer les paquets destinés
à cette route, mais ça c'est bon, ça roule)
Le problème c'est que la rule peut très bien s'écrire avant que tun10
soit montée, mais la règle de routage, en revanche non.
J'ai donc créé un service systemd qui se charge de lancer ce script au
bon moment, c'est à dire le plus tard possible :
[Unit]
Description=Add IP Rules to routing tables
Wants=openvpn@???
After=openvpn@??? network.target networking.service
[Service]
Type=oneshot
ExecStart=/chemin/zescript.sh
[Install]
WantedBy=multi-user.target
Ça fonctionne à 100% sur un démarrage du serveur, modem allumé.
Par contre si j'éteins tout (simulation de panne électrique) et que je
rallume, le modem met bien 40s à une minute pour établir la synchro,
donc pendant ce temps là ppp essaie de se connecter et échoue, idem pour
le tunnel, qui se relance comme un couillon toutes les 10 secondes. Au
moment où la connexion ppp monte, le tunnel s'établit, hourra... mais
mon petit service, malgré ses After=, a déjà été lancé depuis belle
lurette, et la directive ip route a échoué faute d'interface tun10 à se
mettre sous la dent.
Comment écrire ce service pour qu'il se lance, ou se relance pile poil à
la fin de l'établissement du tunnel ?
Peut-être en lançant mon script via ExecStartPost plutôt ?
(dans le service openvpn@tun10)
Michel
Le 20/03/2018 à 20:15, Michel Roche a écrit : > Bonjour,
> décidément je galère avec debian9 et tous les nouveaux mécanismes qui
> ont étés introduits.
>
> Je cherche à monter un tunnel openvpn sur une connexion pppoe.
> Du côté ppp, je suis bon : définition du peer qui va bien,
> automatisation via systemctl : j'ai créé un service, et la connexion ppp
> se lance au démarrage, cool.
>
> J'essaie de faire de même pour le tunnel openvpn qui va dessus.
> Si, après le démarrage, je lance
> # systemctl start openvpn@tun10
> hop mon tunnel monte, crée l'interface tun10, systemctl status
> openvpn@tun10 affiche du vert, tout va bien, ma config du système est
> donc correcte.
>
> Par contre, au démarrage, le tunnel ne monte pas, le message d'erreur
> indiquant que l'adresse ip publique (de la connexion ppp) est
> introuvable. Genre, il se lance trop tôt, et ppp n'est pas prêt au
> moment où il essaie.
>
> J'ai rajouté à l'Unit d'openvpn :
> Wants=pppoe.service
> After=pppoe.service
>
> puis dans Unit pppoe
> Before=openvpn@tun10
>
> et puis dans le Service d'openvpn :
> Restart=always
> histoire qu'il réessaie de démarrer tant qu'il est down
>
> rien n'y fait :-(
>
> J'ai déjà vu un problème similaire avec un serveur Samba qui se lançait
> par init.d et qui du coup passait avant systemctl
> Est-ce qu'openvpn a une entrée dans init.d qui pourrait causer ça ?
>
> Autre idée ?
>
> Merci pour vos lumières
>
> Michel
>
>