这篇文章会从配置网络开始介绍 Linux 下相关的工具/命令/文件,同时会涉及一些常用的网络工具的使用,作为本人学习 Linux 运维过程中的记录。
网络管理工具
需要明确,不同的 Linux 发行版具有不同的、多个网络管理工具。这里将会介绍一些使用比较广泛的内置的网络管理工具(但不包括 GUI 的使用)。
首先,我会先介绍如何查看当前安装了那些管理网络的工具,然后从不同发行版的角度介绍两类很常见的管理工具,最后再介绍两种比较通用的工具。
查看现在正在运行的网络管理工具
多个网络管理工具会影响我们配置网络,拿到机器肯定先要确认现在有哪些网络管理工具在运行。这里使用 systemctl 查看网络管理工具的运行状况。
首先查看已经安装的 Unit file:
systemctl list-unit-files | grep -i network
查看已经加载的 Unit:
systemctl list-units | grep -i network
两者相对照,就很容易发现哪些网络管理工具在运行、哪些未启用。
CentOS / Fedora / RHEL
一般这些系统自带的是 NetworkManager 和 network.service。
这里以最常见的 CentOS 7 为例,官方给出了三类配置网络的方法,分别是通过 NetworkManager、通过编辑 network-scripts 和通过 ip 工具临时配置。
NetworkManager 具有 nmtui
(TUI, Text User Interface, 一种可以直接在终端中直观交互的用户界面,推荐)、nmcli
,还可以在 GNOME 桌面环境下使用 GUI 配置。当你使用 NetworkManager 配置网络时,所做的更改会被保存在 /etc/sysconfig/network-scripts/ifcfg-网卡名
中。
注意:在 RHEL 9 及之后,ifcfg 形式的配置文件不再受到支持。nmcli
中提供了迁移工具:nmcli connection migrate <profile_name|UUID|D-Bus_path>
。请自行查阅该改动的相关资料。
若禁用 NetworkManager,也可以使用 network.service, 直接编辑保存 /etc/sysconfig/network-scripts/ifcfg-网卡名
即可。具体的语法可以参考 nm-settings-ifcfg-rh(5)* man page,下面仅展示最常用的几个属性:
TYPE=Ethernet // 网卡类型
BOOTPROTO=dhcp // 网卡启动时获取 IP 的方式
// BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
NAME=ens33 // 网卡名称
DEVICE=ens33 // 网卡设备名
ONBOOT=yes // 是否开机自动启动网卡
// 如果需要静态 IP
IPADDR=192.168.22.253 // IP 地址
PREFIX=24 // CIDR中的掩码
GATEWAY=192.168.22.254 // 网关地址
DNS1=192.168.22.254 // DNS 1
修改之后需要 restart / reload network.service 服务,或者使用 ip 工具临时禁用再启用网卡(注意这样会断开 SSH 连接,请勿在云上这样操作)才能生效。
如果发现 Reload 不生效,可能需要参考 Reload and force-reload options for network service - Red Hat Customer Portal(TL;DR: 用 restart)。
RedHat 系的发行版大同小异,网络配置统统可以参考对应版本的 RedHat 手册,权威可靠。参考:网络指南 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
Debian / Ubuntu / …
此类系统一般使用的是 networking.service,但也内置 systemd-networkd。
以 Debian 11 为例(Debian 是 Ubuntu 的上游,可能有所不同)
对于 networking.service, 配置在 /etc/network/interfaces
文件中,另外同目录下还有 interface.d
文件夹,可以放置自己的配置文件。
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0
# network 192.168.3.0
# broadcast 192.168.3.255
对于 Ubuntu 较新的版本(例如 20.04 LTS),已经内置 Ubuntu 自己推出的 netplan 网络管理工具,使用 YAML 文件对网络配置进行管理。
netplan.io 本质上是一个配置生成工具。他的前端解析 YAML 格式的网络配置文件,然后生成后端可用的配置文件。netplan 一共有两种后端:NetworkManager 和 systemd-networkd。桌面端默认使用 NetworkManager 而服务器版本则默认使用 systemd-networkd。
一个常用的 netplan 配置为:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses: [192.168.120.2]
routes:
- to: default
via: 192.168.120.1
on-link: true
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
将其命名为 xxx.yaml
然后放在 /etc/netplan
目录下。使用 netplan try
命令测试配置(失败会自动回滚)。使用 netplan apply
应用配置。
Systemd-networkd
systemd-networkd 是 systemd 内置的网络管理工具,从 systemd 219 版本开始提供。到本文写作时,很多发行版都已经内置了这个工具。由于现在流行的发行版一般都使用 systemd,所以这个工具具有很大兼容性,一旦发行版上自带的其他工具失效,可以选择 networkd 来代替。
常用操作包括:
查看 networkd 工作状态:
systemctl status systemd-networkd
如果是
inactive
状态,那么说明 networkd 没有在掌控系统的网络设置,而且很有可能由另一个管理器控制。这种情况下需要找到正在运行的网络管理工具并禁用掉(具体可以参考下文),然后启用 networkd:systemctl enable systemd-networkd systemctl restart systemd-networkd
在 CentOS 上启用 systemd-networkd 可以参考 How to switch from Network Manager to systemd-networkd on Linux (xmodulo.com)
编写 networkd 配置文件:
networkd 的系统级配置文件位于
/etc/systemd/network/
目录下。配置文件以.def
结尾,文件名可以是任意的,不过建议和 Interface 的名称一致。配置文件格式类似于
.ini
,由多个部分组成,常用的是指定要配置的网络接口的[Match]
字段和配置具体网络的[Network]
字段。关于具体的字段,请参考:systemd-networkd - ArchWiki (archlinux.org)
应用网络设置:
编辑配置文件之后自然要 restart/reload networkd 服务才能使其生效:
systemctl reload systemd-networkd
iproute2
iproute2 是 Linux 下用于配置网络的新一代工具包,旨在替代旧的工具链 net-tools,即以前常见的 ifconfig,arp,route,netstat 等命令。
参考资料
CentOS8使用network.service服务管理网络_坐公交也用券的博客-CSDN博客_network.service