ch10 连接到网络
网络对 Linux 来说非常重要.
这一章使用 Ubuntu 单实例来介绍, 全书有两部分类介绍网络.
本章主要涉及
- 网络连接初始化
- 远程管理
第二部分进阶在 第 11 章 设置网络服务 中介绍.
本章包含的主题有:
- 设置
hostname - 管理网络接口
- 设置静态
IP地址 - 理解
Linux name解决方案 - 使用
OpenSSH SSH Key管理- 使用配置文件来简化
SSH连接
1. 设置 hostname
在安装时, 会提示输入 hostname, 那时只是为了安装, 现在我们介绍如何修改.
在使用 SSH 连接登录时, hostname 会显示在命令提示符中. 如果有多个服务器, 命名相同会令人误解.
此时, hostname 就可以用于区分. 在实际生产环境中, 每一台服务器都有其自身的目的, 其命名规则也是有一定结构要求的.
本书不会约束命名规则, 因此你可以随意的命名设置.
后面会介绍到 hostname 在 DNS 中起到的作用, 这里暂时不用考虑其作用.
打开命令行即可看到 hostname, 你的 hostname 可能显示不完整, 它只会显示点分命名的第一个部分.
比如你的 hostname 为 u22S.dev.jklibs.com, 那么会显示 u22S.
要显示完整的 hostname 可以使用命令:
# hostname

修改 hostname 的方法很简单, 可以使用 root 账户执行 hostnamectl 命令, 也可以使用 sudo.
# hostnamectl set-hostname <需要修改的新的hostname>
命令执行完成后, 看起来没有变化, 需要重新进入一次. 实际上相关的文件已经更改.
可以查看: cat /etc/hostname 文件.
有可能在你修改 hostname 之后, 再执行命令时会发生错误提示:
ubable to resolve host <你的hostname>
这表示系统无法解析, 因为除了 /etc/hostname 文件会存放该名字之外, /etc/hosts 也会引用该名字. 但是 hostnamectl 命令不会修改 /etc/hosts 文件, 你需要手动修改.
即需要修改的文件有两个, 一般是
/etc/hosts和/etc/hostname
hosts 文件内容结构为:

这里的前两行引用的本机回环地址. 这个表示本机, 即 ping 的时候, 本机给出响应.
该文件的第一行 127.0.0.1 localhost 表示如果你使用网络工具连接本机, 该声明表示你需要怎么与本机进行通信, 例如可以 ping 127.0.0.1 或 ping localhost.
第二行为 127.0.0.1 jku22vser, 这是安装系统时, 伴随向导设置的. 通常根据环境不同, 它可能存在也可能不存在. 你可以将其删除.
本质上来说, 这一行代码的含义是, 本机 (127.0.0.1) 也可以使用 jku22vser 来访问到. 一个完整的名字由服务器名和组织的域名联合起来构成.
回到 hostname 本身, 由于涉及到多个文件, 而 hostnamectl 又只能修改一个文件. 因此作者建议还是直接使用文本编辑器直接修改这两个文件即可.
2. 管理网络接口
为了使用网络, 一般需要安装网络接口 (network interface). 通常服务器都有标准 Ethernet 适配器.
首先需要学会查看网络参数, 有两个命令可以使用 ip (推荐) 和 ifconfig (早起的用法)
使用 ip addr show 来显示当前 ip 信息

你可以看到可用的相关网络信息.
你可以使用简化的命令 ip a. 通过显示可以看到很多有用的信息, 例如 IP, MAC 地址等.
通过 ip 命令, 可以管理接口状态, 启用禁用等.
sudo ip link set enp0s3 down # 关掉网卡
sudo ip link set enp0s3 up # 开启网卡
这个命名约定与传统的命名约定, 如 eth0, wlan0 等有些不同. 从 Debian 9.0 (Ubuntu 20.04) 开始命名约定进行了调整.
个人理解是将传统的命名顺序的命名规则, 改为散列的命名规则, 以便在多网卡中不会混乱.
以及在系统镜像移植等问题中可能会存在问题.
然后书中详细说明的了传统命名存在的问题, 这里暂时略.
enp0s3 的命名约定的含义:
en表示Ethernet, 而wl则是wireless.p0表示系统第一总线 (计数从 0 开始).s3则表示PCI插槽 3.
所以 enp0s3 的含义是, 位于 PIC 插口 3 的, 使用系统第一条总线的有线网络接口.
另一个工具是 ifconfig 命令. 该命令是 net-tools 套件中的一个工具. 现在已不推荐使用. 作为替换, 使用 iproute2 工具套件中的 ip 命令.
简言之就是推荐
ip命令, 不推荐ifconfig命令.
虽然该命令已弃用, 但是任然有很多人在使用, 所以值得讨论讨论. 至少在遇到就系统的时候可以使用.
如果 ifconfig 无效, 可以考虑使用全路径, 因为可能没有被加入到系统环境变量中.
但是我个人认为还是安装最简单 (似乎在
u22中默认就没有该命令)

然后, 使用 ifconfig 也可以让网卡 down 和 up.
sudo ifconfig enp0s3 down
sudo ifconfig enp0s3 up
无论是使用 ip 还是 ifconfig, 重点是要知道如何查看网络信息, 并且配置网卡的 down 和 up.
3. 设置静态 IP
针对服务器, 固定不变的 IP 很重要. 如果是动态 IP, 资源定位, 网站访问, 用户登录等都会变成问题.
有两个办法:
- 为服务器设置静态
IP - 在 本地的
DHCP服务器上设置IP保护, 让你的服务器每次申请的都是同样的IP.
作者倾向于 第一种, 相对简单可靠. 第二种还需要维护本地 DHCP 的中心服务.
从 2017 年开始 (Ubuntu 17.10), 都是通过 Netplan 来完成 IP 配置的. 过去一般使用 NetworkManager 来进行网络配置, 但是现在大多数 Ubuntu 没有安装 NetworkManager.
是不是也被废弃了???
在 Netplan 环境中, 配置文件位于 /etc/netplan 目录下, 是 YAML 格式.
查看该目录, 通常有一个名为 00-installer-config.yaml 或 50-clound-init.yaml 的文件.

该文件提供了不少信息:
- 第一行的注释描述该配置来源于
subiquity, 它是Ubuntu Server Installer的官方命名. - 另一个重要的信息是
dhcp4: true表示采用动态IP地址获取.
需要自己配置 IP 地址, 首先会该文件进行备份 (常规, 避免修改错误)
sudu cp ....yaml ....yaml.bak

首先要移除 dhcp4: true. 事实上是将其替换成: 地址, 网关等名字.

其中:
enp0s3即为网卡addresses表示IP地址 和 子网掩码的配置gateway表示网关nameserver/addresses表示DNS服务器地址
要使用该配置, 则使用命令
sudo netplan apply
应用实践后会警告, 说 gateway4 被弃用, 请用 default routes 来代替. 即使用下面配置来代替:
routes:
- to: default
via: <网关地址>