network on linux
15/02/2018ifconfig
Historiquement, c’était la commande « ifconfig
» qui était utilisée, cette commande à des inconvénients. Elle est peu précise et l’affichage des informations peut varier selon les distributions. Il est donc difficile par exemple de récupérer les IP par des scripts shells pour pouvoir les utiliser dans un programme. Cette commande est peu à peu remplacée par la commande « ip
» (provient de iproute2).
historic names
Historiquement, on utilisait eth0
, eth1
, …, ethX
, ou le X est l’ordre de détection par la machine au démarrage. Cela peut poser un problème si cet ordre est amené à changer. Pour résoudre en partie ce problème Debian associe lors de la première connexions l’adresse MAC de la carte avec son ethX. Mais ce n’était pas suffisant.
predictable names
Nom basé sur l’emplacement physique de la carte réseau dans la machine et non plus sur l’ordre de détection. Le format ethX
est remplacé par enpXsY
et wlpXsY
X
le numéro du port PCI de la carte réseauY
le numéro de slot
Ex: enp0s5
- en -> carte type Ethernet (wl : carte wifi)
- p0 -> port PCI 0
- s3 -> slot 5
$ lspci # affiche ce qui est sur le bus PCI
...
00:05.0 Ethernet controller: Red Hat, Inc Virtio network device
...
00:05.0
00 -> signifie que le port PCI est le numéro 0
05 -> signifie que le slot PCI est le numéro 5
iproute2
Docummentation sur iproute2.
# affiche les interfaces
$ ip address show
$ ip address show eth0
# configurer une interface
$ sudo ip address add 10.10.10.11/24 dev eth0
$ sudo ip address del 10.10.10.11/24 dev eth0
# activer/désactiver une interface
$ sudo ip link set dev eth0 up
$ sudo ip link set dev eth0 down
# États d’une interface
# UP : est configurée et activée (pas forcement d’adresse, car il peut exister délai avec DHCP)
# LOWER_UP : UP + branchée physiquement pour communiquer
# state UP:
# state DOWN: désactivé
# afficher table de routage
$ ip route show
# gérer les routes
$ sudo ip route add 10.10.10.0/24 via 192.168.0.1
$ sudo ip route del 10.10.10.0/24
# activer mode routeur (routage des paquets qui ne sont pas destinés à la machine)
$ sudo sysctl net.ipv4.ip_forward=1
$ # ou
$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo sysctl net.ipv4.conf.eth0.forwarding=0 # interface spécifique
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf # rendre persistant
persistent routes
Debian
# ajouter directives dans la configuration de l'interface
$ cat /etc/network/interfaces
...
#auto eth0
#iface eth0 inet static
# address 10.10.10.1
# netmask 255.255.255.0
post-up ip route add 10.0.2.0/24 via 192.168.10.253
pre-down ip route del 10.0.2.0/24
...
CentOS
# il faut créer un fichier avec les routes à persister
$ cd /etc/sysconfig/netword-scripts
$ sudo touch route-eth0
$ sudo echo "192.168.10.0/24 via 10.0.2.253" >> route-eth0
dynamic configuration
Lorsqu’une carte réseau ne connaît pas ses paramètres réseau, elle interroge le réseau (DHCP) pour cela. On parle de configuration « dynamic » au sens ou l’on reçoit les paramètres dynamiquement par le réseau, cela ne signifie pas forcément que l’adresse est dynamique, configurer DHCP pour cela.
Debian
$ cat /etc/network/interfaces
auto eth0 # on active l'interface à chaque boot
iface eth0 inet dhcp # doit utiliser DHCP pour auto-configuration
$ sudo systemctl restart networking
CentOS
$ cat /etc/sysconfig/network-scripts/ipcfg-enp0s3
BOOTPROTO="dhcp" # on va utiliser DHCP
DEFROUTE="yes" # cette route contient la route par défaut
PEERDNS="yes" # recevoir des données DNS par le serveur DHCP
PEERROUTES="yes" # précédent mais pour des informations de routage
NAME="enp0s3" # nom de l'interface
UUID="" # ID unique de l'interface
DEVICE="enp0s3" # DOIT CORRESPONDRE AU NOM DU FIHICER ET À CELUI DE L'INTERFACE
ONBOOT="yes" # demarrage au boot de la machine
$ sudo systemctl restart network
static configuration
Debian
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.2.101
netmask 255.255.255.0
gateway 10.0.2.1
$ sudo systemctl restart networking
CentOS
$ cat /etc/sysconfig/ipcfg-enp0s3
BOOTPROTO=static # ou no
# PEERDNS et PEERROUTEs : on supprimer car plus de DHCP
IPADDR=10.0.2.100
NETMASK=255.255.255.0
GATEWAY=10.0.2.1
HOSTNAME=vm-web-centos
NM_CONTROLLED=no # dire au networkmanager qu’on prend le contrôle
ONBOOT=yes
$ sudo systemctl restart network
NetworkManager
Permet de gérer les interfaces sans être administrateur. On peut trouver de la documentation ici.
# status
systemctl status NetworkManager
systemctl restart NetworkManager
# network manager command line
$ nmcli
# mode graphique
$ nmtui
# afficher l'état
$ nmcli device
debug
$ ping 192.168.1.12
$ traceroute 192.168.1.12
$ mtr –n 192.168.1.12 # ping en continu et en live
# Informations sur les interfaces
$ ethtool
$ ethtool eth0
$ mii-tools
# Analyse de paquets
$ sudo tcpdump -i eth0
# Test de débit
$ wget -O /dev/null http://ipv4.online-dc3.testdebit.info/5G.iso
$ lsof -n -i :80
$ lsof -n -i :https