**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
# ip addr add 192.0.43.13/24 dev eth0 label eth0:3
# ip addr del 192.0.43.12/24 dev eth0
~~~

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
~~~

Pour avoir un bridge vide :

~~~
auto br0    
iface br0 inet manual
        bridge_ports none
~~~


## 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
~~~

### 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
~~~

<https://vincent.bernat.im/fr/blog/2014-tcp-time-wait-state-linux.html>

## Changer son adresse MAC

~~~
# ifconfig eth0 hw ether 01:23:45:67:89:0a
~~~

## Migrer de networkd à ifup

À 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é, …).
Voici les opérations à faire :

- On récupère les informations avec `networkctl status nomInterface` et/ou `cat /etc/systemd/network/50-default.network` ;
- On construit le fichier `/etc/network/interfaces` avec les informations récupérés (se baser sur un existant par exemple) ;
- On désactive `systemd-networkd` et on redémarre le service `networking` :

~~~
# 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
# 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
~~~

## Haute Performance

Optimisations pour la haute performance :

* conntrack -L ; net.nf_conntrack_max=262144
* 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
* relire <https://vincent.bernat.ch/fr/blog/2014-tcp-time-wait-state-linux>


## 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.
Si l'on ne perd pas la main, il faut stopper les commandes lancées dans les screens.
