摘要

本文探讨如何在 Linux 中查看和操纵网络接口。

引言

通俗来讲,网络接口就是我们主机上的网卡。查看和操纵网络接口用到是同一个命令:ifconfig。其中操纵网络接口指的是启动、关闭和临时修改网络接口参数。一般来说,所有的用户都可以使用 ifconfig 来查看网络接口,但只有 root 用户才能操纵网络接口。顺便一提,本文提到的网络都指以太网。

用法

ifconfig

ifconfig 是 Linux 内置的查看网络接口信息的工具。

ifconfig:查看所有已开启的网络接口。

[root@centos ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.16.11  netmask 255.255.255.0  broadcast 10.0.19.255
        inet6 fe80::5054:ff:fe57:6eee  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:57:6e:ee  txqueuelen 1000  (Ethernet)
        RX packets 127887562  bytes 19032898575 (17.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 172551531  bytes 29480608787 (27.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3320954  bytes 639669711 (610.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3320954  bytes 639669711 (610.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

输出的第一部分就是以 eth0 打头的一段输出。其中 eth0 就是网络接口的名字,表示这是我们主机中第一个以太网接口,如果有多个接口,其名字就按照 eth1、eth2 这样的顺序排下去。它有多个字段属性:

  • mtu:最大数据传送单元大小
  • inet:IPv4 地址(也就是我们常说的 IP 地址)
  • netmask:子网掩码
  • broadcast :广播地址
  • inet6:IPv6 地址(目前正在普及和应用)
  • RX:接收包的情况
  • TX:发送包的情况
  • collisions:数据传输发生冲突的次数

输出的第二部分就是以 lo 打头的一段。lo 不是一个真正的网络接口,是一个特殊的模拟出来的网络接口,每个系统都有它,叫回环接口(loop)。其各个字段属性是固定的:

  • inet:127.0.0.1
  • netmask:255.0.0.0

回环接口为系统提供了一个单机网络环境,一般用于程序调试。许多程序的运行也需要这个接口,我们一般不会该动该接口。

顺便一提,ifconfig 后加上一个接口名,可查看特定接口的网络信息,而不是主机上的所有接口。

如果网络接口因为其它原因没有启动,就没法直接查看了,不过你可以在 ifconfig 后面加上 -a 选项查看所有主机上的网络接口,包括未启动和未配置的接口。

如果发现某网络接口如 eth1 的 IP 地址等参数并未显示,可能是接口未开启,或接口未配置好。可以使用 ifconfig eth1 up 来开启。开启之后就能看到 IP 地址了,顺便一提,当前主机的 eth1 的 IP 地址是由网络中的 DHCP 服务器提供的。接下来,我们尝试使用 ifconfig 命令配置 eth1 的一些网络参数。

[root@centos ~]# ifconfig eth1 up # 开启 eth1 网络接口
[root@centos ~]# ifconfig eth1 192.168.16.125 netmask 255.255.255.0 # 修改 IP 地址
[root@centos ~]# ifconfig eth1 mtu 5000 # 修改 mtu
[root@centos ~]# ifconfig eth1 down # 关闭 eth1 网络接口

值得注意的是,ifconfig 改变的接口部分配置参数是临时的,如果系统重启或网络重启,这些改变的参数不会保留。

NetworkManager

NetworkManager(简称 NM)是由红帽公司开发的,用于配置和管理网络的工具。经过十多年的发展和晚上,NM 已经是一个非常好用且强大的网络管理工具了,在 CentOS 中建议使用 NM 来配置和管理网络。需要注意的是,NM 并非一个前台应用,而是一个提供网络管理和配置服务的后台进程。NM 软件包中除了 NM 本身,还包括一些用户界面工具,所有的 NM 用户界面工具都可以用来和 NM 进行交互,进而管理和配置网络。但作为一名系统管理员,建议使用 NM 的命令行界面,即 nmcli。

  1. 首先,我们要确认 NM 是否已在系统安装并启用。NM 在 CentOS 中一般会默认安装。可以使用 yum list NetworkManager 来确认。如果没有安装或有更新,可以用 yum -y install NetworkManager 命令安装或更新。由于我这里已经安装且是最新版本,所有不需要执行任何操作。
[root@centos ~]# yum list NetworkManager
Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
Installed Packages
NetworkManager.x86_64                                            1:1.18.8-2.el7_9                                            @updates
  1. 使用 systemctl status NetworkManager 命令确定 NM 守护进程是否已经启动,出现 active (running) 字样表示已启动,否则未启动。如果没启动,使用命令 systemctl start NetworkManager 启动。
[root@centos ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:NetworkManager(8)
[root@centos ~]# systemctl start NetworkManager
[root@centos ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2022-06-10 11:05:57 CST; 34s ago
     Docs: man:NetworkManager(8)
 Main PID: 2634 (NetworkManager)
    Tasks: 3
   Memory: 9.1M
   CGroup: /system.slice/NetworkManager.service
           └─2634 /usr/sbin/NetworkManager --no-daemon
  1. systemctl is-enabled NetworkManager 命令确认 NM 守护进程是否开机自启动,出现 disabled 字样表示开机不启动,enabled 表示开机自启动。如果没有开机自启动,执行 systemctl enable NetworkManager 命令让其开机自启动。
[root@centos ~]# systemctl is-enabled NetworkManager
disabled
[root@centos ~]# systemctl enable NetworkManager
Created symlink from /etc/systemd/system/multi-user.target.wants/NetworkManager.service to /usr/lib/systemd/system/NetworkManager.service.
Created symlink from /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service to /usr/lib/systemd/system/NetworkManager-dispatcher.service.
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.
[root@centos ~]# systemctl is-enabled NetworkManager
enabled

至此,我们就安装并配置了 NM 开机自启动,接下来就可以在命令行中使用 nmcli 了。


nmcli device statusnmcli d s:查看当前主机上的网络接口设备状态。其各个字段定义如下:

  • DEVICE:设备名
  • TYPE:设备类型(以太网 | 桥接 | 回环)
  • STATE:接口状态(已连接 | 已断开 | 未托管)
  • CONNECTION:应用到该接口上的连接名(默认是设备名。如接口未应用连接,显示 --
[root@centos ~]# nmcli device status eth0
Unknown parameter: eth0
DEVICE       TYPE      STATE      CONNECTION
eth0         ethernet  connected  eth0
lo           loopback  unmanaged  --

nmcli device show eth0:查看 eth0 设备的详细网络配置信息。事实上,这个设备的自动配置是 NM 和当前网络中的 DHCP 服务器一起完成的。当检测到系统中有新添加的且未配置的网络设备时,NM 会创建一个预设的连接来为设备提供配置,预设的连接默认会将网络接口设置为使用 DHCP 协议来获取网络配置参数。

[root@centos ~]# nmcli device show eth0
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         52:54:00:57:6E:EE
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         10.0.16.11/22
IP4.GATEWAY:                            10.0.16.1
...

nmcli connection show eth0:查看 NM 自动为 eth0 建立的同名连接的具体配置详情。注意到其中 ipv4.method 打头的一行,其可选项一般是 auto 和 manual。auto:使用 DHCP 动态获取配置;manual:静态手动配置。

[root@centos ~]# nmcli connection show eth0
connection.id:                          eth0
connection.uuid:                        7657277b-7bab-45af-b051-527b6f249e60
ipv4.method:                            manual
...

注意

CentOS 7 的网络接口设备命名规则与以前的发行版本有较大的变化。以前的接口设备命名规则是:ethN,例如 eth1、eth2 等;现在使用的是一致网络设备命令规则:ensN,例如 ens32、ens33 等。ens33 中 en 表示以太网(ethernet)接口设备,s 表示 PCle 插槽 slot,33 表示插槽索引号。

参考

中国大学 MOOC | Linux 系统管理 | 主题 08 管好网络 | 小节 1 查看网络接口

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐