我在一家公司租用一台服务器,运行 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 域名。 hostname 使用 sethostname(2) 函数,而 ypdomainname 和 nisdomainname 这三个域名均使用 setdomainname(2)。 请注意,这仅在下次重新启动之前有效。编辑 /etc/hostname 进行永久更改。
[...]
完全限定域名
- 您无法使用主机名或 dnsdomainname 更改 FQDN。
[...]
看来编辑/etc/hostname
还不够?因为如果它真的更改了主机名,它就会更改 FQDN。我还读到了一个使用命令更改主机名的技巧sysctl kernel.hostname=server1
,但没有说明这是正确的方法还是丑陋的技巧。
所以:
设置主机名的正确方法是什么?
正确的域名设置方法是什么?
答案1
设置您的主机名:
您需要
/etc/hostname
使用新主机名进行编辑。然后,运行
sudo hostname $(cat /etc/hostname)
。
设置您的域,假设您有一个resolvconf
二进制文件:
在 中
/etc/resolvconf/resolv.conf.d/head
,您将添加 then 行domain your.domain.name
(不是您的 FQDN,只是域名)。然后,运行
sudo resolvconf -u
以更新您的/etc/resolv.conf
(或者,只需将之前的更改复制到您的/etc/resolv.conf
)。
如果没有resolvconf
,只需编辑/etc/resolv.conf
并添加该domain your.domain.name
行。
无论哪种方式:
最后,更新您的/etc/hosts
文件。应该至少有一行以您的 IP(是否环回)、FQDN 和主机名之一开头。 greping 出 ipv6 地址,您的主机文件可能如下所示:
127.0.0.1 localhost
1.2.3.4 service.domain.com service
针对hostnamectl
评论中堆积如山的建议:它不是强制性的,也不是详尽无遗的。
如果您的操作系统附带了 systemd,它可以用作步骤 1 和 2 的替代。而无论 systemd 是否存在(pclinuxos、devuan,...),上面给出的步骤都是有效的。
答案2
sudo nano /etc/主机名
hostname.domain.com
须藤纳米 /etc/hosts
127.0.0.1 hostname.domain.com hostname localhost
重启!
/etc/hosts 文件中的 FQDN 后必须有单个主机名。在 Ubuntu 18.04.1 和所有其他版本上运行良好。在 EC2 和其他地方。
没有弄乱解析文件或其他任何东西。
这会在 shell 中显示主机名,然后在需要时显示 FQDN。
答案3
针对 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
通过新的网络管理器更改域,网络计划,通过编辑/etc/netplan/01-netcfg.yaml
和更改search
参数:
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 键即可永久保存。
答案4
我尝试将我的域条目更改为myhome.local
我myhome.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
这对我来说可以。