[technique] script custom-network.sh avec systemd en remplacement de /etc/network/interfaces /etc/rc.local

Laurent GUERBY laurent at guerby.net
Sam 1 Aou 16:13:25 CEST 2020


Bonjour,

Dans certains cas il peut etre preferable d'avoir un script sur mesure
pour configurer le reseau (usage avancé iproute2, bridge, VLAN ...)
plutot que les fichiers standard du système. Historiquement les
machines tetaneutral.net ont utilisé /etc/rc.local mais avec parfois
des problemes de sequencement dans le boot avec les autres services.

Avec systemd il est possible de definir un unit qui se lance au bon
moment pour la configuration du reseau et qui appelle un script sur
mesure, ici custom-network.sh avec iproute2 en mode routage
tetaneutral.net.

1/ creer le script /etc/custom-network.sh
2/ definir /etc/systemd/system/custom-network.service
3/ editer /etc/network/interfaces pour dire "manual"
(et/ou supprimer /etc/rc.local si le reseau etait la)
4/ reboot

Sincèrement,

Laurent

# touch /etc/custom-network.sh
# chmod 755 /etc/custom-network.sh
# cat /etc/custom-network.sh
#!/bin/bash

DEV=eth0

for i in /proc/sys/net/ipv6/conf/*; do for j in autoconf accept_ra; do echo 0 > $i/$j; done;done

ip link set $DEV up
ip addr add 91.224.148.NNN/32 dev $DEV
ip route add default via 91.224.148.0 dev $DEV onlink
ip -6 addr add fe80::XX:YY/64 dev $DEV
ip -6 addr add 2a03:7220:80XX:YY00::1/56 dev $DEV
ip -6 route add default via fe80::31 dev $DEV


rm -f /etc/resolv.conf
cat > /etc/resolv.conf <<EOF
nameserver 91.224.149.254
nameserver 91.224.148.10
nameserver 2a03:7220:8081:fe00::1
domain tetaneutral.net
search tetaneutral.net
EOF

exit 0

# cat /etc/systemd/system/custom-network.service
[Unit]
Description=Custom Network
Before=network-pre.target
Wants=network-pre.target
DefaultDependencies=no
Requires=local-fs.target
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/etc/custom-network.sh
RemainAfterExit=yes
[Install]
WantedBy=network.target

# chmod 644 /etc/systemd/system/custom-network.service
# systemctl enable custom-network
# systemctl daemon-reload

# cat /etc/network/interfaces
(...)
# see /etc/custom-network.sh
iface eth0 inet manual




Plus d'informations sur la liste de diffusion technique