Comment redémarrer un réseau sans redémarrer via SSH?

98

Dans Ubuntu 14.04 ni sudo service networking restartne sudo /etc/init.d/networking restartplus rien faire. Ils sortent tous les deux avec le code 1. Quelque chose a évidemment changé (ou à moitié changé) mais je ne trouve pas quoi. Cela pose évidemment des problèmes de reconfiguration du réseau distant et d’outils tels que Ansible.

$ sudo bash -x /usr/sbin/service networking restart
[sudo] password for wirehive:
++ basename /usr/sbin/service
+ VERSION='service ver. 0.91-ubuntu1'
++ basename /usr/sbin/service
+ USAGE='Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]'
+ SERVICE=
+ ACTION=
+ SERVICEDIR=/etc/init.d
+ OPTIONS=
+ '[' 2 -eq 0 ']'
+ cd /
+ '[' 2 -gt 0 ']'
+ case "${1}" in
+ '[' -z '' -a 2 -eq 1 -a networking = --status-all ']'
+ '[' 2 -eq 2 -a restart = --full-restart ']'
+ '[' -z '' ']'
+ SERVICE=networking
+ shift
+ '[' 1 -gt 0 ']'
+ case "${1}" in
+ '[' -z networking -a 1 -eq 1 -a restart = --status-all ']'
+ '[' 1 -eq 2 -a '' = --full-restart ']'
+ '[' -z networking ']'
+ '[' -z '' ']'
+ ACTION=restart
+ shift
+ '[' 0 -gt 0 ']'
+ '[' -r /etc/init/networking.conf ']'
+ which initctl
+ grep -q upstart
+ initctl version
+ case "${ACTION}" in
+ stop networking
stop: Job failed while stopping
+ :
+ exec start networking
start: Job is already running: networking

Quelle est la bonne façon de redémarrer la mise en réseau à distance dans Ubuntu 14.04 Server?

SimonJGreen
la source
Voulez-vous vraiment redémarrer le réseau ou simplement redémarrer une interface telle que eth0? Dans tous les cas, cela rompra probablement la connexion SSH.
chili555
1
Puisque tous les deux sont des scripts shell, sudo bash -x /usr/sbin/service networking restartsudo bash -x /etc/init.d/networking restart
obtenez des
@terdon est un peu idiot d'avoir une étiquette autour de 14.04 alors, surtout que la description dit que c'est la version "actuelle" qui n'est pas. Cela dit, ce problème est totalement reproductible en 13.10.
SimonJGreen
@ chili555 Ce que je veux, c'est que les modifications apportées à / etc / network / interfaces prennent effet. Avant ces scripts, les connexions SSH en état de fonctionnement survivent à ce redémarrage.
SimonJGreen
@waltinator informations supplémentaires ajoutées à la question, merci pour la suggestion
SimonJGreen

Réponses:

121

Il s’avère qu’il s’agit d’une "fonctionnalité". Le seul moyen de redémarrer une interface dans Ubuntu Server est la suivante:sudo ifdown eth0 && sudo ifup eth0

https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/1301015

SimonJGreen
la source
8
Assurez-vous que vous exécutez 'sudo ifdown eth0 && sudo ifup eth0' (notez le deuxième sudo) si vous
n'exécutez
3
Est-ce que ça va faire si connecté via ssh? Autrement dit, les deux commandes seront-elles exécutées avant la déconnexion?
meawoppl
2
Dans mon cas, courir sudo service networking restartsemblait avoir tout gâché. J'ai donc dû courir sudo ifdown eth0 && sudo ifup eth0deux fois. Oui, deux fois.
polarise
@ExceptionSlayer: Non, ils n'ont pas fonctionné pour moi. J'ai dû éteindre le serveur physiquement et le rallumer (Ubuntu 14.04).
Xdg
4
Est de ne pas utiliser un au ;lieu d' &&une option plus sûre?
Isaac
72

ifdown, ifup n'a pas fonctionné pour moi (délai de connexion SSH probable avant la deuxième commande). Quel était le travail était:

sudo service network-manager restart

C'était sur un système 14.04 ubuntu-desktop.

dpb
la source
4
La réponse acceptée n'a pas fonctionné pour moi; celui-ci l'a fait. (Nouvelle installation du 14.04.1)
u2n
2
Peut confirmer que cela fonctionne pour moi sur Trusty (Ubuntu 14.04).
gerlos
3
La réponse "ifdown / ifup" n'a pas fonctionné pour moi non plus sur Ubuntu 14.04, mais cela a fonctionné.
mardi
4
La réponse acceptée est applicable à Ubuntu 12.04 et inférieur. Cette réponse est acceptable pour 14.04.
Suisse
4
Sur mon 14.04.2, ce service n'existe pas - redémarrage du gestionnaire de réseau du service sudo.
Xdg
6

Ce qui a changé, c'est qu'ils ne veulent plus que vous "rebondiez" sur le réseau. arrêter et commencer à travailler toujours. le redémarrage ne fonctionne plus. Je viens de "résoudre" ce "problème", c'est-à-dire que j'ai retrouvé l'ancien comportement. Pour revenir à un comportement antérieur: Prenez un fichier 13.10 /etc/init/networking.conf et remplacez le fichier 14.04 par celui-ci. (edit: clarifié lequel remplace lequel)

Le processus ressemble à ceci:

(Just before this, I configured my /etc/network/interfaces for eth1 on a 192.168.117.x address)

"/etc/network/interfaces" 16L, 413C written  
root@1404-Anode:~# service networking restart  
stop: Job failed while stopping  
start: Job is already running: networking  
root@1404-Anode:~# echo "hmm, wth?"
hmm, wth?
root@1404-Anode:~# ifconfig  
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19  
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0  
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global  
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link  
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:646 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:531 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:58748 (58.7 KB)  TX bytes:75465 (75.4 KB)  
(lo removed here)  
root@1404-Anode:~# cd /etc/init
root@1404-Anode:/etc/init# diff networking.conf.1310 networking.conf.1404  
13c13  
<       and (stopped udevtrigger or container)) or runlevel [2345]  
---  
>     and (stopped udevtrigger or container)) or runlevel [2345] or stopped  networking   >RESULT=failed PROCESS=post-stop EXIT_STATUS=100  
16a17,20  
>     if [ "$UPSTART_EVENTS" = "stopped" ] && [ "$UPSTART_JOB" = "networking" ] && [ "$EXIT_STATUS" = "100" ]; then  
>         exit 0  
>     fi  
>  
21a26,31  
>     if [ -z "$UPSTART_STOP_EVENTS" ]; then  
>        echo "Stopping or restarting the networking job is not supported."  
>         echo "Use ifdown & ifup to reconfigure desired interface."  
>         exit 100  
>     fi  
root@1404-Anode:/etc/init#  

Faites de même pour le script /etc/init.d/networking, qui correspond au fichier /etc/init/networking.conf.

root@1404-Anode:/etc/init# cp networking.conf.1310 networking.conf  
root@1404-Anode:/etc/init# cd ../init.d  
root@1404-Anode:/etc/init.d# diff networking.1404 networking.1310  
15d14  
< STATEDIR="$RUN_DIR/state"
21a21,27
> # Make sure that it's clear to the user that they shouldn't use this
> # script under upstart
> if init_is_upstart; then
>       echo "ERROR: Calling a sysvinit script on a system using upstart isn't supported. Please use the 'service' command instead."  
>       exit 1
> fi
>
52,54d57
<       if ! chown root:netdev "$RUN_DIR" ; then
<           log_warning_msg "can't chown $RUN_DIR"
<       fi
160,162d162
<       if init_is_upstart; then
<               exit 1
<       fi
166c166
<       state=$(ifquery --state)
---
>       state=$(cat /run/network/ifstate)
root@1404-Anode:/etc/init.d# cp networking.1310 networking
root@1404-Anode:/etc/init.d# service networking restart
networking stop/waiting
networking start/running
root@1404-Anode:/etc/init.d# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:318654 (318.6 KB)  TX bytes:418804 (418.8 KB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:23
          inet addr:192.168.117.105  Bcast:192.168.117.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed6:a823/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98 errors:0 dropped:58 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20055 (20.0 KB)  TX bytes:1226 (1.2 KB)
(lo removed)
root@1404-Anode:/etc/init.d# echo "hah, it works! *8^)"
Hah, it works! *8^)
root@1404-Anode:/etc/init.d#

(note: the steps where I scp'd the 1310 versions into the 1404 system are omitted for brevity). 

De toute évidence, il y a une raison pour laquelle ils ont mis une sortie défensive à l'intérieur, mais ils ne se donnent pas la peine de vraiment expliquer ce qui se passe.

Une entrée va dans /var/log/upstart/networking.log lorsque vous essayez, cela ressemble à:

Stopping or restarting the networking job is not supported.  
Use ifdown & ifup to reconfigure desired interface.  

Mais ils pourraient vraiment / devraient avoir comme résultat le message de dialogue lorsque vous essayez de redémarrer le réseau de service. Et bien. compris et même un travail à l’ancienne.

EDIT: J'ai constaté que cela provoquait un déclenchement involontaire du script contrôlé par /etc/init/failsafe.conf, ce qui est indésirable, car il provoque un délai d'attente de 120 secondes à chaque démarrage ... ainsi que peut-être même en masquant les erreurs de configuration / réseau. problèmes que l'apparition de ce délai indiquerait, mais il montre déjà tout le temps. (par exemple, un câble débranché permettant l’accès à un partage de fichiers réseau mappé dans / etc / fstab, par exemple)

Dans tous les cas, je vais trouver la cause du dépassement de délai et publier un correctif lorsque je le trouverai.

kvm-user420
la source
5
la sagesse de modifier un comportement de système d'exploitation de base est discutable.
0xF2
Pourquoi ont-ils supprimé la possibilité de redémarrer? J'aimerais savoir cela avant de le rétablir.
Scintillement
@ 0xF2 - vous voulez dire questionable.
Dale Anderson
@DaleAnderson ça aussi ;-)
0xF2
3

En référence à la réponse de kvm-user420, j'ai créé un script qui remplacera les scripts réseau d'Ubuntu 14.04 par celui d'Ubuntu 13.10.

Vous pouvez le trouver ici: https://github.com/metral/restore_networking

Prendre plaisir!

metral
la source
Cela a fonctionné pour moi. Espérons qu'un jour, Upstart s'en ira ;-)
Andrew,
0

Je résous le problème avec ce script: veuillez ajouter ce script à "/etc/network/if-down.d"

cd /etc/network/if-down.d
vim ifdown

contenu :

#!/bin/bash 

for I in /sys/class/net/* 
do
        ifname=$(basename $I) 
        if [ $ifname != "lo" ] ; then 
                ip addr flush $ifname
        fi
done

et enfin :

chmod +x ifdown

Maintenant, vous pouvez changer d'adresse IP et redémarrer le service réseau avec la commande systemctl ou service.
REMARQUE : ce script est trop simple et NE MANIPULE PAS les interfaces vm, tap, bridge, .... efface réellement toutes les interfaces exclut lo (bouclage).

mah454
la source