AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1649543
Accepted
xpt
xpt
Asked: 2021-05-17 14:11:00 +0800 CST2021-05-17 14:11:00 +0800 CST 2021-05-17 14:11:00 +0800 CST

Como alterar o nome do host com nome de domínio no Debian/Ubuntu

  • 772

Embora pareça ser um FAQ, mas eu nunca consegui encontrar uma maneira adequada de alterar o nome do host com o nome do domínio no Debian/Ubuntu.

Em primeiro lugar, muitas "respostas" ou escritas estão erradas ao colocar nome de host com nome de domínio (FQDN) em /etc/hostname, como this , this e this , porque

A referência Debian diz que o nome do host não deve usar o FQDN :

3.5.5. O nome do host

O kernel mantém o nome do host do sistema . O script init no nível de execução S que está com link simbólico para " /etc/init.d/hostname.sh " define o nome do host do sistema no momento da inicialização (usando o comando hostname ) para o nome armazenado em " /etc/hostname ". Esse arquivo deve conter apenas o nome do host do sistema, não um nome de domínio totalmente qualificado.

Também, de man hostname, diz,

" /etc/hostsGeralmente, é aqui que se define o nome de domínio aliando o nome do host ao FQDN." e "Um FQDN consiste em um nome de host curto e o nome de domínio DNS. A menos que você esteja usando bind ou NIS para pesquisas de host, você pode alterar o FQDN e o nome de domínio DNS (que faz parte do FQDN) no arquivo /etc/hosts Arquivo."

OK. O acima é o que eu deveria fazer, mas é isso que estou recebendo:

$ cat /etc/hostname
coral

$ head -1 /etc/hosts 
127.0.0.1       coral.my.domain.org localhost

$ dnsdomainname
ht.home

$ cat /etc/resolv.conf
domain ht.home
search ht.home
nameserver 192.168.0.1

# after I change it to --

$ cat /etc/resolv.conf
# Fixed resolv.conf file
domain my.domain.org
search my.domain.org
nameserver 192.168.0.1

# everything just gone wrong --

$ dnsdomainname
dnsdomainname: No address associated with hostname

$ hostname -f
hostname: No address associated with hostname

$ hostname -d
hostname: No address associated with hostname

Atualizar

Eu fiz um rastreamento em hostname -f, e parece que o erro "Nenhum endereço associado ao nome do host" vem de libresolv.so:

$ strace -o /tmp/strace.log hostname -f
hostname: No address associated with hostname

$ grep -E 'openat|close|No address' /tmp/strace.log
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/etc/hosts", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
write(2, "No address associated with hostn"..., 35) = 35

Qualquer ajuda apreciada.

$ uname -rm
5.10.0-6-amd64 x86_64

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux bullseye/sid
Release:        testing
Codename:       bullseye

linux networking
  • 1 1 respostas
  • 1018 Views

1 respostas

  • Voted
  1. Best Answer
    user1686
    2021-05-17T15:32:40+08:002021-05-17T15:32:40+08:00

    Seu "FQDN" é determinado por diferentes programas de duas maneiras diferentes:

    1. Fazendo uma pesquisa de 'hosts' para seu nome de host (usando as mesmas funções Glibc que normalmente são usadas para resolver endereços IP) e retornando o nome de domínio "canônico" que produziu a resposta.

      Por exemplo, isso é o que getaddrinfo() com flags=AI_CANONNAME retornaria no campo ai_canonname, e o que gethostbyname() retornaria no campo ht_name. De fato, o inetutils hostname -fliteralmente chama gethostbyname() e imprime o ht_name resultante se a pesquisa for bem-sucedida.

      Isso pode ser tratado via /etc/hosts ou via DNS, então o que acontece a seguir depende dos módulos listados em nsswitch.conf, na ordem:

      • O módulo 'files' verifica em /etc/hosts o nome literal do host ( sem nada anexado). Se encontrar uma entrada correspondente, o primeiro nome dessa entrada será o nome canônico, o restante serão aliases. O endereço IP é retornado, mas ignorado.

        Então você pode ter uma entrada como esta:

        127.0.0.1 coral.my.domain.org coral localhost
        -or-
        192.168.0.234 coral.my.domain.org coral
        

        O FQDN deve ir no campo "nome canônico", mas o nome do host curto deve estar presente entre os aliases, caso contrário, uma correspondência não será encontrada.

        (O endereço real não importa aqui, apenas a existência da entrada. Mas como gethostbyname() é somente IPv4, hostname -fignorará entradas /etc/hosts para endereços IPv6, enquanto programas usando getaddrinfo(AI_CANONNAME) as incluirão.)

      • O módulo 'dns' faz uma consulta DNS 'A' para o nome de host fornecido, combinado com um domínio de pesquisa de /etc/resolv.conf. Assim, com hostname corale resolv.conf search my.domain.org, uma pesquisa A coral.my.domain.orgserá feita.

        (Como os domínios de pesquisa são determinados na Glibc? $LOCALDOMAIN é usado primeiro, depois 'domain' ou 'search' de resolv.conf, o que ocorrer por último, e finalmente o nome do host do kernel é verificado se ele possui um domínio.)

        Qualquer nome na resposta DNS que tenha o registro A será retornado como o nome canônico (ou seja, seu FQDN); se houver CNAMEs, seus domínios serão retornados como aliases. Por exemplo, se a consulta produzir estes resultados:

        coral.my.domain.org.    CNAME    coral.reef.domain.org.
        coral.reef.domain.org.  CNAME    coral.home.domain.net.
        coral.home.domain.net.  A        1.2.3.4
        

        então coral.home.domain.netserá o nome canônico e os outros dois nomes na coluna da esquerda serão aliases.

        (O endereço IP retornado real ainda não importa. A mesma nota sobre gethostbyname() sendo somente IPv4 se aplica.)

      Vários outros módulos como 'myhostname' ou 'ldap' ou 'nis' também podem ser envolvidos. O primeiro na lista que produz uma resposta vence. O erro "Nenhum endereço associado ao nome do host" só é retornado se nenhum módulo encontrar um resultado para a consulta.

    2. Ou, fazendo uma pesquisa de 'hosts' para o seu nome de host e, em seguida, fazendo uma pesquisa inversa para o endereço IP resultante. Eu acho que isso é muito menos comum, mas ocorre no entanto.

      Estas são pesquisas diretas sem mágica por trás delas. A pesquisa direta de 'hosts' geralmente é feita usando gethostbyname() somente IPv4, retornando um endereço IP, e o inverso usando gethostbyaddr().

      • Em /etc/hosts, com o módulo 'files', você desejará novamente uma entrada praticamente igual à acima - com seu FQDN como primeiro nome e seu nome de host curto como um dos aliases na mesma linha. Quando for feita uma pesquisa inversa por endereço IP, o primeiro nome será retornado.

        127.0.0.1 coral.my.domain.org coral localhost
        -or-
        192.168.0.234 coral.my.domain.org coral
        
      • No DNS, com o módulo 'dns', a pesquisa direta é novamente feita da mesma forma que acima (com o domínio de pesquisa com sufixo).

      As duas pesquisas são independentes; é possível que um seja tratado via /etc/hosts e o outro via DNS, etc.

    Para bisbilhotar o método nº 1:

    import sys
    import socket
    
    try:
        host = sys.argv[1]
    except IndexError:
        host = socket.gethostname()
    
    try:
        name, aliases, addresses = socket.gethostbyname_ex(host)
        print("gethostbyname(): name = %s, aliases = %s" % (name, aliases))
    except socket.gaierror as e:
        print("gethostbyname(): Not found (%s); must be IPv6-only" % e)
    
    try:
        res = socket.getaddrinfo(host, 0, flags=socket.AI_CANONNAME)
        for (addr_family, socktype, protocol, canonname, sock_addr) in res:
            print("getaddrinfo(): canonname =", canonname)
            break # gai only fills in cname for the 1st result
    except socket.gaierror as e:
        print("getaddrinfo(): Not found (%s)" % e)
    

    Eu fiz um rastreamento no hostname -f, e parece que o erro "Nenhum endereço associado ao nome do host" vem de libresolv.so:

    Não – vem do código nsswitch de alto nível na libc, depois de tentar chamar todos os módulos habilitados (primeiro nss_files, depois nss_dns→libresolv) e nenhum deles retornou uma resposta.

    Em primeiro lugar, muitas "respostas" ou escritas estão erradas ao colocar nome de host com nome de domínio (FQDN) em /etc/hostname, assim, isso e isso, porque

    Eles não estão totalmente errados; O resolvedor de DNS Glibc na verdade pega o domínio do seu nome de host do kernel e o usa como o domínio de 'pesquisa' de fallback se um não estiver especificado no resolv.conf.

    Portanto, ele não é retornado imediatamente como seu FQDN, mas influencia o processo exatamente da mesma maneira como se você tivesse searchou domainem /etc/resolv.conf. Não apenas para pesquisas de FQDN locais, mas para qualquer pesquisa de DNS feita por meio de funções Glibc. (Veja a função domain_from_hostname() em resolv/res_init.c)

    • 5

relate perguntas

  • Win10 1803: Como tornar o ponto de acesso móvel uma rede privada?

  • Como o nc identifica nomes de serviço

  • execute o contêiner do docker como root

  • Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux

  • Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 Por que uma conexão de Internet gigabit/s via cabo (coaxial) não oferece velocidades simétricas como fibra? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve