17 Jul 2016, 00:00

Généralités réseau sous Linux

Share

Depuis stretch, la commande ifconfig n’est plus installée par défaut. Pour la remettre :

sudo aptitude install net-tools

ping

On peut spécifier l’interface de départ d’une requête ICMP via l’option -I , par exemple

ping -I 10.88.2.1 10.88.0.64

Nom des interfaces réseau

Depuis Stretch, udev possède un mécanisme de noms prédictifs d’interfaces réseau, qui devient activé par défaut, et qui nous donne des noms de type enp6s0. Ceci peut se désactiver via un paramètre à donner à grub dans le fichier /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

Source (qui explique plusieurs mécanismes réseau)

Une fois ce mécanisme supprimé, nous pouvons choisir le nom “standard” (eth0) que udev donnera aux interfaces réseau via le fichier /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="1c:6f:65:4f:d1:d2", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Il suffit de modifier l’adresse mac et le nom souhaité pour qu’ils soient opérationnels au prochain boot.
(il peut éventuellement être nécessaire de update-initramfs -k all -u ?)

Interaction de Network-Manager avec /etc/network/interfaces

Depuis quelques versions, Network-Manager gère les connexions qui ont été fixées dans /etc/network/interfaces. Ceci peut s’avérer perturbant si on a besoin d’une connexion complètement fixe en parallèle de NM (par exemple pour du wifi en réseau secondaire). Ce comportement peut se désactiver. Pour ceci, il faut que le fichier /etc/NetworkManager/NetworkManager.conf contienne ceci :

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

Reconfiguration d’une interface réseau

Il m’est arrivé qu’une interface refuse de se reconfigurer selon les paramètres du fichier /etc/network/interfaces. La commande service networking restart renvoyait, de mémoire, “Interface non configurée”. Pareil avec ifup, ifdown.
Finalement, le problème a été résolu grâce à la commande

ip addr flush dev enp4s0

enp4s0 étant évidemment l’interface posant problème.

Création d’une interface virtuelle (dummy)

Cas simple

echo dummy >> /etc/modules Au chargement du module, un périphérique dummy0 est automatiquement créé, avec une adresse MAC aléatoire.

Si on veut nommer soi-même le périphérique

Comme l’adresse MAC change à chaque boot, on ne peut pas utiliser la méthode via Udev.
On peut donc créer un script qui va créer l’interface, et la renommer, et même changer l’adresse MAC

#!/bin/sh

ip link add dummy0 type dummy
ip link set name my-dummy dev dummy0
ip link set my-dummy address 02:01:02:03:04:08

Ce script peut être appelé manuellement, au boot, ou via le paramètre “pre-up” dans le fichier /etc/network/interfaces

Bridge via le fichier /etc/network/interfaces

Exemple pour une interface TAP (OpenVPN) :

auto my-bridge
iface my-bridge inet dhcp
    bridge_ports eth0 tap0
    pre-up openvpn --mktun --dev tap0
    bridge_hw 01:02:03:04:0:06 # non obligatoire
    post-down openvpn --rmtun --dev tap0
    allow-hotplug eth0

Exemple de pont entre une carte physique et une carte virtuelle

auto my-bridge
iface my-bridge inet static
    bridge_ports eth0 dummy0
    address 10.0.0.1
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
pre-up ip link add dummy0 type dummy
post-down ip link delete dummy0

Les interfaces réseau utilisées n’ont pas besoin d’être mentionnées ailleurs dans le fichier.
La mention “auto” sert à démarrer automatiquement la connexion. Si elle n’est pas mentionnée, il faudra ifup my-dev

Configuration sysctl

Pour que le système accepte de transférer les paquets d’un réseau vers un autre (si le poste est conecté à 2 réseaux), il faut activer le forxard IPv4. On peut le faire à la volée avec sudo sysctl -w net.ipv4.ip_forward=1, et le rendre persistent avec la commande (en root) echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/10-network.conf.

Pour désactiver l’IPv6, echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.d/10-network.conf.