Réseau

Pense-bête

Équivalence plages d’adresses notables IPv4/IPv6

IPv4IPv6
Route par défaut0.0.0.0/0::/0
Route non spécifiée0.0.0.0/32::/128
Loopback127.0.0.0/24::1/128
Multicast224.0.0.0/8ff00::/8
Link-local169.254.0.0/16fe80::/10
Privé (non-routable)10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16fc00::/7
Documentation/exemples (non-routable)192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/242001:db8::/32

Astuces

Voir le trafic réseau niveau applicatif de sa machine en clair avec tcpdump

# tcpdump -ni any -s 0 -w - | strings

Utiliser plusieurs adresses IP sur une seule interface réseau physique

# ifconfig eth0 192.168.1.1 (adresse IP primaire)
# ifconfig eth0:0 172.16.100.21
# ifconfig eth0:1 10.0.0.42
…

Transférer des données entre deux machines sans FTP/SCP/NFS/Samba

Pour transférer des données entre deux machines en réseau à l’arrache sans disposer de clients/serveurs FTP/SCP, Netcat et Tar sont vos meilleurs amis (le port <port> doit être le même sur les deux machines).

Sur la machine émettrice :

$ tar cvf - * | netcat <machine destinataire> <port>

Sur la machine destinataire :

$ netcat -l -p <port> | tar xv

…et vous serez limité uniquement par la vitesse du média et le débit des disques ;)

Cloner un disque dur en réseau

Dans le même esprit que l’astuce précédente il est possible de dupliquer à l’identique un “block device” (une partition ou encore un disque dur entier) d’une machine vers une autre à travers le réseau à l’aide de Netcat et cette fois-ci la commande dd :

Sur la machine originale (<device à cloner> étant un “device” entier type /dev/sda soit une de ses partitions, par exemple /dev/sda2) :

# dd if=<device à cloner> | netcat <machine destinatrice> <port>

Sur la machine destinataire (<device de destination> pouvant être soit un fichier “image” du device cloné soit un “block device” existant sur la machine destinataire, un disque dur entier ou une de ses partitions) :

# netcat -l -p <port> | dd of=<device de destination>

Surveiller les nouvelles connexions TCP avec tcpdump

Voici un filtre tcpdump bien pratique pour suivre en temps réel les établissements de connexions TCP : seuls les segments TCP marqués du “flag” SYN seront affichés.

# tcpdump <vos options favorites> 'tcp[13] & 2 == 2'

Explication pour briller en société : on applique le masque binaire “00000010” (“2” en base décimale) sur le 13ème octet de l’en-tête des segments TCP. Si le résultat de ce “ET” logique correspond à 2, alors ce segment TCP est “flaggé” SYN.

Changer le netmask d’une adresse IP sans perdre les routes réseau associées

Si vous avez besoin de rectifier à la volée le netmask d’une adresse IP, sachez qu’en utilisant la commande ifconfig vous perdrez les routes associées à l’interface réseau à laquelle l’adresse IP est liée. Pour éviter cela, utilisez la commande ip (de la suite d’utilitaires “iproute2”) :

root@machine:~# ip addr add 192.168.0.1/25 dev <interface réseau>
root@machine:~# ip addr del 192.168.0.1/24 dev <interface réseau>

Note : Cette manipulation fonctionne dans les deux sens (augmentation/diminution du subnet), veillez toutefois à ce que votre route par défaut soit toujours dans le subnet cible…

Forcer le démontage d’une partition montée via NFS lorsque le serveur est injoignable

Démonter une partition NFS montée depuis un client lorsque le serveur devient injoignable peut s’avérer assez frustrant. Deux méthodes qui généralement fonctionnent :

root@machine:~# umount -f /point/de/montage

Si cela ne fonctionne pas mieux, méthode “fainéante” (détache le “filesystem” de l’arborescence immédiatement, et supprime les références au “filesystem” dès qu’il le peut en tâche de fond) :

root@machine:~# umount -l /point/de/montage

Lister simplement les services en écoute avec ss

Pour peu que le paquet iproute (ou iproute2, selon les distributions) soit installé, il est possible de lister tous les services et “daemons” en écoute sans avoir recours à |grep :

# ss -l

Options utiles :

SSLifier un service à l’arrache avec socat

Besoin de rendre accessible temporairement un service via SSL ? socat est votre ami :

socat OPENSSL-LISTEN:443,cert=certificat.crt,key=certificat.key,verify=0,reuseaddr,fork TCP4:localhost:80

Accéder à une socket UNIX locale sur une machine distante avec socat

À l’aide de socat, vous pouvez créer une passerelle vous permettant d’utiliser localement une socket UNIX située sur un serveur distant.

Sur le serveur distant :

socat TCP-LISTEN:6666,reuseaddr,fork UNIX:/var/run/socket.sock

Sur la machine locale :

socat TCP:serveur.loin.com:6666 UNIX-LISTEN:/var/run/socket.sock,fork

Vous pouvez à présent utiliser la socket /var/run/socket.sock comme si vous étiez sur le serveur distant.

⚠️ Attention, cette méthode créé une faille de sécurité potentielle : ne faites ceci que sur un réseau de confiance, et en aucun cas sur Internet sans firewall !

Bloquer simplement le trafic réseau vers une adresse ou un réseau IP

Pour bloquer très simplement le trafic réseau en provenance et/ou à destination d’un réseau IP (et donc d’une adresse, si netmask /32), il est possible avec la commande ip du paquet “iproute” (ou “iproute2”, selon les distributions GNU/Linux) de déclarer une “nullroute” et donc d’ignorer tout paquet IP en rapport avec le réseau ciblé :

ip route add blackhole 10.240.11.254/32
ip route del 10.240.11.254/32 # pour supprimer la nullroute

Écouter le traffic sur une socket UNIX

mv /path/to/sock /path/to/sock.original
socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original