wiki/HowtoDebian/Reseau.md

368 lines
10 KiB
Markdown
Raw Normal View History

2016-12-29 11:25:39 +01:00
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Reseau sous Debian
## Configuration IP fixe
La configuration d'une interface réseau avec une IP fixée se passe dans
le fichier _/etc/network/interfaces_. Voici un exemple simple :
~~~
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
~~~
Pour l'IPv6 il faut rajouter :
~~~
iface eth0 inet6 static
address 2001:500:88:200::10
netmask 48
up /bin/ip route add 2000::0/3 via 2001:500:88:200::254
~~~
Si besoin d'exécuter des commandes après l'activation de l'interface (classiquement
des ajouts de routes), on utilise l'option _up_. Par exemple :
~~~
auto eth0
iface eth0 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
up /sbin/route add -net 192.0.42.0/24 gw 192.0.43.242
~~~
Pour ajouter des interfaces virtuelles, toujours via _/etc/network/interfaces_ on fera :
~~~
auto eth0:0
iface eth0:0 inet static
address 192.0.43.11
netmask 255.255.255.0
~~~
Note 1 : certains hébergeurs comme OVH préconisent une configuration un peu différente, voir [wiki:ServeurOVH#IPFailOver]
Note 2 : dans certains cas particuliers (comme le besoin de préciser le nom de l'interface
dans une commande _iptables_) on souhaite avoir un nom d'interface virtuelle sans les ":".
Il faudra donc passer par la commande _ip_ (voir ci-dessous).
Mais tout cela se gère également dynamiquement via les commande _ifconfig_ et _ip_.
Quelques exemples :
~~~
# ifconfig eth0 add 192.0.43.11 netmask 255.255.255.0
# ip addr add 192.0.43.12/24 dev eth0
2018-10-18 17:08:01 +02:00
# ip addr add 192.0.43.13/24 dev eth0 label eth0:3
2019-02-20 11:21:02 +01:00
# ip addr del 192.0.43.12/24 dev eth0
2016-12-29 11:25:39 +01:00
~~~
Attention, avec la commande _ip_ le résultat ne sera pas visible avec _ifconfig_
si aucun label du type eth0:N n'est donné à l'interface ; on ne verra l'adresse qu'avec un :
~~~
# ip addr show
~~~
Notons que dans certains cas particuliers (comme le besoin de préciser le nom de l'interface
dans une commande _iptables_) on souhaite avoir un nom d'interface virtuelle sans les ":".
On utilisera donc simplement un label sans ":" :
~~~
# ip addr add 192.0.43.13/24 dev label eth00
# iptables -t nat -A POSTROUTING -o eth00 [...]
~~~
## Configuration serveur(s) DNS
Le fichier _/etc/hosts_ permet d'indiquer manuellement des enregistrements DNS, du type :
~~~
127.0.0.1 ad.doubleclick.net
~~~
Pour note, ces enregistrements sont par défaut prioritaires sur les réponses des serveurs DNS
(et pour rappel, les commandes dig et host n'utilisent PAS _/etc/hosts_).
La configuration du (ou des) serveur(s) DNS s'effectue dans le fichier _/etc/resolv.conf_.
Voici un exemple classique :
~~~
search example.com
nameserver 192.0.42.53
nameserver 192.0.43.53
options timeout:2 attempts:2
~~~
Pour des précisions sur les options possibles : _man resolv.conf_
Note : si l'on utilise Postfix, il faut le redémarrer suite à un changement dans _/etc/resolv.conf_ (car il est chrooté par dédaut et il gère sa propre copie dans /var/spool/postfix)
## Bridge
Pour créer un bridge :
~~~
# brctl addbr br0
# brctl addif br0 eth0
# ifconfig eth0 up
~~~
Au niveau /etc/network/interfaces on aura ainsi :
~~~
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet manual
bridge_ports eth0
~~~
Et l'on listera les infos d'un bridge via :
~~~
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001e0beac6c0 no eth0
~~~
2017-08-29 12:23:57 +02:00
Pour avoir un bridge vide :
~~~
auto br0
iface br0 inet manual
bridge_ports none
~~~
2016-12-29 11:25:39 +01:00
## VLAN
~~~
# aptitude install vlan
# modprobe 8021q
~~~
Pour ajouter dans le VLAN 42
~~~
# vconfig add eth0 42
# ifconfig eth0.42
~~~
Le fichier /etc/network/interfaces :
~~~
# cat /etc/network/interfaces
auto eth0.42
iface eth0.42 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
~~~
~~~
# systemctl enable networking
# systemctl start networking
2019-03-13 11:40:33 +01:00
~~~
2016-12-29 11:25:39 +01:00
### Gestion des VLAN avec iproute
L'utilitaire ip (paquet iproute) permet aussi de gérer les VLAN.
Exemple :
~~~
# ip link add link eth0 name eth0.42 type vlan id 42
# ip addr add 192.168.1.1/24 dev eth0.42
# ip link set dev eth0.42 up
~~~
## Désactiver IPv6
De façon temporaire :
~~~
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
~~~
De façon définitive :
~~~
# echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.conf
~~~
2017-01-20 23:57:24 +01:00
<https://vincent.bernat.im/fr/blog/2014-tcp-time-wait-state-linux.html>
2019-10-29 12:59:22 +01:00
2018-03-21 13:49:04 +01:00
## Changer son adresse MAC
~~~
# ifconfig eth0 hw ether 01:23:45:67:89:0a
~~~
2019-10-29 12:59:22 +01:00
2018-05-28 10:57:51 +02:00
## Migrer de networkd à ifup
2018-05-28 10:59:09 +02:00
À partir de Stretch, certaines machines sont installés d'office avec networkd (qui fait partie de systemd), on peut vouloir migrer à ifup (`/etc/network/interfaces`) pour plusieurs raisons (compatibilité, …).
2018-05-28 10:57:51 +02:00
Voici les opérations à faire :
- On récupère les informations avec `networkctl status nomInterface` et/ou `cat /etc/systemd/network/50-default.network` ;
2018-05-28 10:57:51 +02:00
- On construit le fichier `/etc/network/interfaces` avec les informations récupérés (se baser sur un existant par exemple) ;
2018-05-28 10:59:09 +02:00
- On désactive `systemd-networkd` et on redémarre le service `networking` :
2018-05-28 10:57:51 +02:00
~~~
# systemctl stop systemd-networkd.service; systemctl disable systemd-networkd.service; systemctl restart networking
~~~
Un exemple de conversion :
~~~
# networkctl status eno1
● 2: eno1
Link File: /etc/systemd/network/50-public-interface.link
Network File: /etc/systemd/network/50-default.network
Type: ether
State: routable (failed)
Path: pci-0000:03:00.0
Driver: igb
Vendor: Intel Corporation
Model: I210 Gigabit Network Connection
HW Address: 00:01:02:03:04:05 (Intel Corporate)
Address: 192.0.2.100
2001:db8::100
Gateway: 192.0.2.254 (Cisco Systems, Inc)
fe80::12bd:18ff:ffff:ffff (Cisco Systems, Inc)
DNS: 127.0.0.1
192.0.2.254
NTP: ntp.ovh.net
# cat /etc/systemd/network/50-default.network
2018-05-28 10:57:51 +02:00
# This file sets the IP configuration of the primary (public) network device.
# You can also see this as "OSI Layer 3" config.
# It was created by the OVH installer, please be careful with modifications.
# Documentation: man systemd.network or https://www.freedesktop.org/software/systemd/man/systemd.network.html
[Match]
MACAddress=00:01:02:03:04:05
[Network]
Description=network interface on public network, with default route
DHCP=no
Address=192.0.2.100/24
Gateway=192.0.2.254
#IPv6AcceptRA=false
NTP=ntp.ovh.net
DNS=127.0.0.1
DNS=192.0.2.254
Gateway=2001:41d0:0002:f5ff:ff:ff:ff:ff
[Address]
Address=2001:41d0:0002:f55c::/64
[Route]
Destination=2001:41d0:0002:f5ff:ff:ff:ff:ff
Scope=link
~~~
On reporte dans `/etc/network/interfaces` :
~~~
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
iface lo inet loopback
# The primary network interface
auto eno1
iface eno1 inet static
address 192.0.2.100/24
gateway 192.0.2.254
iface eno1 inet6 static
address 2001:db8::100/64
gateway 2001:41d0:0002:f5ff:ff:ff:ff:ff
post-up /sbin/ip -6 route add 2001:41d0:0002:f5ff:ff:ff:ff:ff dev eno1
post-up /sbin/ip -6 route add default via 2001:41d0:0002:f5ff:ff:ff:ff:ff
~~~
On désactive/stop networkd et on relance le service networking :
~~~
# systemctl stop systemd-networkd.service; systemctl disable systemd-networkd.service; systemctl restart networking
~~~
2018-10-11 01:50:04 +02:00
## Haute Performance
Si besoin de « haute performance », on appliquera la configuration [sysctl](https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt) suivante :
* `net.nf_conntrack_max=262144` (utiliser `conntrack -L` pour bien ajuster la valeur)
* `net.core.somaxconn=1024`
* `net.ipv4.tcp_max_syn_backlog=1024`
* `net.ipv4.tcp_tw_reuse=1`
* `net.ipv4.tcp_fin_timeout=30`
* `net.ipv4.ip_local_port_range=2000 65000`
Si cela ne suffit pas, voici quelques pistes pour aller plus loin :
* lire <https://vincent.bernat.ch/fr/blog/2014-tcp-time-wait-state-linux>
* lire <http://www.nateware.com/linux-network-tuning-for-2013.html> et notamment les options `net.core.*mem*`, `net.core.optmem_max`, `net.ipv4.tcp_*mem`, `net.core.netdev_max_backlog`, `net.ipv4.tcp_max_tw_buckets`
* augmenter le buffer de certains cartes réseau avec [ethtool]() : voir `ethtool -g eth0` et modifier avec `ethtool -G eth0 rx/rx-mini/rx-jumbo/tx NNNN`
2018-10-11 01:50:04 +02:00
2019-10-29 12:59:22 +01:00
## arp-sk
Dans certains cas, les routeurs gardent un cache ARP trop long, et il est pratique de les « empoisonner » pour le forcer à changer.
Cela peut être utilisé dans le cas d'un changement d'une adresse IP d'un serveur vers un autre sur le même réseau.
On utilise un vieil outil magique [arp-sk](http://sid.rstack.org/arp-sk/).
L'idée est de le compiler en static et de l'envoyer sur la machine avec la nouvelle IP :
~~~
# apt install libnet1-dev
$ cd /tmp
$ wget http://sid.rstack.org/arp-sk/files/arp-sk-0.0.16.tgz
$ tar xf arp-sk-0.0.16.tgz
$ cd arp-sk-0.0.16
$ ./configure LDFLAGS="-static"
$ make
$ scp src/arp-sk serveur.example:
~~~
puis sur ce serveur on spécifie l'IP déplacée (par exemple 192.0.2.42), l'IP du routeur (par exemple 192.0.2.254) et la nouvelle adresse MAC (par exemple 52:54:00:12:34:56) :
~~~
# /home/foo/arp-sk -r -S 192.0.2.42 -D 192.0.2.254 -s 52:54:00:12:34:56
...
~~~
2018-10-11 01:50:04 +02:00
## FAQ
### Bascule réseau à chaud
Si l'on fait une modification réseau sur un serveur distant il est important de ne pas perdre la main.
Voici une méthode possible en utilisant [screen](HowtoScreen), exemple avec la bascule sur un bridge :
~~~
# cp /etc/network/interfaces /var/backups/
# vim /etc/network/interfaces
[...]
# screen -S network -dm bash -c "sleep 300; cp /var/backups/interfaces /etc/network/; systemctl stop networking; systemctl start networking"
# screen -S reboot -dm bash -c "sleep 600; reboot"
# systemctl restart networking; ip a d 192.0.2.42/24 dev eth0; ip a a 192.0.2.42/24 dev br0; ip r d default via 192.0.2.1 dev eth0; ip r a default via 192.0.2.1 dev br0
~~~
Ainsi, si l'on perd la main, la machine revient accessible en quelques minutes.
2017-12-08 09:14:51 +01:00
Si l'on ne perd pas la main, il faut stopper les commandes lancées dans les screens.