如何正确设置主机名和域名?


33

我在一家公司租用一台运行Ubuntu 16.04的服务器,我们将其命名为company.org。

当前,我的服务器配置如下:

  • 主机名: server737263
  • 域名: company.org

这是我的FQDN:

user@server737263:~ $ hostname --fqdn
server737263.company.org

这不足为奇。

我也正在租一个域名,让我们命名domain.org。我想做的就是将服务器重命名为server1.domain.org

这意味着将我的主机名配置为server1,将域名配置为domain.org

如何正确执行?

确实,手册的hostname内容尚不清楚。至少对我来说:

主机名(1)

[...]

设定名称

  • 当使用一个参数或--file选项调用时,这些命令将设置主机名或NIS / YP域名。主机名使用sethostname(2)函数,而三个域名ypdomainname和nisdomainname均使用setdomainname(2)。 请注意,这仅在下次重新启动之前有效。编辑/ etc / hostname以进行永久更改。

[...]

FQDN

  • 您不能使用主机名或dnsdomainname更改FQDN。

[...]

看来编辑/etc/hostname还不够?因为如果确实更改了主机名,则它将更改FQDN。我还读过一个技巧,可以通过命令更改主机名sysctl kernel.hostname=server1,但是没有人说这是正确的方法还是丑陋的技巧。

所以:

  1. 设置主机名的正确方法是什么?

  2. 设置域名的正确方法是什么?

Answers:


31

设置主机名:

  • 您将要/etc/hostname使用新的主机名进行编辑。

  • 然后,运行sudo hostname $(cat /etc/hostname)

设置您的域:

  • 然后,在中/etc/resolvconf/resolv.conf.d/head添加行domain your.domain.name(不是FQDN,而只是域名)。

  • 然后,运行sudo resolvconf -u以更新您的/etc/resolv.conf(或者,只需将以前的更改复制到您的中/etc/resolv.conf)。

都:

最后,更新您的/etc/hosts文件。应该至少有一行以您的IP(是否有环回),FQDN和主机名之一开头。grep出ipv6地址,您的主机文件可能如下所示:

127.0.0.1 localhost
1.2.3.4 service.domain.com service

7
这两个配置文件都DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN在我的服务器上说(相同版本)。
沃尔夫'17

7
不要被出现“请勿编辑”警告的事实所迷惑/etc/resolvconf/resolv.conf.d/head。头文件中的所有内容都放在/etc/resolv.conf输出结果文件的前面,因此这就是警告出现在其中的原因,因此警告会显示在最终结果中。起初把我扔了一圈。
njbair

7
这似乎不适用于18.04 LTS-没有这样的文件/etc/resolvconf/resolv.conf.d/head,也没有这样的实用程序resolvconf
inopinatus

2
您可以使用hostnamectl
RingØ18

1
还要注意,如果您使用AWS,则还需要在重启后保留主机名- sudo nano /etc/cloud/cloud.cfg更新preserve_hostname: true(默认为false)。
bshea

5

须藤nano / etc / hostname

hostname.domain.com

须藤nano / etc / hosts

127.0.0.1   hostname.domain.com hostname localhost

重启!

在/ etc / hosts文件中的FQDN之后,必须具有单个主机名。在Ubuntu 18.04.1和所有其他版本上均可正常运行。在EC2和其他地方。

没弄乱解析文件或其他任何东西。

这会在shell中显示主机名,然后在需要时提供FQDN。


1

〜$ man主机名

[…]
       You cannot change the FQDN with hostname or dnsdomainname.

       The  recommended  method  of  setting the FQDN is to make the hostname be an alias for the fully qualified name using /etc/hosts,
       DNS, or NIS. For example, if the hostname was "ursula", one might have a line in /etc/hosts which reads

              127.0.1.1    ursula.example.com ursula

       Technically: The FQDN is the name getaddrinfo(3) returns for the host name returned by gethostname(2).  The DNS  domain  name  is
       the part after the first dot.

       Therefore  it  depends  on the configuration of the resolver (usually in /etc/host.conf) how you can change it. Usually the hosts
       file is parsed before DNS or NIS, so it is most common to change the FQDN in /etc/hosts.

       If a machine has multiple network interfaces/addresses or is used in a mobile environment,  then  it  may  either  have  multiple
       FQDNs/domain  names  or  none at all. Therefore avoid using hostname --fqdn, hostname --domain and dnsdomainname.  hostname --ip-
       address is subject to the same limitations so it should be avoided as well.

[…]

poige另一个线程中指出了这一点,这正是Lutz在这里提出的。

您不应该将fqdn放入/etc/hostname


1

针对Ubuntu 18.04.3 LTS(仿生)编写的说明

更改主机名:

sudo hostnamectl set-hostname server1

通过运行检查结果hostnamectl

root@www:/# hostnamectl
   Static hostname: server1       <-- Check this value
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 202c4264b06d49e48cfe72599781a798
           Boot ID: 43654fe8bdbf4387a0013ab30a155872
    Virtualization: xen
  Operating System: Ubuntu 18.04.3 LTS
            Kernel: Linux 4.15.0-65-generic
      Architecture: x86-64

通过编辑和更改参数,通过新的网络管理器Netplan更改域:/etc/netplan/01-netcfg.yamlsearch

sudoedit /etc/netplan/01-netcfg.yaml

样本配置:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
      nameservers:
          search: [ domain.org ]

通过第二次登录并sudo netplan try在一个会话中运行并在另一个会话中检查设置来测试更改:

# netplan try
Do you want to keep these settings?


Press ENTER before the timeout to accept the new configuration


Changes will revert in  97 seconds
Configuration accepted.
# systemd-resolve --status
...
Link 2 (eth0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 8.8.8.8
                      8.8.4.4
          DNS Domain: domain.org      <-- Check this value
# cat /etc/resolv.conf
...
nameserver 127.0.0.53
options edns0
search domain.org    <-- Check this value
# hostname -f
server1.domain.org

一切都很好,在sudo netplan try提示符下按Enter 以使事情永久化。


0

我试图将域条目从更改为myhome.localmyhome.lan 我必须编辑/etc/hosts文件和/etc/network/interfaces文件。我的/etc/hosts文件现在看起来像:

127.0.0.1   localhost
192.168.3.2 server.myhome.lan   server

/etc/network/interfaces现在我的文件如下所示:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp2s0
iface enp2s0 inet static
    address 192.168.3.2
    netmask 255.255.255.0
    network 192.168.3.0
    broadcast 192.168.3.255
    gateway 192.168.3.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 192.168.3.1
    dns-search myhome.lan

这对我来说可以。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.