Como reiniciar com êxito uma rede sem reinicializar pelo SSH?

98

No Ubuntu 14.04, sudo service networking restartnem sudo /etc/init.d/networking restartfaça mais nada. Os dois também saem com o código 1. Obviamente, algo mudou (ou meio mudou), mas não consigo encontrar o que. Obviamente, isso causa problemas com a reconfiguração de rede remota e ferramentas como o 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

Qual é a maneira correta de reiniciar a rede no Ubuntu 14.04 Server remotamente?

SimonJGreen
fonte
Deseja realmente reiniciar a rede ou apenas reiniciar uma interface como eth0? De qualquer forma, provavelmente interromperá a conexão ssh.
Chile555 31/03
1
Como ambos são scripts de shell, obtenha informações com sudo bash -x /usr/sbin/service networking restartesudo bash -x /etc/init.d/networking restart
waltinator
O @terdon foi um pouco bobo por ter uma tag para o dia 14.04, especialmente porque a descrição diz que é a versão "atual" que não é. Dito isto, este problema é totalmente reproduzível na 13.10.
SimonJGreen
@ chili555 o que eu quero que aconteça é que as mudanças no / etc / network / interfaces entrem em vigor. Antes desses scripts, a interrupção do trabalho das conexões SSH sobrevive a essa reinicialização.
SimonJGreen
@waltinator informações adicionais adicionadas à pergunta, obrigado pela sugestão
SimonJGreen

Respostas:

121

Acontece que este é um "recurso". A única maneira suportada de reiniciar uma interface no Ubuntu Server ésudo ifdown eth0 && sudo ifup eth0

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

SimonJGreen
fonte
8
Certifique-se de executar 'sudo ifdown eth0 && sudo ifup eth0' (note o segundo sudo) se você não estiver executando este comando como root
mtpettyp
3
Isso pode ser feito se estiver conectado via ssh? Ou seja, os dois comandos serão executados antes da desconexão?
25414
2
No meu caso, correr sudo service networking restartparecia ter atrapalhado as coisas. Então eu tive que correr sudo ifdown eth0 && sudo ifup eth0duas vezes. Sim duas vezes.
polarize
@ExceptionSlayer: Não, eles não funcionaram para mim. Eu tive que desligar o servidor fisicamente e ligá-lo novamente (Ubuntu 14.04).
Xdg 01/03
4
Não está usando uma opção em ;vez de &&uma opção mais segura?
Isaac
72

ifdown, ifup não funcionou para mim (provável tempo limite da conexão SSH antes do segundo comando). O que funcionou foi:

sudo service network-manager restart

Este foi em um sistema desktop Ubuntu 14.04.

dpb
fonte
4
A resposta aceita não funcionou para mim; este fez. (Instalação nova do 14.04.1)
u2n
2
Pode confirmar que isso funciona para mim no Trusty (Ubuntu 14.04).
gerlos 29/09
3
A resposta "ifdown / ifup" também não funcionou para mim no Ubuntu 14.04, mas funcionou.
dieuwe
4
A resposta aceita é aplicável ao Ubuntu 12.04 e inferior. Esta resposta é aceitável para 14.04.
Swiss
4
No meu 14.04.2, este serviço não existe - reinicie o gerenciador de rede do serviço sudo.
Xdg 01/03
6

O que mudou é que eles não querem mais que você "salte" a rede. parar e iniciar ainda funciona. reiniciar não funciona mais. Acabei de "resolver" esse "problema", ou seja, recuperei o antigo comportamento. Para reverter para o comportamento anterior: Pegue um arquivo 13.10 /etc/init/networking.conf e substitua o arquivo 14.04 por ele. (editar: esclareceu qual substitui qual)

O processo é assim:

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

Faça o mesmo com o script /etc/init.d/networking, que é o que o arquivo /etc/init/networking.conf faz referência / chamadas.

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). 

Obviamente, há uma razão pela qual eles colocam uma saída defensiva lá, mas eles não se preocupam em realmente mostrar o que está acontecendo muito bem.

Uma entrada entra em /var/log/upstart/networking.log quando você tenta, que se parece com:

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

Mas eles realmente poderiam / deveriam ter essa saída como mensagem de diálogo quando você tenta reiniciar a rede de serviço. Ah bem. descobri e até mesmo um trabalho antigo.

EDIT: Descobri que isso causa um acionamento não intencional do script controlado pelo /etc/init/failsafe.conf, o que é indesejável, pois causa um atraso de tempo limite de 120 segundos em cada inicialização ... bem como talvez mascarando configurações / redes reais reais problemas que a aparência desse atraso indicaria, mas já está aparecendo o tempo todo. (por exemplo, um cabo desconectado, que estava permitindo o acesso a um compartilhamento de arquivos de rede mapeado em / etc / fstab, por exemplo)

De qualquer forma, vou descobrir o que está causando isso sempre atingindo o tempo limite e publicarei uma correção quando o encontrar.

kvm-user420
fonte
5
a sabedoria de modificar um comportamento básico do sistema operacional é discutível.
0xF2
Por que eles removeram a capacidade de reiniciar? Eu gostaria de saber isso antes de o restabelecer.
Flickerfly
@ 0xF2 - você quer dizer questionable.
Dale Anderson
@DaleAnderson that too ;-)
0xF2 6/06
3

Em referência à resposta do kvm-user420, fui adiante e configurei um script para substituir os scripts de rede do Ubuntu 14.04 pelos do Ubuntu 13.10

Você pode encontrá-lo aqui: https://github.com/metral/restore_networking

Desfrutar!

metral
fonte
Isso funcionou para mim. Esperemos que, um dia Upstart só vai embora ;-)
Andrew
0

Corrijo o problema com este script: adicione este script em "/etc/network/if-down.d"

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

conteúdo:

#!/bin/bash 

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

e finalmente :

chmod +x ifdown

agora você pode alterar o endereço IP e reiniciar o serviço de rede com systemctl ou comando de serviço.
NOTA : este script é muito simples e NÃO MANUSEIA vm, tap, bridge, ... interfaces. realmente liberar todas as interfaces excluem lo (loopback).

mah454
fonte