Auteur Sujet: Ubiquiti ER Ipv6 dhcp6 en 2.X  (Lu 2523 fois)

0 Membres et 1 Invité sur ce sujet

pinomat

  • Client Orange Fibre
  • *
  • Messages: 25
  • THIONVILLE 57
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #36 le: 09 septembre 2019 à 17:17:10 »
Hello,

Ce matin je refais un test ipv6 et je vois que j'ai plus de connectivité. Je constate que dhcpv6-pd est dans ma config...du coup je l'éfface et je redemarre mais toujours pas d'ipv6. Pourriez-vous me m'aider a debuger ?

Par avance merci.

Bonjour,

Pour t'aider, il va falloir nous fournir quelques informations :

1) Peux-tu vérifier qu'il n'y a de process dhcp6c qui tourne (ps)?
2) Quel est le résultat de ping6 www.google.com ?
3) Peux-tu poster ton fichier de config ?
4) Peux-tu vérifier que dhclient tourne correctement (systemctl) et contrôler les logs (journalctl) des services dhclient et radvd ?

Idéalement, peux-tu poster les résultats du point 4 ?

Merci

barichon

  • Client Free fibre
  • *
  • Messages: 63
  • Levallois-Perret 92300
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #37 le: 10 septembre 2019 à 10:45:12 »
Hello pinomat,

Merci pour ton aide. Voici les réponses (plus le fichier de conf ci-joint):

root@ubnt:/home/ubnt# ps -auxf | grep dhcp6c
root      5509  0.0  0.3   3012  1676 pts/0    S+   10:17   0:00                              \_ grep dhcp6c


root@ubnt:/home/ubnt# ping6 www.google.com
PING www.google.com(ams16s32-in-x04.1e100.net (2a00:1450:400e:80c::2004)) 56 dat                                                    a bytes
From 2a01cb000f01bd00822aa8fffef1e469.ipv6.abo.wanadoo.fr (2a01:cb00:f01:bd00:82                                                    2a:a8ff:fef1:e469) icmp_seq=1 Destination unreachable: Address unreachable

root@ubnt:/home/ubnt# systemctl status dhclient6
* dhclient6.service - dhclient for sending DUID IPv6
   Loaded: loaded (/etc/systemd/system/dhclient6.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-07 11:31:36 CEST; 2 days ago
  Process: 7350 ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /v
  Process: 7348 ExecStartPre=/sbin/ip6tables -t mangle -I POSTROUTING -p udp --dport dhcpv6-server -j CLASSIFY --set-class 0:6 (code
  Process: 7345 ExecStartPre=/sbin/ip6tables -t mangle -F (code=exited, status=0/SUCCESS)
 Main PID: 7359 (dhclient)
   CGroup: /system.slice/dhclient6.service
           `-7359 /sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/d

Sep 10 10:00:25 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 129570ms.
Sep 10 10:02:35 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 121140ms.
Sep 10 10:04:36 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 109900ms.
Sep 10 10:06:26 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 112580ms.
Sep 10 10:08:18 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 127680ms.
Sep 10 10:10:26 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 113100ms.
Sep 10 10:12:19 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 118530ms.
Sep 10 10:14:18 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 130360ms.
Sep 10 10:16:29 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 120650ms.
Sep 10 10:18:29 ubnt dhclient[7359]: XMT: Solicit on eth1.832, interval 115020ms.

root@ubnt:/home/ubnt# ps -auxf | grep radvd
root      5890  0.0  0.3   3012  1572 pts/0    S+   10:31   0:00                              \_ grep radvd
root      5844  0.0  0.2   2592  1268 ?        Ss   10:30   0:00 /usr/sbin/radvd --logmethod stderr_clean
root      5845  0.0  0.1   2592   804 ?        S    10:30   0:00  \_ /usr/sbin/radvd --logmethod stderr_clean

root@ubnt:/home/ubnt# journalctl _PID=5845
-- Logs begin at Sun 2019-09-08 21:01:25 CEST, end at Tue 2019-09-10 10:33:01 CEST. --
Sep 08 21:04:17 ubnt sudo[5845]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/opt/vyatta/sbin/ubnt_vtysh -c show ip route s
Sep 08 21:04:17 ubnt sudo[5845]: pam_unix(sudo:session): session opened for user root by (uid=0)
Sep 08 21:04:18 ubnt sudo[5845]: pam_unix(sudo:session): session closed for user root
[/code]
« Modifié: 10 septembre 2019 à 21:06:57 par barichon »

pinomat

  • Client Orange Fibre
  • *
  • Messages: 25
  • THIONVILLE 57
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #38 le: 10 septembre 2019 à 19:17:22 »
Hello pinomat,

Merci pour ton aide. Voici les réponses (plus le fichier de conf ci-joint):

Ta config me semble OK SAUF que tu utilises egress-qos. A ma connaissance egress-qos s'utilise uniquement avec dibbler et non avec dhclient. Il y a donc un problème de ce côté à mon avis. Le serveur DHCP semble confirmé car il ne répond pas à la requête DHCPv6, (il fait un sollicit sans réponse dans tes logs dhclient).
Il y a soit ce problème de marquage CoS de tes requêtes DHCPv6 soit un problème de configuration du client dhclient6 (/etc/dhcp3/dhclient6_eth1_832.conf).

Pour le marquage CoS, j'ai lu récemment sur le forum qu'il est possible d'utiliser IPTABLES. Mais je n'ai pas testé.

barichon

  • Client Free fibre
  • *
  • Messages: 63
  • Levallois-Perret 92300
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #39 le: 10 septembre 2019 à 21:00:46 »
Voici ma conf dhcpv6:

root@ubnt:/home/ubnt# vi /etc/dhcp3/dhclient6_eth1_832.conf
option dhcp6.auth code 11 = string;
option dhcp6.vendorclass code 16 = string;
option dhcp6.userclass code 15 = string;

interface "eth1.832" {
        #Orange France specific options
        send dhcp6.vendorclass  00:00:04:0e:00:05:73:61:67:65:6d;
        send dhcp6.userclass 00:2b:46:53:56:44:53:4c:5f:6c:69:76:65:62:6f:78:2e:49:6e:74:65:72:6e:65:74:2e:73:6f:66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:34;
        send dhcp6.vendor-opts 00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;

        send dhcp6.auth 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:*****************************;
        send dhcp6.client-id 00:03:00:01:d8:d7:75:9a:6e:c0;

        request dhcp6.auth, dhcp6.vendor-opts, dhcp6.name-servers, dhcp6.domain-search;

J'ai essayé d'enlever egres qos de ma conf pour voir, j'ai effectué un systemctl restart dhclient6 mais ça ne fonctionne pas pour info voici le contenu de /etc/systemd/system/dhclient6.service :

[Unit]
Description=dhclient for sending DUID IPv6
After=network.target

[Service]
Type=forking
ExecStartPre=/sbin/ip6tables -t mangle -F
ExecStartPre=/sbin/ip6tables -t mangle -I POSTROUTING -p udp --dport dhcpv6-server -j CLASSIFY --set-class 0:6
ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
NonBlocking=yes
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target


pinomat

  • Client Orange Fibre
  • *
  • Messages: 25
  • THIONVILLE 57
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #40 le: 10 septembre 2019 à 21:39:33 »
donc tu confirmes que tu n'as pas installé dibbler et que tu n'as pas fait le marquage cos avec un autre moyen (comme un switch) ? Si oui, cela explique que tu n'as pas d'IPv6. Sans ce marquage, pas d'ipv6.

fttmeh

  • Client Orange Fibre
  • *
  • Messages: 101
  • Hauts-de-Seine
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #41 le: 10 septembre 2019 à 23:02:39 »
Voici ma conf dhcpv6:
[Unit]
Description=dhclient for sending DUID IPv6
After=network.target

[Service]
Type=forking
ExecStartPre=/sbin/ip6tables -t mangle -F
ExecStartPre=/sbin/ip6tables -t mangle -I POSTROUTING -p udp --dport dhcpv6-server -j CLASSIFY --set-class 0:6
ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
NonBlocking=yes
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

J'utilise le même script sans problème. J'ai confirmé (avec un tcpdump) et la CoS est à 6 pour les paquets DHCPv6. Cela fonctionne car en IPv6 le client dhcp n'utilise pas des raw sockets, et donc iptables peut agir.

Mon script :
#/etc/systemd/system/dhclient6.service
[Unit]
Description=dhclient for sending IPv6 DUID
After=network.target

[Service]
Type=forking
ExecStartPre=/config/scripts/generate_dhcpv6_configfile.sh
ExecStartPre=/sbin/ip6tables -t mangle -F
ExecStartPre=/sbin/ip6tables -t mangle -I POSTROUTING -p udp --dport dhcpv6-server -j CLASSIFY --set-class 0:6
ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
NonBlocking=yes                               
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target


Ensuite, pour éviter des problèmes avec la configuration du client dhcp pour IPv6, j'ai un autre script qui va prendre les données nécessaires de mon fichier /config/config.boot. J'ai donc seulement à configurer une fois l'authentification Orange:

Le script cherche les options suivantes :
  • send rfc3118-auth
  • dhcp-client-identifier

/config/scripts/generate_dhcpv6_configfile.sh
#!/bin/bash
# Place in /config/scripts/generate_dhcpv6_configfile.sh
target_file="/etc/dhcp3/dhclient6_eth1_832.conf"

interface="eth1"
vif="832"

auth_string=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "send rfc3118-auth" | awk '{ print $4 }' | awk -F ";" '{print $1}')
mac_livebox=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "dhcp-client-identifier" | awk '{ print $4 }' | awk -F ";" '{print $1}')


read -r -d '' conffile <<EOF
# $target_file\n
option dhcp6.auth code 11 = string;\n
option dhcp6.vendorclass code 16 = string;\n
option dhcp6.userclass code 15 = string;\n
\n
#External interface (VLAN must be 832 for Orange)\n
interface "eth1.832" {\n
\t#Orange France specific options\n
\tsend dhcp6.vendorclass 00:00:04:0e:00:05:73:61:67:65:6d;\n
\tsend dhcp6.userclass 00:2b:46:53:56:44:53:4c:5f:6c:69:76:65:62:6f:78:2e:49:6e:74:65:72:6e:65:74:2e:73:6f:66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:34;\n
\tsend dhcp6.vendor-opts 00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;\n
\n
\t#Authentication for Orange France DHCP server (same value as for DHCPv4)\n
\tsend dhcp6.auth $auth_string;\n
\n
\tsend dhcp6.client-id 00:03:00:$mac_livebox;\n
\n
\trequest dhcp6.name-servers, dhcp6.vendorclass, dhcp6.userclass, dhcp6.auth;\n
}\n
EOF

echo -e $conffile > $target_file



fttmeh

  • Client Orange Fibre
  • *
  • Messages: 101
  • Hauts-de-Seine
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #42 le: 10 septembre 2019 à 23:04:48 »

root@ubnt:/home/ubnt# ping6 www.google.com
PING www.google.com(ams16s32-in-x04.1e100.net (2a00:1450:400e:80c::2004)) 56 dat                                                    a bytes
From 2a01cb000f01bd00822aa8fffef1e469.ipv6.abo.wanadoo.fr (2a01:cb00:f01:bd00:82                                                    2a:a8ff:fef1:e469) icmp_seq=1 Destination unreachable: Address unreachable


Salut barichon,

Le ping me fait penser que tu as déjà eu une adresse IPv6 sur ton routeur.

Tu peux essayer de tout rédemarrer (yc éteindre l'ONT pendant au moins 10 secondes) ?

zoc

  • Client Orange Fibre
  • *
  • Messages: 2 676
  • Antibes (06)
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #43 le: 11 septembre 2019 à 08:33:43 »
Ta config me semble OK SAUF que tu utilises egress-qos. A ma connaissance egress-qos s'utilise uniquement avec dibbler et non avec dhclient
Bah non, egress-qos ça permet de dire à l'OS du routeur "si un paquet arrive avec une priorité noyau à 6", alors tu lui appliques une priorité 802.1p 6. Ca s'applique donc aussi bien à dhclient (patché) qu'à dibbler (patché). Si les clients DHCP (4 ou 6) ne sont pas patchés, alors la priorité noyau des paquets est à 0.

Et, au pire, avec un client non patché, l'egress-qos n'aura aucun effet et n'empêchera absolument rien de fonctionner (puisqu'on mappe la priorité noyau 0 sur la Cos 0).

En IPv6, il est possible de s'en passer (en utilisant une règle iptables mangle), mais de toute façon, si dhclient doit être patché pour IPv4, autant le patcher également pour IPv6 et utiliser la même méthode à base d'egress-qos...

pinomat

  • Client Orange Fibre
  • *
  • Messages: 25
  • THIONVILLE 57
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #44 le: 11 septembre 2019 à 12:11:04 »
Merci pour les précisions techniques zoc. Grosso modo, l'option egress-qos ne fonctionnera pas avec les versions dhclient "stock" d'Ubiquiti. Par contre il n'aura pas d'IPv6 si les paquets envoyés n'ont pas cette priorité. C'est ce que barichon tente de résoudre. Enfin j'espère que tout le monde se comprend ^^

fttmeh

  • Client Orange Fibre
  • *
  • Messages: 101
  • Hauts-de-Seine
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #45 le: 11 septembre 2019 à 15:48:00 »
Pour le marquage CoS à 6 pour IPv6, c'est très simple avec le script ci-dessous. Il fait tagger par ip6tables tous les paquets envoyés par le client dhcp v6 vers un serveur dhcp v6.

Mettez le script suivant dans /config/scripts/post-config.d.

setDHCPv6COSto6.sh
#!/bin/bash
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t mangle -I POSTROUTING -p udp --sport dhcpv6-client --dport dhcpv6-server -j CLASSIFY --set-class 0:6

Faire chmod +x après avoir créé le fichier.

barichon

  • Client Free fibre
  • *
  • Messages: 63
  • Levallois-Perret 92300
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #46 le: 11 septembre 2019 à 23:30:12 »
 >:(

Je me sens triste, je me sens différent  :'(

Pourquoi ça marche pas ? Qq1 veux prendre la main ?

fttmeh

  • Client Orange Fibre
  • *
  • Messages: 101
  • Hauts-de-Seine
Ubiquiti ER Ipv6 dhcp6 en 2.X
« Réponse #47 le: 12 septembre 2019 à 13:56:49 »
>:(

Je me sens triste, je me sens différent  :'(

Pourquoi ça marche pas ? Qq1 veux prendre la main ?

J'ai regardé ta config (/config/config.boot) et j'ai quelques commentaires. Je base mes commentaires sur ma configuration : ONT ==> Switch GS108Tv2 (qui met la COS à 6 pour DHCPv4) ==> ER4 (avec firmware v2.0.7).

  • Il manque l'option pour envoyer l'adresse MAC de la Livebox au serveur DHCPv4: (client-option "send dhcp-client-identifier 01:XX:XX:XX:XX:XX;" - remplacer XX par l'adresse MAC de ta Livebox). Je l'ai dans ma conf et je l'utilise pour générer le script de configuration pour dhclient6
  • Si tu as un client dhcp v4 patché (dhclient trouvé dans ce forum par exemple), tu peux garder la ligne "egress-qos "0:0 1:1 2:2 3:3 4:4 5:5 6:6 7:7" dans la configuration de eth1.832. Sinon ça ne sert à rien.
  • Tu peux enlever la section complète ipv6 de l'interface eth1.832, puisque tu utilises dhclient par ailleurs, il se peut que ce soit la source du problème.
  • Tu peux enlever la section complète de l'interface eth1.840, il me semble que cela n'est plus d'actualité.
  • Question : pourquoi donner l'addresse 1.1.1.1 à l'interface loopback ? Ça coince avec le DNS de Cloudflare (1.1.1.1).
  • Petit detail : Ton serveur DNS pour eth0 (réseau 192.168.0.1/24) est 2620:fe::9 (Quad9). Cependant, tu as aussi configuré dnsmasq en tant que forwarder. Ça vaut la peine d'utiliser dnsmasq en forwarder pour IPv6 aussi.

Ensuite, je te propose de partir d'une configuration que je maitrise et qui fonctionne bien pour moi :
  • Fichier /etc/systemd/system/dhclient6.service
  • Après creation du fichier, faire systemctl  daemon-reload ; systemctl enable dhclient6
#/etc/systemd/system/dhclient6.service
[Unit]
Description=dhclient for sending IPv6 DUID
After=network.target

[Service]
Type=forking
ExecStartPre=/config/scripts/generate_dhcpv6_configfile.sh
ExecStart=/sbin/dhclient -6 -P -nw -cf /etc/dhcp3/dhclient6_eth1_832.conf -pf /var/run/dhclient6_eth1_832.pid -lf /var/run/dhclient6_eth1_832.leases eth1.832
NonBlocking=yes                               
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

  • Script /config/scripts/generate_dhcpv6_configfile.sh (faire chmod+x sur le script pour qu'il soit executable)
#!/bin/bash
# Place in /config/scripts/generate_dhcpv6_configfile.sh
target_file="/etc/dhcp3/dhclient6_eth1_832.conf"

interface="eth1"
vif="832"

auth_string=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "send rfc3118-auth" | awk '{ print $4 }' | awk -F ";" '{print $1}')
mac_livebox=$(/bin/cli-shell-api showCfg interfaces ethernet $interface vif $vif dhcp-options client-option | grep "dhcp-client-identifier" | awk '{ print $4 }' | awk -F ";" '{print $1}')


read -r -d '' conffile <<EOF
# $target_file\n
option dhcp6.auth code 11 = string;\n
option dhcp6.vendorclass code 16 = string;\n
option dhcp6.userclass code 15 = string;\n
\n
#External interface (VLAN must be 832 for Orange)\n
interface "eth1.832" {\n
\t#Orange France specific options\n
\tsend dhcp6.vendorclass 00:00:04:0e:00:05:73:61:67:65:6d;\n
\tsend dhcp6.userclass 00:2b:46:53:56:44:53:4c:5f:6c:69:76:65:62:6f:78:2e:49:6e:74:65:72:6e:65:74:2e:73:6f:66:74:61:74:68:6f:6d:65:2e:6c:69:76:65:62:6f:78:34;\n
\tsend dhcp6.vendor-opts 00:00:05:58:00:06:00:0e:49:50:56:36:5f:52:45:51:55:45:53:54:45:44;\n
\n
\t#Authentication for Orange France DHCP server (same value as for DHCPv4)\n
\tsend dhcp6.auth $auth_string;\n
\n
\tsend dhcp6.client-id 00:03:00:$mac_livebox;\n
\n
\trequest dhcp6.name-servers, dhcp6.vendorclass, dhcp6.userclass, dhcp6.auth;\n
}\n
EOF

echo -e $conffile > $target_file

  • Script /config/scripts/post-config.d/setDHCPv6COSto6.sh, pour mettre la COS à 6 avec ip6tables (pas besoin de patcher le client). À mettre dans /config/scripts/post-config.d
#!/bin/bash

## Place in /config/scripts/post-config.d/setDHCPv6COSto6.sh

/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t mangle -I POSTROUTING -p udp --sport dhcpv6-client --dport dhcpv6-server -j CLASSIFY --set-class 0:6

Enfin, le script qui sera appellé par dhclient6 après avoir obtenu un prefixe (un subnet /56).

  • Script /etc/dhcp3/dhclient-exit-hooks.d/dhclient-ipv6-exit-hook, pour donner un subnet /64 par VIF
  • Il faut mettre toutes les interfaces internes ayant besoin d'avoir IPv6 dans l'array IPV6_INTERFACES.
#  /etc/dhcp3/dhclient-exit-hooks.d/dhclient-ipv6

# Interfaces that should obtain a /64 prefix
IPV6_INTERFACES=(eth0)
INT_ADDRESS="::1"

###

ipv6_prefix_setup() {
# $1 is the ethernet interface
# $2 is the suffix to use
ethiface=$1
suffix=$2

current_ip=$(ip -6 addr show dev $ethiface scope global | awk '/inet6/ {print $2}' | grep -v '^fd' )
current_prefix=$(echo $current_ip | sed -e 's@::.*/64@::/64@')
 
# To generate new IP, need to take new prefix, add 8 bits
new_ip=$( echo $new_ip6_prefix | sed -e 's/00::\/.*//g' )
new_ip="$new_ip$suffix"

if [ "$new_ip" != "$current_ip" ]
then
if [ "$current_ip" != "" ]
then
/sbin/ip -6 addr delete "$current_ip" dev $ethiface
fi
/sbin/ip -6 addr add "$new_ip" dev $ethiface
 
fi
}

case "$reason" in
  BOUND6|REBIND6)
    # We will get called twice here - once for the temp address
    # and once for the prefix. We only care about the prefix.
    if [ ! -z "$new_ip6_prefix" ] ; then
for interface in "${IPV6_INTERFACES[@]}"
do
suffix=$( echo ${interface} | /usr/bin/md5sum | awk '{ print substr($1,3,2) }' )
suffix="$suffix$INT_ADDRESS/64"
ipv6_prefix_setup ${interface} $suffix
done
/bin/systemctl restart radvd.service >/dev/null 2>&1
    fi
    ;;
esac
« Modifié: 14 septembre 2019 à 14:59:52 par fttmeh »

 

Mobile View