Auteur Sujet: comment configurer systemd-networkd?  (Lu 2882 fois)

0 Membres et 1 Invité sur ce sujet

wsw70

  • Abonné Orange Fibre
  • *
  • Messages: 44
comment configurer systemd-networkd?
« 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?

« Modifié: 19 août 2022 à 19:33:06 par wsw70 »

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
comment configurer systemd-networkd?
« Réponse #1 le: 20 août 2022 à 09:19:07 »
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

wsw70

  • Abonné Orange Fibre
  • *
  • Messages: 44
comment configurer systemd-networkd?
« Réponse #2 le: 20 août 2022 à 11:49:00 »
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

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
comment configurer systemd-networkd?
« Réponse #3 le: 20 août 2022 à 13:13:07 »
Que donne "dpkg -l systemd" ?
Le fait d'avoir buster-backports ne suffit pas à utiliser les paquets, ils doivent être choisis manuellement.

wsw70

  • Abonné Orange Fibre
  • *
  • Messages: 44
comment configurer systemd-networkd?
« Réponse #4 le: 20 août 2022 à 14:15:28 »
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

Citer
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

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
comment configurer systemd-networkd?
« Réponse #5 le: 20 août 2022 à 19:54:30 »
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).

wsw70

  • Abonné Orange Fibre
  • *
  • Messages: 44
comment configurer systemd-networkd?
« Réponse #6 le: 21 août 2022 à 10:58:21 »
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.

Citer
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/)

Citer
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.

Citer
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à!

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
comment configurer systemd-networkd?
« Réponse #7 le: 21 août 2022 à 13:01:57 »
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.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
comment configurer systemd-networkd?
« Réponse #8 le: 30 août 2022 à 17:41:28 »
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é.

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
comment configurer systemd-networkd?
« Réponse #9 le: 30 août 2022 à 23:59:19 »
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.

johnk

  • Abonné Orange Fibre
  • *
  • Messages: 10
  • NICE 06
comment configurer systemd-networkd?
« Réponse #10 le: 04 septembre 2022 à 23:24:01 »
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 :/

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 289
  • Antibes (06) / Mercury (73)
comment configurer systemd-networkd?
« Réponse #11 le: 05 septembre 2022 à 07:50:15 »
Je ne connais pas très bien systemd-networkd, mais tu es certain de bien faire du DHCP6-PD et pas seulement du DHCP6 ?