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