文章

Linux - hostname

hostname究竟有什么用?之前在linux pc上一直没有注意到它的用途,直到最近需要在服务器集群上绑定一些服务到特定ip,才发现它在局域网中真的挺有用。

  1. hostname
    1. 为什么要有hostname
  2. hosts
    1. /etc/hosts
    2. hosts vs DNS
  3. misc
    1. hostname变更

hostname

我机器上的:

1
pichu@localhost

win10里的WSL的:

1
win-pichu@win10Home

服务器上的:

1
liuhaibo@zj068

hostname就和登录账户一样,是标记这个机器的名字的。如果不起名,那默认就是localhost,“本地机”?哈哈哈。

为什么要有hostname

平时单台pc的hostname感知不够强烈,其实hostname放在局域网服务器集群里,作用发挥的更明显,可以用来标识局域网里的各台主机。比如zj044/zj068等。单台pc的hostname意义不大,基本不和局域网其他pc通信。而且基本大家都叫localhost,没有区分。

一些有趣的给集群里的服务器命名hostname的方式:

  • https://web.archive.org/web/20110904040500/https://serverfault.com/questions/45734/the-coolest-server-names

按照ip尾段用元素周期表命名确实很有意思。是不是还能按照梁山108好汉的座次命名?哈哈哈。

hosts

hostname和/etc/hosts里的name又有什么关系?

在局域网里,直接使用主机名就可以联系对方。当然前提是写入/etc/hosts。hostname只是hosts文件的一部分。

/etc/hosts

hosts文件的格式:

1
2
[liuhaibo@th017.corp.yodao.com ~]$ cat /etc/hosts | grep th017
10.105.132.27 th017.corp.yodao.com th017

第一列是th017在局域网里的ip,第二列是它局域网里的域名,第三列是它的hostname。所以无论用哪一个,都可以联系上th017这台主机。

所以无论是用th017这个hostname,还是th017.corp.yodao.com这个域名,其实都是指向10.105.132.27这个内网ip。

zj068x.corp.youdao.com是实实在在的公网ip。可以用dig查到其DNS记录。当然这个“公网”仅仅指能和办公环境相连接,并不是公司外部的真正的万维网公网。

再比如WSL里的hosts:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% cat /etc/hosts
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       win10Home.localdomain   win10Home

192.168.1.107   host.docker.internal
192.168.1.107   gateway.docker.internal
127.0.0.1       kubernetes.docker.internal

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • localhost是它;
  • win10Home这个名字也是它;
  • win10Home.localdomain这个内网域名也是指向它;
  • 127.0.0.1这个ip当然还是它;

再看windows上的hosts文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
# Added by Docker Desktop
192.168.1.107 host.docker.internal
192.168.1.107 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

发现docker把一个域名kubernetes.docker.internal也绑定到了127.0.0.1。所以,假设当前windows系统运行着jekyll,localhost:4444,现在使用kubernetes.docker.internal:4444也是可以访问jekyll的。因为kubernetes.docker.internal就是127.0.0.1。

hosts vs DNS

把一份容纳本局域网所有主机的hosts文件copy到每一台机器,那局域网里所有的机器都能相互通信了!

可以看出不同的机器用的都是同一份hosts:

1
2
3
4
5
6
7
// zj068上
liuhaibo@zj068 ⚡ md5sum /etc/hosts
7ad6ffff926f743ce9a0fa3135d50a79  /etc/hosts

th017上
[liuhaibo@th017.corp.yodao.com ~]$ md5sum /etc/hosts
7ad6ffff926f743ce9a0fa3135d50a79  /etc/hosts

在局域网中,究竟是架一台局域网DNS服务器方便,还是直接使用大一统的hosts文件方便?这取决于局域网中主机的数量,以及主机ip是否频繁变动(一般不会)。而在公网里,hosts文件显然不可行,DNS服务器才是正途。

misc

hostname变更

可以使用hostname命令即时变更,但只是暂时性的变更,重启后就没了。想永久修改,得修改文件。

  • https://www.cyberciti.biz/faq/debian-change-hostname-permanently/

Ref:

  • https://serverfault.com/questions/228102/hostnames-what-are-they-all-about
  • hosts文件的意义:https://www.cnblogs.com/ranyonsue/p/11237334.html
  • hostname意义:https://www.jb51.net/LINUXjishu/10938.html
本文由作者按照 CC BY 4.0 进行授权