Je préfère ne pas utiliser de machine virtuelle ou de conteneur (à la limite si j’ai pas d’autre alternative, j’utiliserai un conteneur).
J’ai avancé hier soir (un peu) en regardant du côté des namespaces réseau.
J’ai ajouté ce script netns (trouvé sur internet) qui est lancé en UP, DOWN, ROUTE-UP depuis mon client.conf :
#!/bin/sh
case $script_type in
up)
ip netns add vpn
ip netns exec vpn ip link set dev lo up
ip link set dev "$1" up netns vpn mtu "$2"
ip netns exec vpn ip addr add dev "$1" \
"$4/${ifconfig_netmask:-30}" \
${ifconfig_broadcast:+broadcast "$ifconfig_broadcast"}
if [ -n "$ifconfig_ipv6_local" ]; then
ip netns exec vpn ip addr add dev "$1" \
"$ifconfig_ipv6_local"/112
fi
;;
route-up)
ip netns exec vpn ip route add default via "$route_vpn_gateway"
if [ -n "$ifconfig_ipv6_remote" ]; then
ip netns exec vpn ip route add default via \
"$ifconfig_ipv6_remote"
fi
;;
down)
ip netns delete vpn
;;
esac
Ce script va créer un namespace vpn qui routera vers le vpn. Uniquement les logiciels lancés depuis la commande sudo ip netns exec vpn cmd utiliseront ce namespace réseau.
Alors si je lance à la main :
sudo openvpn client.conf
sudo ip netns exec vpn elinks http://monip.org
J’ai bien l’adresse ip de mon vpn.
ip netns list
Je vois bien mon namespace vpn.
Par contre, si je lance openvpn depuis systemd (sudo systemctl start openvpn) avec uniquement «client» dans AUTOSTART du fichier default, j’ai pas d’erreur sur le lancement du service dans les logs mais le namespace vpn n’est pas visible depuis sudo ip netns list.
Je vais poursuivre mes recherches ce soir…