đ§ RĂ©seau moderne sous linux: 1.Quelques astuces avec networkd
Dans cette nouvelle sĂ©rie dâarticles, je vais parler de
configuration réseau sous linux avec des outils modernes
Gnu/Linux.
Dans ces premiers partis, je vais simplement prĂ©senter des astuces de configuration networkd, que jâai dĂ©couvert en passant beaucoup de temps dans la documentation, et parfois Ă lâaide de quelques articles de blog ou autre.
Personnellement, jâaime beaucoup networkd mĂȘme si je trouve la documentation un peu difficile dâaccĂšs, lâinternet ne contient pas assez dâexemple et dâarticle de blog Ă mon goĂ»t permettant de facilement trouver la solution Ă son problĂšme, il faut donc parfois passer un temps non nĂ©gligeable Ă creuser la documentation.
1.Activer Mdns
Pour accéder localement facilement aux machines via les
adresse en nomdemachine.local, il est utile dâavoir
mdns dâactivĂ© , pour cela si vous utilisez
systemd-networkd, vous aurez besoin dâinstaller
systemd-resolved et de vĂ©rifier quâil est
actif.
sudo apt install systemd-resolved
resolvectl
Si vous constater que mdns est désactivé sur votre
interface (avec un résultat de commande
contenantâmDNS), il faut ajuster la
configuration globale de resolved et/ou ajuster la
configuration de lâinterface:
Pour la configuration globale, vous devez créer un fichier :
# /etc/systemd/resolved.conf.d/99-enable-mdns.conf
[Resolve]
MulticastDNS=yes
# protocole similair Ă MDNS mais qui semble de moins en moins en usage
LLMNR=no
Pour la configuration spĂ©cifique de lâinterface, il vous
faudra dans le fichier .network :
# /etc/systemd/network/moninterface.network
...
[Network]
# Activer mdns (les addresse en .local)
MulticastDNS=yes
Note: ce dernier élément est un exemple, pas un vrai fichier
.networkfonctionnel, vous aurez besoin dâune directive[Match]
2.Renommer une interface
Dans un cas simple oĂč vous avez une interface ethernet non usb, il est aisĂ© de renommer son interface via un fichier .link :
# /etc/systemd/network/lan0.link
[Match]
MACAddress=00-00-5E-00-53-01
[Link]
# le nouveau nom
Name=lan0
comme vu prĂ©cĂ©demment le cas de pĂ©riphĂ©rique USB est plus compliquĂ©, certaines cartes change dâaddresses mac Ă chaque connection tandis que certain conservent leur addresses mac.
La configuration des distributions peut changer les choses
aussi. Ainsi, sous Debian Trixie, il peut ĂȘtre
nécessaire de surcharger
73-usb-net-by-mac.link , pour éviter que le
systĂšme renomme nos interfaces USB et ainsi nous permettre
nous mĂȘme de les modifier.
3. Switch Virtuel et virtualisation des interfaces
Il peut se trouver que les interface physiques ne correspondent pas exactement au réseau que vous voudriez obtenir :
- Vous voulez utiliser plusieurs ports ethernet de votre systÚme comme switch réseau.
- Vous voulez des interfaces réseau virtuelles séparées, par exemple pour des conteneurs.
Ces ajustements sont possible via systemd-networkd.
PrĂ©nons un cas dâusage oĂč lâon veut vĂ©ritablement sĂ©parer les interfaces rĂ©seau utiliser des interfaces physiques rĂ©elles :
- Nous avons 4 interface réelle de
lan0Ălan3. - Nous voulons les regrouper dans un switch virtuel que
nous nommeront
vslanpour virtual switch lan. - Nous voulons 2 interfaces virtuelles pour,
vslan1pour lâhĂŽte etvslan2pour une machine virtuelle.
Le switch virtuel
Il suffit de créer une interface pont :
# /etc/systemd/network/vslan.netdev
[NetDev]
Name=vslan
Kind=bridge
On attache un par un les ports lan Ă ce pont, par exemple
pour lan0 :
# /etc/systemd/network/lan0.network
[Match]
Name=lan0
[Network]
Bridge=vslan
Il faut répéter cette étape pour les autres ou utiliser un
pattern par exemple : Name=lan*.
à partir de cette étape, si vous redémarrez networkd ou toute la machine, vous avez bel et bien un switch virtuel.
MacVlan : plusieurs interfaces virtuelles réseau de niveau 2
Pour avoir plusieurs addresses sur la machine, au niveau 2, câest-Ă -dire que chaque machine aura une interface avec une adresse mac dĂ©diĂ© et sera donc virtuellement totalement sĂ©parĂ©es, on utilise une fonctionnalitĂ© appelĂ©e MACVLAN.
Une limitation de ce mĂ©canisme sous đ§ Linux est que
lâinterface parente ne peut pas communiquer avec lâinterface
enfant, ainsi si jâavais une interface eth0 que
je séparerais par MACVLAN en
virt10@eth0 et virt2@eth0 et que
jâattribuerais des addresses Ă ces 3 interfaces,
eth0 ne pourrait communiquer avec
virt10@eth0 et virt10@eth1 et
inversement.
Lâastuce pour contourner le problĂšme dans notre cas, est simplement :
- de ne pas attribuer dâadresse Ă notre pont, ainsi le pont ne sera pas utiliser directement pour la communication rĂ©seau.
- ajouter un macvlan spĂ©cifique pour lâhĂŽte
(
vslan1dans le cas présent).
On configure ce pont pour fournir des macvlan pour nos adresses virtuelles :
# /etc/systemd/network/vslan.network
[Match]
Name=vslan
[Network]
MACVLAN=vslan1
MACVLAN=vslan2
ConfigureWithoutCarrier=yes
# désactiver la récupÚration/génération d'addresse en ipv6 et ipv4
IPv6AcceptRA=no
LinkLocalAddressing=no
DHCP=no
Il nous manque plus que les interfaces virtuelles MACLAN, ça se fait Ă lâaide de 2 fichiers. Par exemple pour vslan1, on dĂ©finit notre macvlan :
# /etc/systemd/network/vslan1.netdev
[NetDev]
Name=vslan1
Kind=macvlan
[MACVLAN]
Mode=bridge
On peut ensuite configurer lâinterface vslan1:
# /etc/systemd/network/vslan1.network
[Match]
Name=vslan1
[Network]
# Activer mdns (les addresse en .local)
MulticastDNS=yes
# Activer la récupÚration d'ip via le dhcp utile pour ipv4
DHCP=yes
# La rĂ©cupĂšration d'addresse ipv6 est ici implicite (valeur par dĂ©faut), mais il est possible d'ĂȘtre explicite:
# IPv6AcceptRA=yes
# LinkLocalAddressing=yes
# il est possible d'assigner si besoin manuellement une addresse ULA (locale) en plus de l'addresse globale obtenu
# via le routeur.
# un des avantages et que l'addressage ne changera pas mĂȘme en cas de coupure de l'internet/changement du prefixe globale
# assigné. Il faut néanmoins ajuster le réseau et les autres machine pour que la connectivité suivent. Par défault, sur
# mon réseau, mon routeur ne "route" pas ces addresse. il faut donc que les différence machine soit assigné avec des
# ipv6 ULA du mĂȘme sous rĂ©seau /64 ou ajuster le routeur en consĂ©quence.
# Address=fd70::b/64
[IPv6AcceptRA]
# Optionel: cela force le suffixe de l'ip globale généré. C'est pertinent amha pour des machine dont l'ipv6 devra
# ĂȘtre indiquĂ© dans des enregistrement dns AAAA.
Token=::b
Il vous suffira ensuite de donner lâautre interface
vslan2 Ă votre conteneur/machine virtuel avec
les outils dédiés.
Interface avec systemd-nspawn
Note : Si vous utilisez
systemd-nspawn, vous pouvez aussi utiliser la directive MACVLAN qui vous permet de dĂ©lĂ©guer la crĂ©ation de lâinterface.
# /etc/systemd/nspawn/container.nspawn
[Network]
Private=yes
# Solution basique : délégation de l'interface créer exprÚs pour le conteneur
Interface=vslan2
# Solution alternative, laissez nspawn gérer la création d'une interface MACVLAN à partir de vslan
# l'interface s'appelera "lan" à l'intérieur.
# MACVLAN=vslan:lan
Allez plus loin
Lâarticle suivant de cette sĂ©rie est Ă propos de rĂ©aliser un Routeur avec networkd.