这篇文章会从配置网络开始介绍 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 来代替。

常用操作包括:

  1. 查看 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)

  2. 编写 networkd 配置文件:

    networkd 的系统级配置文件位于 /etc/systemd/network/ 目录下。配置文件以 .def 结尾,文件名可以是任意的,不过建议和 Interface 的名称一致。

    配置文件格式类似于 .ini,由多个部分组成,常用的是指定要配置的网络接口的 [Match] 字段和配置具体网络的 [Network] 字段。

    关于具体的字段,请参考:systemd-networkd - ArchWiki (archlinux.org)

  3. 应用网络设置:

    编辑配置文件之后自然要 restart/reload networkd 服务才能使其生效:

    systemctl reload systemd-networkd

iproute2

iproute2 是 Linux 下用于配置网络的新一代工具包,旨在替代旧的工具链 net-tools,即以前常见的 ifconfig,arp,route,netstat 等命令。

参考资料

CentOS8使用network.service服务管理网络_坐公交也用券的博客-CSDN博客_network.service

linux网络工具iproute2的使用简介_astrotycoon的博客-CSDN博客_linux路由工具