jk's notes
  • ch10 连接到网络

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

image-20230725091520953

修改 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 文件内容结构为:

image-20230725092633227

这里的前两行引用的本机回环地址. 这个表示本机, 即 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 信息

image-20230725095126840

你可以看到可用的相关网络信息.

你可以使用简化的命令 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 中默认就没有该命令)

image-20230725110029919

然后, 使用 ifconfig 也可以让网卡 down 和 up.

sudo ifconfig enp0s3 down
sudo ifconfig enp0s3 up

无论是使用 ip 还是 ifconfig, 重点是要知道如何查看网络信息, 并且配置网卡的 down 和 up.

3. 设置静态 IP

针对服务器, 固定不变的 IP 很重要. 如果是动态 IP, 资源定位, 网站访问, 用户登录等都会变成问题.

有两个办法:

  1. 为服务器设置静态 IP
  2. 在 本地的 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 的文件.

image-20230725112942787

该文件提供了不少信息:

  • 第一行的注释描述该配置来源于 subiquity, 它是 Ubuntu Server Installer 的官方命名.
  • 另一个重要的信息是 dhcp4: true 表示采用动态 IP 地址获取.

需要自己配置 IP 地址, 首先会该文件进行备份 (常规, 避免修改错误)

sudu cp ....yaml ....yaml.bak

image-20230725113539263

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

image-20230725114837795

其中:

  • enp0s3 即为网卡
  • addresses 表示 IP 地址 和 子网掩码的配置
  • gateway 表示网关
  • nameserver/addresses 表示 DNS 服务器地址

要使用该配置, 则使用命令

sudo netplan apply

应用实践后会警告, 说 gateway4 被弃用, 请用 default routes 来代替. 即使用下面配置来代替:

	routes: 
		- to: default
		  via: <网关地址>
Last Updated:
Contributors: jk