La Fibre
Datacenter et équipements réseaux => Routeurs =>
Remplacer la LiveBox par un routeur => Discussion démarrée par: wsw70 le 19 août 2022 à 18:59:17
-
Bonjour tout le monde
J'ai remplacé il y a quelques années ma livebox avec un Ubiquity ER-4. Ca marche.
Je voudrais maintenant replacer ce ER-4 avec un petit PC qui tourne Debian 10 et systemd-networkd. Cela fait des heures que j'essaye de passer ma configuration mais je n'obtiens pas d'IP WAN.
Je me suis fortement inspiré de https://lafibre.info/remplacer-livebox/remplacer-la-livebox-par-systemd-networkd-nftables/ et l'adaptant à mes besoins.
Première question avant de passer aux configurations: quel est le format de l'option 90 qu'il faut passer? J'ai essayé
- de copier le string que j'avais sous mon ER-4 en replaçant le : par \x → je suis vraiment surpris que ça ne marche pas vu que c'est OK pour le ER-4. Mais j'ai peut-être foiré autre chose.
- génerer un string long avec https://jsfiddle.net/kgersen/3mnsc6wy/22/ et remplacer : par \x
Peut-être que le paquet DHCPDISCOVER ne contient pas ce qu'il doit contenir (tcpdump le voit bien partir et repartir en boucle).
Donc ma configuration:
D'abord je définis le VLAN:
[NetDev]
Name=orange.832
Kind=vlan
[VLAN]
Id=832
Je n'utilise pas MACAddress parce que je ne l'avais pas sous l'ER-4 (et que ma livebox est bien cachée quelque part dans la cave) - est-ce que c'est important?
Après j'accroche ce VLAN à une interface:
[Match]
Name=enp2s0
Type=ether
[Network]
Description=ethernet interface with VLAN attached
VLAN=orange.832
# In case of 'tagged only' setups, you probably don't need any IP
# configuration on the link without VLAN (or: default VLAN).
# For that just omit an [Address] section and disable all the
# autoconfiguration magic like this:
LinkLocalAddressing=no
LLDP=no
EmitLLDP=no
IPv6AcceptRA=no
IPv6SendRA=no
Enfin je configure le VLAN pour qu'il récupère une IP
[Match]
# matches the VLAN on enp2s0
Name=orange.832
[Network]
Description=orange internet
DHCP=ipv4
#KeepConfiguration=dhcp
IPForward=yes
[DHCPv4]
#SendRelease=false
VendorClassIdentifier=sagem
UserClass=FSVDSL_livebox.Internet.softathome.Livebox3
# j'ai essayé tout ce que j'ai pu trouver ici, y compris le string du ER-4
SendOption=90:string:\x00\x00\x00\....
UseHostname=no
[Link]
RequiredForOnline=yes
Mon firewall est tout ouvert pour l'instant, je m'occuperai de la configuration après avoir récupéré l'IP WAN. Ci dessous /etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
Est-ce que quelqu'un aurait une idée sur ce qui ne va pas dans cette configuration?
-
SendOption=90:string:\x00\x00\x00\....
Selon https://github.com/systemd/systemd/issues/14609, les caractères nuls étaient interdits, ça a été corrigé dans systemd 245.
Debian 10 (buster) a systemd 241, mais il y a la 247.3 dans les backports.
Donc il faut ajouter une source dans /etc/apt/sources.list :
deb http://deb.debian.org/debian buster-backports main contrib non-free
Puis :
apt update
apt -t buster-backports install systemd
-
SendOption=90:string:\x00\x00\x00\....
Selon https://github.com/systemd/systemd/issues/14609, les caractères nuls étaient interdits, ça a été corrigé dans systemd 245.
Debian 10 (buster) a systemd 241, mais il y a la 247.3 dans les backports.
Merci beaucoup pour l'information mais il semblerait que mon Debian aie déjà la bonne version
root@router:~# apt update
Hit:1 http://deb.debian.org/debian bullseye InRelease
Get:2 http://security.debian.org/debian-security bullseye-security InRelease [48.4 kB]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:4 http://deb.debian.org/debian buster-backports InRelease [51.4 kB]
Get:5 http://deb.debian.org/debian buster-backports/main amd64 Packages [489 kB]
Get:6 http://deb.debian.org/debian buster-backports/main Translation-en [413 kB]
Get:7 http://deb.debian.org/debian buster-backports/contrib amd64 Packages [9,184 B]
Get:8 http://deb.debian.org/debian buster-backports/contrib Translation-en [8,080 B]
Get:9 http://deb.debian.org/debian buster-backports/non-free amd64 Packages [37.3 kB]
Get:10 http://deb.debian.org/debian buster-backports/non-free Translation-en [39.5 kB]
Fetched 1,139 kB in 1s (1,975 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@router:~# apt -t buster-backports install systemd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
systemd is already the newest version (247.3-7).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@router:~# systemd --version
systemd 247 (247.3-7)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified
-
Que donne "dpkg -l systemd" ?
Le fait d'avoir buster-backports ne suffit pas à utiliser les paquets, ils doivent être choisis manuellement.
-
Que donne "dpkg -l systemd" ?
root@router:~# dpkg -l systemd
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii systemd 247.3-7 amd64 system and service manager
Le fait d'avoir buster-backports ne suffit pas à utiliser les paquets, ils doivent être choisis manuellement.
Je ne sais pas si vous avez scrollé dans le bloc de code où je montrait l'état de l'installation (il est coupé à un endroit où on a l'impression que ça se termine là), mais plus bas j'avais entre autres mis
root@router:~# systemd --version
systemd 247 (247.3-7)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified
-
Ah, mais c'est bullseye, donc Debian 11, pas Debian 10.
Donc il y a déjà systemd 247, et avec bullseye-backports (pas buster-backports), on peut avoir systemd 251.
Est-ce que le ER-4 mettait le CoS 6 sur le DHCP ?
Sur les lignes où c'est nécessaire, s'il n'est pas présent il n'y aura pas de réponse au DHCP.
Dans systemd >= 248, dans la définition de [VLAN] on peut mettre EgressQOSMaps=6-6.
Sinon il faudrait un "ip link set enp2s0.832 type vlan egress 6:6" manuel ailleurs.
Dans le client DHCP intégré de systemd-networkd :
- dhcp_network_bind_udp_socket positionne IPPROTO_IP / IP_TOS à IPTOS_CLASS_CS6
- dhcp_network_bind_raw_socket ne positionne pas SOL_SOCKET / SO_PRIORITY : l'entête IP construit aura bien le bon DSCP, mais il n'y aura pas la priorité 6 dans l'entête VLAN (802.1Q)
La première requête (quand il n'y a pas encore d'IP) part à priori en RAW, donc si le CoS 6 est nécessaire il faudrait soit :
- patcher systemd
- utiliser LD_PRELOAD (si ça fonctionne pour le lancement de systemd-networkd) : https://lafibre.info/remplacer-livebox/petit-ld_preload-pour-amateurs-de-setsockopt/msg799671
- utiliser les cgroupsv1, comme : https://lafibre.info/remplacer-livebox/isc-dhcp-client-raw-socket-solution/msg634966
Pour les cgroupsv1, ce n'est pas une solution pérenne, puisqu'il faudrait les réactiver (Debian 11 est passé hiérarchie unifiée, cad cgroupv2).
Donc il faudrait "systemd.unified_cgroup_hierarchy=false" sur la ligne de commande kernel.
Et pour lancer le service dans le cgroup, ce serait "systemctl edit systemd-networkd.service", avec probablement quelque chose comme :
[Service]
ExecStartPre=+cgcreate -t systemd-network:systemd-network -g net_prio:dhcp-orange ; +cgset -r "net_prio.ifpriomap=enp2s0.832 6" dhcp-orange
ExecStart=
ExecStart=!!cgexec -g net_prio:dhcp-orange --sticky -- {{ROOTLIBEXECDIR}}/systemd-networkd
Les "+" sont pour faire la création du cgroup en root avec tous les privilèges.
Tout systemd-networkd sera affecté, mais ce n'est normalement pas gênant d'avoir un peu plus de paquets en priorité 6 (tant que ce n'est pas l’ensemble du trafic réseau).
-
Ah, mais c'est bullseye, donc Debian 11, pas Debian 10.
Donc il y a déjà systemd 247, et avec bullseye-backports (pas buster-backports), on peut avoir systemd 251.
Ah la la, désolé. Je suis d'habiture sur Arch ou u Ubuntu donc je n'avais pas tilté sur la numérotation de Debian. Désolé.
J'ai forcé systemd 251.
Est-ce que le ER-4 mettait le CoS 6 sur le DHCP ?
Sur les lignes où c'est nécessaire, s'il n'est pas présent il n'y aura pas de réponse au DHCP.
Oui, je vois une ligne de config qui semble le faire (egress-qos "0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0") mais je ne sais pas si ça fonctionnait sans. J'ai aussi de très gros doutes sur le string d'authentification (option 90) et j'ai post éune autre question sur le sujet (https://lafibre.info/remplacer-livebox/quel-est-le-statut-en-aout-2022-de-loption-90-et-du-cos/)
Dans systemd >= 248, dans la définition de [VLAN] on peut mettre EgressQOSMaps=6-6.
Sinon il faudrait un "ip link set enp2s0.832 type vlan egress 6:6" manuel ailleurs.
Done.
Dans le client DHCP intégré de systemd-networkd :
(...)
Oh la la - ça devient très bidouillé :)
Je ne sais pas si je ne vais pas passer sur /etc/interfaces qui semble marcher mieux (mais j'aime beaucoup systemd donc c'est dommage)
Indépendamment de tout - merci énormément pour votre aide jusqu'à là!
-
Je ne sais pas si je ne vais pas passer sur /etc/interfaces qui semble marcher mieux (mais j'aime beaucoup systemd donc c'est dommage)
Dans ce cas pour la CoS 6 il faut soit patcher dhclient, soit le LD_PRELOAD, soit réactiver cgroupv1 et utiliser net_prio.
-
Hello,
on pourrait aussi faire la QOS DHCP en utilisant tc avec ce type de script :
iface="orange"
tc_qos="0:6"
tc qdisc del dev $iface root 2>/dev/null ; tc filter del dev $iface 2>/dev/null
tc qdisc replace dev $iface root handle 1: prio
tc filter add dev $iface parent 1: prio 1 u32 match ip protocol 17 ff match ip dport 67 ffff action skbedit priority $tc_qos # dhcpv4
tc filter add dev $iface parent 1: prio 2 protocol 0x806 u32 match u32 0 0 action skbedit priority $tc_qos # arp
tc filter add dev $iface parent 1: prio 3 protocol ip u32 match ip protocol 2 ff action skbedit priority $tc_qos # igmpv4
tc filter add dev $iface parent 1: prio 4 protocol ip u32 match ip protocol 1 ff action skbedit priority $tc_qos # icmpv4
tc filter add dev $iface parent 1: prio 5 protocol ipv6 u32 match ip6 protocol 17 ff match ip6 dport 547 ffff action skbedit priority $tc_qos # dhcpv6
tc filter add dev $iface parent 1: prio 6 protocol ipv6 u32 match ip6 protocol 58 ff action skbedit priority $tc_qos # icmpv6
tc -s -d qdisc show dev $iface ; tc -s -d filter show dev $iface
c'est ce que je fais sous archlinux mais en utilisant encore dhclient (non patché).
tu peux mettre en cela en post/pre config de ton interface vlan.
l'avantage c'est que c'est agnostique par rapport au client dhcp utilisé.
-
Donc contrairement à iptables, le "match ip protocol 17 ff match ip dport 67" fonctionnerait sur les raw sockets.
C'est intéressant, mais systemd-networkd ne permet pas directement de lancer des scripts lors de la configuration des interfaces.
-
Hello,
J'ai essayé de configurer systemd-networkd sur le vlan 832 orange également, j'arrive à avoir ipv4 mais pas ipv6 :'(
Match]
Name=sosh
[Network]
DHCP=ipv4
[DHCP]
DUIDType=link-layer
DUIDRawData=00:01:XX:XX:XX:XX:XX:XX
IAID=1
[DHCPv4]
UseDNS=false
SendHostname=false
ClientIdentifier=mac
UserClass=FSVDSL_livebox.Internet.softathome.Livebox3
VendorClassIdentifier=sagem
SendOption=90:string:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x09\x00\x00\x05\x58\x01\x03\x41\x01\x0d\x66\x74\x69\x2F\xXX\xXX\xXX\xXX\xXX\xXX\xXX
[DHCPv6]
UseDNS=false
WithoutRA=solicit
UserClass=FSVDSL_livebox.Internet.softathome.Livebox3
VendorClass=sagem
SendOption=11:string:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x09\x00\x00\x05\x58\x01\x03\x41\x01\x0d\x66\x74\x69\x2F\xXX\xXX\xXX\xXX\xXX\xXX\xXX
Les messages solicit n'obtiennent pas de réponse...
Je créé le vlan sosh avec un service systemd au boot:
[Unit]
Description=create orange vlan 832
After=sys-subsystem-net-devices-eth1.device
BindsTo=sys-subsystem-net-devices-eth1.device
[Service]
Type=oneshot
ExecStart=/usr/bin/ip link add link eth1 name sosh type vlan id 832 egress-qos-map 0:6
[Install]
WantedBy=multi-user.target
J'ai aussi une règle iptables pour ne pas tagger le traffic sortant (hors raw socket) en prio 6:
*mangle
:PREROUTING ACCEPT [1:112]
:INPUT ACCEPT [1:112]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2:196]
:POSTROUTING ACCEPT [2:196]
-A POSTROUTING -o sosh -j CLASSIFY --set-class 0000:0001
C'est bancal (la méthode tc est quand même plus propre) mais ça fonctionne, du moins en ipv4.
En ipv6, rien à faire je n'obtiens aucune réponse aux solicit, j'ai essayé dibbler et dhclient. Je pense avoir trop stressé le server dhcpv6 et avoir mélangé les DUID+MAC...
Difficulté de plus : orange m'a donné une LB5 et je ne peux plus sniffer le traffic livebox/ont à présent :/
-
Je ne connais pas très bien systemd-networkd, mais tu es certain de bien faire du DHCP6-PD et pas seulement du DHCP6 ?
-
Il semblerait que ce soit le défaut:
https://www.freedesktop.org/software/systemd/man/systemd.network.html#UseDelegatedPrefix=
Il y a aussi https://www.freedesktop.org/software/systemd/man/systemd.network.html#WithoutRA= pour lancer le client dhcpv6 sans attendre un RA, mais peut-être que cette partie est obsolète..
Dans tous les cas je n'y arrive avec aucun client (dibbler, dhclient) mais je déraille le thread pour ma part ipv4 OK et ipv6 KO. Pour l'ipv6 je fais un topic à part pour discuter du sujet.
-
Hello,
Des news avec systemd-networkd ? est-ce que qqun à une config fonctionnelle ipv4 et ipv6 ?
merci
-
Hello,
Comme toi, la partie ipv4 avec système-networkd fonctionne parfaitement.
Mais impossible d'avoir l'ipv6. Avec dhclient aucun problème et j'utilise send dhcp6.client-id 00:03:00:<Mac_addr_livebox>.
Avec système-networkd, je n'ai pas trouvé la config pour faire la même chose en ipv6. En ipv4, il y a bien l'option send dhcp-client-identifier 01:<livebox_mac>; mais pas d'équivalence en ipv6.
Du coup, en basculant sur systemd-networkd, j'imagine que mon DUID change et je n'ai pas de réponse DHCPv6 d'Orange.
Une idée comment faire ?
-
C'est bon, tout fonctionne impeccable après un petit reset de l'ONT.
Y a plus qu'a attendre 72H, le lease ipv6...