La Fibre
Télécom => Logiciels et systèmes d'exploitation => Linux (usage serveur) => Discussion démarrée par: vivien le 29 juin 2017 à 18:14:13
-
SSH : Échec du serveur SSHD, au lancement du serveur, car l'interface a écouter n'est pas disponible
Au démarrage du serveur j'ai l'erreur Cannot assign requested address. :
# journalctl | grep ssh
juin 29 17:00:06 sshd[2095]: error: Bind to port 22 on 2001:abcd:abcd:abcd::5 failed: Cannot assign requested address.
juin 29 17:00:06 sshd[2095]: fatal: Cannot bind any address.
juin 29 17:00:06 systemd[1]: ssh.service: Main process exited, code=exited, status=255/n/a
juin 29 17:00:06 systemd[1]: ssh.service: Unit entered failed state.
juin 29 17:00:06 systemd[1]: ssh.service: Failed with result 'exit-code'.
Si je relance sshd quand le serveur est lancé, là c'est ok :
juin 29 17:02:08 sshd[2594]: Server listening on 2001:abcd:abcd:abcd::5 port 22.
C'est sur un serveur Ubuntu 16.04.2 équipé d'un Xeon E3-1240 v5 @3.50GHz
Voici le début du fichier /etc/ssh/sshd_config :
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
ListenAddress [2001:abcd:abcd:abcd::5]
AddressFamily inet6
Protocol 2
Le serveur est configuré pour n'écouter que en IPv6 (AddressFamily inet6) et sur une IPv6 précise (ListenAddress [2001:abcd:abcd:abcd::5]).
Voici la configuration IP: si dans le fichier /etc/ssh/sshd_config je remplace l'IP N°4 par l'IP N°1, je n'ai aucun problème : je pense donc que les IP additionnelles ne sont pas montées immédiatement et que sshd se lance avant que son IP d'écoute soit en service.
auto enp2s0f0
# IP N°1 :
iface enp2s0f0 inet static
address 123.123.123.234
netmask 255.255.255.248
gateway 123.123.123.233
iface enp2s0f0 inet6 static
address 2001:abcd:abcd:abcd::2
netmask 64
gateway 2001:abcd:abcd:abcd::1
dns-nameservers 2001:abcd:abcd:aaaa::1 2001:abcd:abcd:aaaa::2
# IP N°2 :
up ip addr add 123.123.123.235/29 dev $IFACE label $IFACE:0
down ip addr del 123.123.123.235/29 dev $IFACE label $IFACE:0
up ip -6 addr add 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
# IP N°3 :
up ip addr add 123.123.123.236/29 dev $IFACE label $IFACE:1
down ip addr del 123.123.123.236/29 dev $IFACE label $IFACE:1
up ip -6 addr add 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
# IP N°4 : Monitoring
up ip -6 addr add 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
(Les IPv4 / IPv6 ont étés remplacées)
J'ai trouvé une solution de contournement : créer un fichier /etc/cron.d/network qui redémarre sshd 20 secondes après le démarrage du serveur :
# Auto restart SSH on reboot
@reboot root sleep 20 ; /usr/sbin/service sshd restart
Je ne trouve pas ça propre.
vous avez déjà été confronté a ce problème ?
-
D'après les logs, le service network se lance à quel moment ?
Normalement sshd devrait s’exécuter après que le service réseau soit monté.
Tu peux vérifier dans /etc/systemd/system/sshd.service.d
After=network.target auditd.service
-
J'ai bien After=network.target dans /etc/systemd/system/sshd.service.d
Le réseau se lance bien juste avant sshd, mais j'imagine que c'est uniquement l'IPv4 / IPv6 principale.
Pas de souci quand je limite sshd à l'IP principale.
Je pense que les autres IP sont montées alors que le reste du démarrage continue. On n'a pas d'info précise sur les IP montées :
juin 29 17:52:49 systemd[1]: Started ifup for enp2s0f0.
juin 29 17:52:49 ifup[1554]: /sbin/ifup: waiting for lock on /run/network/ifstate.enp2s0f0
-
dans le up ?
auto enp2s0f0
....
# IP N°4 : Monitoring
up ip -6 addr add 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0 && /usr/sbin/service sshd start
down ip -6 addr del 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
-
J'ai le même souci avec Apache2 : depuis que j'ai définit dans /etc/apache2/ports.conf la liste des IP et des ports à écouter, apache refuse de démarrer car les IP secondaires ne sont pas up au moment où apache se lance.
# journalctl | grep apache2
juil. 07 11:58:49 apache2[2243]: * Starting Apache httpd web server apache2
juil. 07 11:58:50 apache2[2243]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to address [2001:abcd:abcd:abcd::3]:80
juil. 07 11:58:50 apache2[2243]: no listening sockets available, shutting down
juil. 07 11:58:50 apache2[2243]: AH00015: Unable to open logs
juil. 07 11:58:50 apache2[2243]: Action 'start' failed.
juil. 07 11:58:50 apache2[2243]: The Apache error log may have more information.
juil. 07 11:58:50 apache2[2243]: *
juil. 07 11:58:50 apache2[2328]: * Stopping Apache httpd web server apache2
juil. 07 11:58:50 apache2[2328]: *
Ne serait-il pas possible que systemd considère le réseau monté que quand les IP secondes ont été montées ?
Il faut peut être que j'écrive mon /etc/network/interfaces de manière différente ?
auto enp2s0f0
# IP N°1 :
iface enp2s0f0 inet static
address 123.123.123.234
netmask 255.255.255.248
gateway 123.123.123.233
iface enp2s0f0 inet6 static
address 2001:abcd:abcd:abcd::2
netmask 64
gateway 2001:abcd:abcd:abcd::1
dns-nameservers 2001:abcd:abcd:aaaa::1 2001:abcd:abcd:aaaa::2
# IP N°2 :
up ip addr add 123.123.123.235/29 dev $IFACE label $IFACE:0
down ip addr del 123.123.123.235/29 dev $IFACE label $IFACE:0
up ip -6 addr add 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
# IP N°3 :
up ip addr add 123.123.123.236/29 dev $IFACE label $IFACE:1
down ip addr del 123.123.123.236/29 dev $IFACE label $IFACE:1
up ip -6 addr add 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
# IP N°4 : Monitoring
up ip -6 addr add 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
(Les IPv4 / IPv6 ont étés remplacées)
-
Je pense avoir trouvé : https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
Il suffirait de faire un systemctl enable systemd-networkd-wait-online.service
Contenu du fichier /lib/systemd/system/systemd-networkd-wait-online.service :
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Wait for Network to be Configured
Documentation=man:systemd-networkd-wait-online.service(8)
DefaultDependencies=no
Conflicts=shutdown.target
Requisite=systemd-networkd.service
After=systemd-networkd.service
Before=network-online.target
[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes
[Install]
WantedBy=network-online.target
Autre piste remplacer network.target par network-online.target
=> https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
-
En fait, systemctl enable systemd-networkd-wait-online.service ne résout pas le pb d'IPv6 secondaire non démarré avant de lancer les autres services.
# systemctl status systemd-networkd-wait-online
● systemd-networkd-wait-online.service - Wait for Network to be Configured
Loaded: loaded (/lib/systemd/system/systemd-networkd-wait-online.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd-networkd-wait-online.service(8)
juil. 07 13:17:31 systemd[1]: Dependency failed for Wait for Network to be Configured.
juil. 07 13:17:31 systemd[1]: systemd-networkd-wait-online.service: Job systemd-networkd-wait-online.service/start failed with result 'dependency'.
Je vois d'autres personnes affectées par ce pb sur Ubuntu ou Debian : https://unix.stackexchange.com/questions/245635/systemd-networking-ipv6-networking-not-available-at-boot
Seul les IPv6 secondaires sont affecté. IPv4 ne connait pas ce pb.
-
Tu utilises les "up" et "down" mais tu devrais utiliser "pre-up" et "pre-down", pour être sûr que tout ça s'éxecute séquentiellement et pas à côté.
-
Étonnant comme solution, mais cela fonctionne !
J'ai bien mes services qui démarrent.
C'est normal d'avoir "Dependency failed" ?
juil. 07 13:17:31 systemd[1]: Dependency failed for Wait for Network to be Configured.
juil. 07 13:17:31 systemd[1]: systemd-networkd-wait-online.service: Job systemd-networkd-wait-online.service/start failed with result 'dependency'.
voici mon /etc/network/interfaces :
auto enp2s0f0
# IP N°1 :
iface enp2s0f0 inet static
address 123.123.123.234
netmask 255.255.255.248
gateway 123.123.123.233
iface enp2s0f0 inet6 static
address 2001:abcd:abcd:abcd::2
netmask 64
gateway 2001:abcd:abcd:abcd::1
dns-nameservers 2001:abcd:abcd:aaaa::1 2001:abcd:abcd:aaaa::2
# IP N°2 :
pre-up ip addr add 123.123.123.235/29 dev $IFACE label $IFACE:0
down ip addr del 123.123.123.235/29 dev $IFACE label $IFACE:0
pre-up ip -6 addr add 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::3/64 dev $IFACE preferred_lft 0
# IP N°3 :
pre-up ip addr add 123.123.123.236/29 dev $IFACE label $IFACE:1
down ip addr del 123.123.123.236/29 dev $IFACE label $IFACE:1
pre-up ip -6 addr add 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::4/64 dev $IFACE preferred_lft 0
# IP N°4 : Monitoring
pre-up ip -6 addr add 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
down ip -6 addr del 2001:abcd:abcd:abcd::5/64 dev $IFACE preferred_lft 0
(Les IPv4 / IPv6 ont étés remplacées)
-
C'est normal d'avoir "Dependency failed" ?
juil. 07 13:17:31 systemd[1]: Dependency failed for Wait for Network to be Configured.
juil. 07 13:17:31 systemd[1]: systemd-networkd-wait-online.service: Job systemd-networkd-wait-online.service/start failed with result 'dependency'.
Ouais, c'est à cause de ce que t'as fait avant.