🖧 RĂ©seau moderne sous linux: 2. Routeur avec networkd

| ~ 5 mins | 1002 mots

Dans cet article, je vais prĂ©senter rapidement comment vous pouvez faire un routeur minimaliste avec systemd‑networkd et remplacer totalement ou partiellement votre box internet.

Nous partirons du principe d’une box avec 2 liens :

Nous allons partir sur un approchĂ© minimaliste :

routeur

Note : configurer un routeur et vĂ©rifier son bon fonctionnement n’est pas simple, Des commandes comme ip address, ip route, traceroute, curl ou encore le logiciel wireshark sont trĂšs utile pour vous aider Ă  corriger votre configuration.

CÎté Wan

Cela dépend vraiment du FAI

La partie la plus complexe est celle consistant Ă  brancher votre routeur et Ă  rĂ©cupĂ©rer les ip (v4 et V6) depuis le fournisseur d’accĂšs, la mĂ©thode varie d’un fournisseur d’accĂšs Ă  l’autre.

La mĂ©thode varie selon les fournisseurs d’accĂšs :

Il peut ĂȘtre aussi possible de faire fonctionner un ONT diffĂ©rent sur le rĂ©seau, mais cela est un point dĂ©licat que je n’aborderais pas.

La rĂ©cupĂ©ration des IPs diffĂšre, elle aussi entre les fournisseurs d’accĂšs avec diverses mĂ©caniques :

Note : j’omets volontairement la question de la tĂ©lĂ©phonie/tĂ©lĂ©vision de l’équation. Il est effectivement possible de rĂ©cupĂ©rer ces services dans certain cas.

Base Générique

Dans tous les cas vous allez vous retrouver avec un fichier .network pour l’interface wan  :

# /etc/systemd/network/wan.network
[Match]
Name=wan

[Link]
RequiredForOnline=yes

# Si vous utilisez le DHCP (en tant que client, valable qu'avec certain FAI)
[Network]
DHCP=yes

Dans le cas oĂč vous voulez router en ipv6, vous pouvez ajouter ceci:

# /etc/systemd/wan.network.d/ipv6.conf
[Network]
IPv6Forwarding=yes

# Pour récupÚrer les ipv6 en DHCPv6 (valable qu'avec certains FAI)
LinkLocalAddressing=ipv6
DHCPPrefixDelegation=yes
IPv6AcceptRA=yes 

et en ipv4:

# /etc/systemd/wan.network.d/ipv4.conf
[Network]
IPv4Forwarding=yes

Pour ipv6, il est nĂ©cessaire d’activer le forwarding de façon globale en plus :

# /etc/systemd/networkd.conf.d/router.conf
[Network]
IPv6Forwarding=yes
# Il n'est pas nécessaire de faire pareil en ipv4:
# IPv4Forwarding=yes 

La raison est un comportement diffĂ©rent entre ipv6 et ipv4 dans le kernel. Il n’est pas super clair pour moi si cela est un bug ou pas, mais cela rend les choses pas super simple Ă  comprendre.

DHCP/DHCPv6

Si vous utilisez du DHCP/DHCPv6, il est probable que la configuration varie beaucoup d’un fournisseur Ă  l’autre, par exemple en cherchant sur le forum lafibre, on voit qu’une configuration dhcp pour orange ressemblerait plutĂŽt Ă  ça :

Note : pour orange une configuration supplĂ©mentaire pour utiliser une interface sur le VLAN 832 est nĂ©cessaire

# /etc/systemd/network/orange.network
[Match]
# orange is wan vlan 832
Name=orange

[DHCPv4]
ClientIdentifier=mac
VendorClassIdentifier=sagem
UserClass=FSVDSL_livebox.Internet.softathome.Livebox3
# A modifier avec des identifiants de connection
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\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**
UseHostname=no
UseDNS=no
UseDomains=no

[DHCPv6]
WithoutRA=solicit
UserClass=FSVDSL_livebox.Internet.softathome.livebox4
# A modifier avec des identifiants de connection
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\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**\x**
# A modifier avec des identifiants de connection
SendOption=16:string:\x00\x00\x04\x0e\x00\x05\x73\x61\x67\x65\x6d
UseDNS=no
UseNTP=no

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

Et une configuration dhcp pour sfr plutÎt à ça:

# /etc/systemd/wan.network.d/sfr.conf
[Link]
# set this to your router mac address
MACAddress=00:00:5E:00:53:00 

[DHCPv4]
ClientIdentifier=mac
UseDNS=yes
UseGateway=yes
UseHostname=no
VendorClassIdentifier=neufbox_bypass

[DHCPv6]
DUIDType=link-layer-time
PrefixDelegationHint=::/56
RapidCommit=No
SendOption=16:string:\x00\x00\xa0\x0c\x00\x0e\x6e\x65\x75\x66\x62\x6f\x78\x5f\x62\x79\x70\x61\x73\x73
UseDelegatedPrefix=Yes
WithoutRA=solicit
UseHostname=No

Bref, cette partie est un peu complexe et trĂšs variable d’un fournisseur Ă  l’autre et l’on trouve des tonnes de discussion sur le sujet qu’il peut ĂȘtre fastidieux de lire. Je vous conseille selon votre fournisseur d’expĂ©rimenter et si possible de partager (sauf les secrets bien sĂ»r) votre configuration fonctionnelle pour permettre Ă  d’autre de s’éviter ces recherches fastidieuses.

CÎté LAN

La partie Lan est beaucoup plus simple Ă  configurer dans le sens ou elle ne dĂ©pend pas de fournisseur d’accĂšs. Tout d’abord, nous allons activer mdns (relire la partie 1 pour la configuration systemd-resolved):

# /etc/systemd/network/lan.network
[Match]
Name=lan

[Network]
MulticastDNS=yes

IPv6

En IPv6, c’est relativement facile, il faut dĂ©lĂ©guer un prefix de sous rĂ©seau /64 pour l’interface lan:

# /etc/systemd/lan.network.d/ipv6.conf
[Network]
IPv6SendRA=yes
DHCPPrefixDelegation=yes
IPv6Forwarding=yes

[IPv6SendRA]
# Vous pouvez définir ici explicitement le dns à partager:
DNS=2a13:1001::86:54:11:100

[DHCPPrefixDelegation]
UplinkInterface=wan
SubnetId=0x1
Announce=yes

IPv4

En IPv4 c’est moins cool. Il faut passer du nat et faire du DHCP (en tant que serveur) :

# /etc/systemd/lan.network.d/ipv4.conf
[Network]
Address=192.168.1.1/24
DHCPServer=yes
# note: you may want to do masquerade by you firewall rule instead
IPMasquerade=yes
IPv4Forwarding=yes

[DHCPServer]
PoolOffset=0
PoolSize=100
EmitDNS=yes
# Vous pouvez définir ici explicitement le dns à partager:
DNS=86.54.11.100

Conclusion

Avec cette configuration, vous devriez avoir un accÚs internet fonctionnel dans tout votre réseau et la possibilité de communiquer en dualstack (ipv6 et ipv4).

NĂ©anmoins cette configuration Ă  des dĂ©fauts :

J’étudierai donc ces sujets ainsi que l’installation d’un vpn wireguard dans les prochains articles