O que faz “sudo echo nameserver 8.8.8.8 /etc/resolv.conf”?

9

Alguém pode me dizer o que o sudo echo nameserver 8.8.8.8 > /etc/resolv.conf faz?

Eu costumava ter queda aleatória de conexão com a internet por 15 segundos a 3 minutos, mas depois de usar este comando, a conexão com a internet está funcionando como um encanto. Estou apenas curioso para saber o que essa linha de comando mágica fez.

    
por Jeanno 30.01.2013 / 02:14

1 resposta

21

Ele substitui o servidor de nomes (DNS) usado em sua máquina pelo serviço de DNS público do Google . Se a execução desse comando ajudar você a sair, provavelmente você está tendo problemas de DNS nas configurações padrão fornecidas pela sua rede (DHCP). Embora seja melhor resolver a causa raiz do problema, essa é uma resposta geral à sua pergunta.

Explicação do comando

sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
  • sudo eleva os privilégios para serem root nesse caso.
  • echo apenas mostra os argumentos seguintes para a saída padrão (neste caso ela gera nameserver 8.8.8.8 )
  • > redireciona a saída padrão para um arquivo (sobrescreve) em um shell normal do Unix.
  • /etc/resolv.conf é o arquivo no qual a saída é gravada.
  • Ter uma linha nameserver 8.8.8.8 in /etc/resolv.conf torna o sistema usando o servidor de nomes com o endereço IP 8.8.8.8 para resolver nomes de domínio para endereços IP. (versão muito curta do que realmente acontece)
  • 8.8.8.8 é um dos endereços publicados pelo Google de onde seus serviços de DNS públicos estão escutando.

sudo erro

Embora essa explicação pareça plausível, isso não funcionará, por causa de um erro você receberá:

bash: /etc/resolv.conf: Permission denied

Por quê? O redirecionamento de saída é tratado pelo seu shell (aqui: Bash) e não é levado em conta para o comando usado para sudo . Semelhante a como multiplicar em matemática tem precedência sobre a adição. Então, é só echo que tem privilégios elevados, mas sua concha não tem! Para resolver isso, deve-se executar este comando como

sudo sh -c "echo nameserver 8.8.8.8 > /etc/resolv.conf"

ou, usando um pipe e tee para gerar um arquivo:

echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf  #prints to screen as well

Ubuntu e Network Manager

No Ubuntu, isso é apenas uma mudança temporária, pois o Network Manager "gerencia" o arquivo /etc/resolv.conf . Modificações locais serão sobrescritas. É por isso que você deve configurar isso no Network Manager para que ele seja persistente.

Configuração usando o Network Manager

Eu recomendaria configurar seu PC adequadamente usando o Network Manager. Estou assumindo que você está usando o DHCP em sua rede aqui (mais comum). Em seguida, faça isso para executar o mesmo equivalente ao comando que você estava usando:

  1. Abra Editar conexões :

  2. Edite o perfil de conexão que você está usando.

  3. Na guia Configurações IPv4 :

    • Método: Somente endereços automáticos (DHCP)

      Essa configuração faz com que seja feita uma solicitação DHCP regular para a configuração do endereço IP do seu host, mas ignora outras opções não obrigatórias, como os servidores DNS sugeridos.

    • Servidores DNS: 8.8.8.8
    • Pressione Salvar

Feito.

Notas importantes

Em uma rede local ou corporativa, o servidor DNS local pode ser usado para hosts locais. Você perderá essa funcionalidade pedindo diretamente aos servidores do Google para resolver nomes para você. Portanto, se, por exemplo, o servidor DNS local souber o que é "impressora", você perderá o uso da impressora com esse nome.

Então, por favor, corrija seu servidor DNS local. Se for apenas um encaminhador simples para um servidor DNS quebrado do seu ISP e você não puder alterar isso (por exemplo, o tudo-em-um-roteador gerenciado pelo ISP), essa 8.8.8.8 solution pode ser sua única opção.

    
por gertvdijk 30.01.2013 / 02:28