**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 ~~~ ## 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 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 * lire 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` ## 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 ... ~~~ ## 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.