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: <网关地址>