Auteur Sujet: Remplacer la livebox par systemd-networkd / nftables  (Lu 4906 fois)

0 Membres et 1 Invité sur ce sujet

toniob

  • Abonné Orange vdsl
  • *
  • Messages: 18
  • Pont-l'Évêque (14)
    • 6clones
Remplacer la livebox par systemd-networkd / nftables
« Réponse #12 le: 19 octobre 2022 à 16:30:31 »
Juste une question, pourquoi UserClass=FSVDSL_livebox.Internet.softathome.Livebox3 en ipv4 et UserClass=FSVDSL_livebox.Internet.softathome.Livebox4 en ipv6 ?
actuellement avec dhclient j'ai la même chaine user-class FSVDSL_livebox.Internet.softathome.Livebox4.

Bonne question. J’avais ça dans ma conf qui a été améliorée au fur et à mesure, et j’ai jamais changé ça. Et tant que ça fonctionne, je me suis pas posé de question.

Sinon, mon setup est un peu différent car 1. j'ai besoin de la COS6  et 2. j'ai une ipv4 fixe (et un range /56 fixe), et je souhaite faire de l'adressage statique en ipv6.

On peut avoir de l’ip fixe chez Orange / sosh ?

1. je créé uniquement un fichier orange1.network avec le minimum. Au boot l'interface n'existera pas (j'ai un script dédié qui s'en occupe 2.)
2. j'ai donc un script dédié qui :
- créé l'interface orange1 en vlan 832
- applique la COS uniquement sur les paquets DHCP/DHCPv6 avec la commande tc (traffic control)
- appel networktcl up orange1 (je n'ai pas testé, mais maintenant que l'interface orange1 existe, j'espère que systemd-networkd va la configurer avec ma conf en 1.)
- configure une ipv6 statique (dans mon range) sur l'interface orange1 (je sais ce n'est pas indispensable, mais je m'en sers pour d'autres trucs).
- charge mes regles firewall nft et active le port forwarding etc...
- tout ca avec des controls à chaque étape bien sûr.
Je fais de ce script un service systemd pour qu'il démarre au boot de la machine (au bon moment, ca c'est pas gagné)

Tu n’es pas obligé de faire le networkctl up. Dès que systemd-networkd va voir la connexion créée, il va la configurer comme un grand. Pourquoi ne pas mettre l’ipv6 dans ton fichier .network ? Pour les règles nft, tu peux les mettre dès le boot, pas besoin d’attendre que l’interface soit active, il faut juste que tu utilises iifname quand tu nommes tes interfaces dans nftables. Et pour que ça se lance au bon moment, pense à utiliser After dans ton service systemd.

C'est un peu compliqué et je me dis que j'aurais pu déléguer la création de l'interface orange1 à systemd-networkd (comme toi).
Dans mon cas networkd ne récupèrerait pas d'IP d'orange car la COS6 n'est pas encore appliquée. Mais si mon script passe juste derrière cela devrait passer au bout de quelques secondes.
A moins qu'il soit possible de lancer un script post-config, mais je crois que ce n'est pas encore possible.

Depuis systemd 251, tu peux utiliser systemd-networkd-wait-online@<interface>.service pour attendre une interface en particulier, pour faire un genre de post-up.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #13 le: 19 octobre 2022 à 16:44:40 »
Merci pour ton retour.

J'ai un contrat orange pro et l'ip fixe est incluse dans l'offre.

Pour ajouter l'ip dans le fichier .network, est-ce possible de faire du DHCP et en plus de fixer une address ip dans la même section ?

Si systemd se lance et configure automatiquement à la création de l'interface orange1, alors ca revient au même que de laisser systemd-networkd créer l'interface orange1 depuis le départ (vlan 832, etc...) et faire la COS6 après manuellement avec un service systemd (avec After=systemd-networkd-wait-online@orange1.service par exemple). Les premiers paquets dhcp ne seront pas taggués COS6 (le temps que le script passe), mais ca ne devrait pas durer longtemps.

Faut que j'ai le courage de tester...   

toniob

  • Abonné Orange vdsl
  • *
  • Messages: 18
  • Pont-l'Évêque (14)
    • 6clones
Remplacer la livebox par systemd-networkd / nftables
« Réponse #14 le: 19 octobre 2022 à 17:04:10 »
Pour ajouter l'ip dans le fichier .network, est-ce possible de faire du DHCP et en plus de fixer une address ip dans la même section ?

Tu peux avoir de l’ipv6 configurée dans ton fichier .network (ajoute une section Address) et avoir du DHCP en plus (parce que ça pourrait être 2 réseaux différents). Donc hésite pas à le faire.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #15 le: 19 octobre 2022 à 17:09:20 »
Tu peux avoir de l’ipv6 configurée dans ton fichier .network (ajoute une section Address) et avoir du DHCP en plus (parce que ça pourrait être 2 réseaux différents). Donc hésite pas à le faire.

merci !

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #16 le: 20 octobre 2022 à 10:17:13 »
Hello,

question idiote, pour utiliser After=systemd-networkd-wait-online@XXX.service dans un unit systemd, doit-on faire avant un "systemctl enable systemd-networkd-wait-online@XXX.service" ?

merci

toniob

  • Abonné Orange vdsl
  • *
  • Messages: 18
  • Pont-l'Évêque (14)
    • 6clones
Remplacer la livebox par systemd-networkd / nftables
« Réponse #17 le: 24 octobre 2022 à 11:01:21 »
question idiote, pour utiliser After=systemd-networkd-wait-online@XXX.service dans un unit systemd, doit-on faire avant un "systemctl enable systemd-networkd-wait-online@XXX.service" ?

Bonne question, je ne sais pas. À tester.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #18 le: 06 novembre 2022 à 14:20:48 »
Hello,

bon, j'ai fais ma config système-networkd.
Depuis une qques jours, tout fonctionnait bien, mais aujourd'hui j'ai perdu la connexion ipv6 (l'ipv4 fonctionnait toujours bien).
J'ai relancé système-networkd, idem, pas de connexion ipv6.

J'ai relancer à nouveau système-networkd en mode debug et voici ce que j'ai comme erreur sur la partie ipv6 :

orange1: State changed: configuring -> configured
orange1: NDISC: Sent Router Solicitation, next solicitation in 4s
orange1: NDISC: Sent Router Solicitation, next solicitation in 8s
orange1: NDISC: No RA received before link confirmation timeout
orange1: NDISC: Invoking callback for 'timeout' event.
orange1: NDisc handler get timeout event
orange1: NDISC: Sent Router Solicitation, next solicitation in 15s
orange1: NDISC: Sent Router Solicitation, next solicitation in 32s
orange1: NDISC: Sent Router Solicitation, next solicitation in 1min 6s
orange1: NDISC: Sent Router Solicitation, next solicitation in 2min 19s
orange1: Received new foreign QDisc (configured): handle=1:0, parent=ffff:ffff, kind=prio
orange1: NDISC: Sent Router Solicitation, next solicitation in 4min 45s
orange1: LLDP Rx: Stopping LLDP client
orange1: DHCPv6 lease lost
orange1: NDISC: Stopping IPv6 Router Solicitation client


Du coup, j'ai delete mon interface orange1 de système-networkd et relancé dhclient. Tout re-fonctionne impeccable.
Stop de dhclient et relance systeme-networkd avec orange1. L'ipv4 et l'ipv6 refonctionne.
Mais j'ai toujours les messages d'erreurs ci-dessus.
 

J'ai l'impression que cela provient du client identifier de systemd-networkd qui n'arriverait pas à envoyer le même que dhclient.
Avec dhclient en ipv4 j'envoie :  send dhcp-client-identifier 01:<mac_addr_livebox>; et en ipv6 : send dhcp6.client-id 00:03:00:<mac_addr_livebox>;
Or avec sysytemd-networkd, l'option ClientIdentifier=mac n'est valable que pour la section [DHCPv4]
Qu'envoie donc systemd-networkd pour l'IPv6 ?
Mais je suis peut être à côté de la plaque …


Il y aussi une autre possibilité, je ne fais pas de delegation de prefix en ipv6, je fais de l'adressage statique.
Voici mon fichier orange1.network :

[Match]
Name=orange1

[Network]
Description=Orange1
LinkLocalAddressing=ipv6
DHCP=yes

# affect Orange IPs
#Address=xx.xx.xx.xx/24
Address=2a01:cb15:xxx:xxx::254/64

[DHCPv4]
ClientIdentifier=mac
VendorClassIdentifier=sagem
UserClass=FSVDSL_livebox.Internet.softathome.Livebox4
SendOption=90:string:\xxxxxxxxx
UseHostname=no
UseDNS=no
UseDomains=no
UseNTP=no
#UseAddress=no
RouteMetric=0

[DHCPv6]
UserClass=FSVDSL_livebox.Internet.softathome.livebox4
SendOption=11:string:\xxxxxxxxx
SendOption=16:string:\x00\x00\x04\x0e\x00\x05\x73\x61\x67\x65\x6d
UseHostname=no
UseDNS=no
UseDomains=no
UseNTP=no
UseAddress=no
RouteMetric=1024

Une idée ?
« Modifié: 06 novembre 2022 à 15:28:20 par cyayon »

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 092
  • Paris (75)
Remplacer la livebox par systemd-networkd / nftables
« Réponse #19 le: 06 novembre 2022 à 16:05:05 »
comme ca rapidement je dirais que ton interface ne reçoit plus de RA (annonce du routeur en face chez Orange) pour obtenir la route par défaut car celui n'a pas vu passé de renew DHCPv6-PD ?

il faut regarder a combien est la durée du lease DHCPv6-PD de dhclient pour voir si ca colle.

Apres de tout facon, il me semble qu'il est plus propre et recommandé de faire une requete DHCPv6-PD meme si tu n'utilise pas son résultat.

Ma compréhension du coté Orange:
- attente d'un échange DHCPv6-PD complet pour envoyer le /56 et commencer a émettre des RA pour la route par défaut (ou du moins répondre au RS)
- si le client en face n'actualise pas son bail DHCPv6, arrêt de l'envoi des RA (ou réponses aux RS) ?

C'est pour cela, notamment qu'il y a "WithoutRA=solicit" dans la config DHCPv6 du post original de toniob.





cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #20 le: 06 novembre 2022 à 17:53:03 »
Ok merci bcp.

Du coup je reprends l’ensemble de la config au début du post excepté la partie délégation de prefix vers l’interface lan c’est ça ?
ca donnerait ca :
[Match]
Name=orange1

[Network]
Description=Orange1
LinkLocalAddressing=ipv6
DHCP=yes
IPForward=yes
IPv6AcceptRA=yes
DHCPPrefixDelegation=yes

# affect Orange IPs
#Address=xx.xx.xx.xx/24
Address=2a01:cb15:xx:xx::254/64

[DHCPv4]
ClientIdentifier=mac
VendorClassIdentifier=sagem
UserClass=FSVDSL_livebox.Internet.softathome.Livebox4
SendOption=90:string:\xxxx
UseHostname=no
UseDNS=no
UseDomains=no
UseNTP=no
#UseAddress=no
RouteMetric=0

[DHCPv6]
UserClass=FSVDSL_livebox.Internet.softathome.livebox4
SendOption=11:string:\xxxx
SendOption=16:string:\x00\x00\x04\x0e\x00\x05\x73\x61\x67\x65\x6d
UseHostname=no
UseDNS=no
UseDomains=no
UseNTP=no
UseAddress=no
RouteMetric=1024
WithoutRA=solicit

[IPv6AcceptRA]
DHCPv6Client=always
UseDNS=no
UseDomains=no

[DHCPPrefixDelegation]
#SubnetId=0x1
UplinkInterface=:self
Announce=no

Mais après quelques tests, même problème avec la conf ci-dessus :

systemd-networkd[2458602]: orange1: DHCPv4 address and routes set.
systemd-networkd[2458602]: orange1: link_check_ready(): IPv4LL:no DHCPv4:yes DHCPv6:no DHCP-PD:no NDisc:no
systemd-networkd[2458602]: orange1: State changed: configuring -> configured
systemd-networkd[2458602]: orange1: NDISC: Received Router Advertisement: flags none preference medium lifetime 4500 sec
systemd-networkd[2458602]: orange1: NDISC: Invoking callback for 'router' event.
systemd-networkd[2458602]: orange1: Acquiring DHCPv6 lease on NDisc request
systemd-networkd[2458602]: orange1: Requesting NDisc route (n/a): dst: n/a, src: n/a, gw: fe80::ba0:bab, prefsrc: n/a, scope: global, table: main(254), proto: ra, type: unicast, nexthop: 0, priority: 1024, flags: n/a
systemd-networkd[2458602]: orange1: Setting SLAAC addresses and router.
systemd-networkd[2458602]: orange1: State changed: configured -> configuring
systemd-networkd[2458602]: orange1: link_check_ready(): IPv4LL:no DHCPv4:yes DHCPv6:no DHCP-PD:no NDisc:no
systemd-networkd[2458602]: orange1: State changed: configuring -> configured
systemd-networkd[2458602]: orange1: Configuring NDisc route (requesting): dst: n/a, src: n/a, gw: fe80::ba0:bab, prefsrc: n/a, scope: global, table: main(254), proto: ra, type: unicast, nexthop: 0, priority: 1024, flags: n/a
systemd-networkd[2458602]: orange1: Received remembered NDisc route (configured): dst: n/a, src: n/a, gw: fe80::ba0:bab, prefsrc: n/a, scope: global, table: main(254), proto: ra, type: unicast, nexthop: 0, priority: 1024, flags: n/a
systemd-networkd[2458602]: orange1: SLAAC addresses and routes set.
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 1s
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 3s
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 7s
systemd-networkd[2458602]: orange1: NDISC: No RA received before link confirmation timeout
systemd-networkd[2458602]: orange1: NDISC: Invoking callback for 'timeout' event.
systemd-networkd[2458602]: orange1: NDisc handler get timeout event
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 14s
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 27s
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 54s
systemd-networkd[2458602]: orange1: DHCPv6 client: Sent Solicit
systemd-networkd[2458602]: orange1: DHCPv6 client: Next retransmission in 1min 45s

Ce qui est curieux, c'est que je récupère bien la gateway fe80::ba0:bab par le dhcp.

Merci
« Modifié: 07 novembre 2022 à 09:39:01 par cyayon »

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #21 le: 07 novembre 2022 à 12:27:39 »
Je pense vraiment que je n'ai pas de réponse du client dhcpv6 est la conséquence d'un problème de DUID.

avec dhclient j'ai :
config dhclient ipv4   -> send dhcp-client-identifier 01:<Mac_addr_livebox>;
config dhclient ipv6   -> send dhcp6.client-id         00:03:00:<Mac_addr_livebox>;
dans les logs dhclient -> log default-duid "\000\001\000\001*\373n\015D\324T\012D ";
dhclient  lease option dhcp6.client-id 0:3:0:<Mac_addr_livebox>;

Du coup, comment forger le DUID ipv6 dans système-networkd ?

j'ai trouvé les options :
[DHCP]
DUIDType=link-layer
DUIDRawData=00:01:XX:XX:XX:XX:XX:XX

mais je ne suis pas certain de la string à définir pour obtenir la même chose que dhclient (dans les ses logs) : "\000\001\000\001*\373n\015D\324T\012D "
Surtout que cette chaine ne ressemble pas à la mac de la livebox.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Remplacer la livebox par systemd-networkd / nftables
« Réponse #22 le: 08 novembre 2022 à 12:27:26 »
C'est bon, tout fonctionne impeccable après un petit reset de l'ONT.
Maintenant j'utilise uniquement DUIDType=link-layer, de cette manière en cas de changement de router, ca devrait ne pas poser de problème.
Y a plus qu'a attendre 72H, le lease ipv6...

toniob

  • Abonné Orange vdsl
  • *
  • Messages: 18
  • Pont-l'Évêque (14)
    • 6clones
Remplacer la livebox par systemd-networkd / nftables
« Réponse #23 le: 28 novembre 2023 à 10:19:59 »
J’ai mis à jour le premier post. J’ai modifié la configuration du vlan (j’ai ajouté le egress) et aussi la conf nftables (ajout du bloc postrouting). Normalement, ça devrait prendre en charge les histoires de COS6. Je ne peux pas tester si c’est ok comme il n’y en a pas besoin chez moi. Si quelqu’un peut faire les modifs et valider (ou non), ça serait cool.