查看网络设备信息

本文中,范例均在说明文字的 下方

网卡

lspci

可以查看网卡的品牌和型号:

# lspci | grep -i 'eth'
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

ethtool

该工具用于查询或控制网络驱动以及硬件的设置。

不加参数运行为查看某个网卡接口的详细信息。

$ ethtool ens33
Settings for ens33:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full  # 支持千兆双工
        Supported pause frame use: No
        Supports auto-negotiation: Yes  # 支持自适应
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes  # 默认使用自适应模式
        Speed: 1000Mb/s  # 当前网卡工作速度
        Duplex: Full  #  全双工
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes  # 当前有网线连接

查看网络接口

ifconfig -a

查看所有网络接口的属性,无论在线还是离线。

$ ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.77  netmask 255.255.255.0  broadcast 192.168.1.255
......

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>
......

查看数据链路层当前可用设备信息。

$ ip link show
1: lo: <LOOPBACK> mtu 16436 qdisc noqueue state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether b8:97:5a:17:b3:8f brd ff:ff:ff:ff:ff:ff

管理网络配置

主机名

静态主机名

static hostname

静态主机名 是系统启动时内核会引用的默认主机名,通常关注 这个主机名即可。它通常保存在 /etc/hostname 文件中。

查看

查看静态主机名:

$ hostnamectl status
Static hostname: localhost
Transient hostname: localhost.localdomain
	  Icon name: computer-container
		Chassis: container
	 Machine ID: c02dd0f0a9b74c00b232d39819dbff61
		Boot ID: a4dbaa87203040858654e13e0cc00376
 Virtualization: openvz
Operating System: CentOS Linux 7 (Core)
	CPE OS Name: cpe:/o:centos:centos:7
		 Kernel: Linux 2.6.32-042stab127.2
   Architecture: x86-64
$ nmcli general hostname
localhost
$ hostname
localhost
修改

🍎 修改静态主机名:

nmcli general hostname MATRIX
hostnamectl set-hostname "Your-Hostname"

动态主机名

transient :由内核维护的动态主机名,系统启动后 默认与静态主机名相同。但在 运行时,可被 DHCP 或 mDNS 修改。

修改动态主机名:

hostnamectl --transient set-hostname BILL

pretty hostname

这种主机名只是给用户看的,内核完全用不到。可以是任意格式 UTF8 字符。

网卡命名

主流网卡使用以太网络协议,称这种网络接口为 eth0 等。

CentOS 7 开始,使用新规则对网卡的命名:

  • eno1 :主板内置的网卡
  • ens1 :主板内置的 PCI-E 接口的网卡
  • enp2s0 :PCI-E 接口的独立网卡,可能有多个接口,s0, s1…
  • eth0 :如果上述名称都不适用,就用默认网卡编号

ifconfig -a 会列出全部网卡。CentOS 7 不希望用户手动修改配置文件,而应该使用 nmcli 命令来设置网络参数。

连接

connection

NetworkManager 把所有的网络配置文件都保存为一个个的 “连接”,因此 连接中所保存的实际上是二层信息、IP 地址等数据,这些数据共同描述了创建并连接到网络的具体方式。连接的生成与使用状态均由 NetworkManager 控制。

当一个网络接口使用某个连接的配置来创建连接或连接到网络时,我们说一个连接处于 激活(active)状态。

一个网络接口(device)可以有 多个连接,但 同时只能有一个被激活

之所以使用多个连接,是为了 快速切换不同的网络配置

假如某台主机通常连接到使用 DHCP 的网络,但有时需要使用静态 IP 地址连接到某个测试网络,这两种情况的网络设置可以分别保存为一个配置文件,每次切换配置文件就可以直接切换 IP 地址的设置了。

作为连接的这些配置文件通常保存在 /etc/sysconfig/network-scripts/ 目录,文件名前缀为 ifcfg- 开头。

“连接” 一词 仅在本小节 用来专指这种 网络配置文件。其它小节出现的连接均指通常语义中的网络连接。

启用、禁用全局网络

启用、禁用网络。网络被禁用时,所有 NM 管理的接口都会停用。

nmcli networking  on/off

创建连接

nmcli connection add type ... ifname ... con-name ...
type 连接类型

type 的取值可以是:

  1. ethernet
  2. wifi
  3. wimax
  4. pppoe
  5. gsm
  6. cdma
  7. infiniband
  8. bluetooth
  9. vlan
  10. bond
  11. bond-slave
  12. team
  13. team-slave
  14. bridge
  15. bridge-slave
  16. vpn
  17. olpc-mesh
  18. adsl
  19. tun
  20. ip-tunnel
  21. macvlan
  22. vxlan
  23. dummy
ifname 接口名称

指定这个新连接要使用哪个接口。

con-name 连接名称

指定新连接的名称。如未指定,默认命名格式为 type-ifname[-number]

添加动态地址连接
nmcli connection add type ethernet ifname ens33 con-name MATRIX

配置会保存为 /etc/sysconfig/network-scripts/ifcfg-MATRIX

再次激活该接口之前,NetworkManager 不会意识到对 ifcfg 文件的手动更改。要想立即生效,必须使用 nmcli con reload

添加静态地址连接
~]$ nmcli connection add type ethernet con-name LAB ifname ens33 ip4 192.168.1.56/24 gw4 192.168.1.1
~]$ nmcli con add type ethernet con-name LAB ifname ens9 ip4 10.10.10.10/24 gw4 10.10.10.254

查看连接

🍎 查看所有连接:

nmcli connection show

查看指定连接的配置参数:

nmcli connection show ens33

🍎 查看已激活的连接:

nmcli connection show --active

启用连接

🍎 启用指定连接:

nmcli connection up id bond0`

停用连接

停用该接口的连接。之后 有可能 被自动连接的设置所 激活

nmcli connection down id port0`

查看网络参数

IP 地址

🍎 查看所有网络接口的各协议地址,包括 IP 地址:

ip addr
路由表

🍎 查看路由表:

route -n

#### 修改连接参数

命令中,connection 可以简写为 con

主机名

修改 “连接到 DHCP 服务器时” 给自己配置的主机名。如连接到 WIFI 时。

~]$ nmcli con modify my-office ipv4.dhcp-hostname ZION ipv6.dhcp-hostname ZION
客户端名

修改发送到 DHCP 服务器的 IPv4 客户端名称。如连接到 WIFI 时。

~]$ nmcli con modify my-office ipv4.dhcp-client-id neo
DNS 服务器

🍎 修改 DNS 服务器地址:

~]$ nmcli con modify test-lab ipv4.dns "8.8.8.8 8.8.4.4"
~]$ nmcli con modify test-lab ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"

忽略 DHCP 服务器发送到主机的 DNS 服务器:

~]$ nmcli con modify my-office ipv4.ignore-auto-dns yes ipv6.ignore-auto-dns yes

添加 DNS 服务器地址:

~]$ nmcli con mod test-lab +ipv4.dns "8.8.8.8 8.8.4.4"
~]$ nmcli con mod test-lab +ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
路由

🍎 添加静态路由:

~]# nmcli con modify eth0 +ipv4.routes "192.168.122.0/24 10.10.10.1"
IP 地址

🍎 修改 IPv4 地址及网关:

RHEL 7.0:

~]# nmcli con mod net-eth0 ipv4.addresses "192.168.2.10/24 192.168.2.1"
~]# nmcli con mod net-eth0 ipv4.method manual
~]# nmcli con up net-eth0

RHEL 7.1 :

~]# nmcli con mod net-eth0 ipv4.addresses 192.168.2.10/24
~]# nmcli con mod net-eth0 ipv4.gateway 192.168.2.1
~]# nmcli con mod net-eth0 ipv4.method manual
~]# nmcli con up net-eth0

修改 IPv4 地址和网关的命令在 RHEL 7.0 版本中,整体需要双引号括起来,引号内部可以用 IP 地址 + 空格 + 网关 的格式,但到了 RHEL 7.1 版本,因为 NetworkManager 版本的升级,导致语法也发生了变化,地址和网关必须 分开指定,指定时无需双引号。

接口

device

接口是 物理设备,一个接口可以有多个连接,但是 同时只允许一个连接处于激活状态

对网络接口的操作一般用 nmcli device 来实现。

查看接口状态

查看所有网络接口的状态:

$ nmcli device status
DEVICE      TYPE      STATE      CONNECTION
virbr0      bridge    connected  virbr0     
ens33       ethernet  connected  ens33      
lo          loopback  unmanaged  --         
virbr0-nic  tun       unmanaged  --

查看指定接口状态:

$ nmcli device show ens33
GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:B2:33:63
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.1.78/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1002
IP4.DNS[1]:                             192.168.1.1
IP6.ADDRESS[1]:                         fe80::104b:1122:25f0:e73d/64
IP6.GATEWAY:                            

连接网络接口

连接指定的网络接口。NetworkManager 会尝试找到一个最适合的连接来激活,即使没有配置为自动连接的也会考虑。

$ nmcli device connect ifname

断开网络接口

断开指定的网络接口。断开之后,该接口不会被连接自动激活。

$ nmcli device disconnect ifname

监控网络接口

监控设备的活动,只要设备状态有变化,该命令就会显示一行信息。

$ nmcli device monitor ens33

WIFI

确认 wifi 已打开,启用了广播
~]$ nmcli radio
WIFI-HW  WIFI     WWAN-HW  WWAN    
enabled  enabled  enabled  enabled
重新扫描无线 AP
~]$ nmcli device wifi rescan
查看无线 AP 列表
$ nmcli device wifi list
连接到某个 AP
$ nmcli device wifi connect "SSID" password "wireless-password"

要想避免在命令行中直接输入密码:

nmcli --ask device wifi connect "myssid"

查看网络状态

侦听状态

查看侦听的端口

netstat -tnlp

查看所有监听端口

网络连接状态

查看系统整体连接

nmcli
$ nmcli general status
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

查看系统有线、无线连接状态。

$ sudo nmcli networking connectivity check
full

检查系统当前连接状态。

返回的网络连接的状态:

  • none 主机未连接到任何网络
  • portal 主机位于网关的后面,无法访问完整的互联网
  • limited 主机连接到某个网络,但无法访问互联网
  • full 主机连接到某个网络,并可访问互联网
  • unknown 无法查明连接状态
netstat
netstat -antp

查看所有已建立的连接

netstat -s

查看每个协议的简要统计数据。

nmcli 工具

CentOS7 之前的网络管理是通过 ifcfg 文件配置管理接口,而现在是通过 NetworkManager 服务管理连接。

在 CentOS7 中默认使用 NetworkManager 守护进程来监控和管理网络设置。nmcli 是命令行的 NetworkManager 工具,会自动把配置写到 /etc/sysconfig/network-scripts/ 目录下面。

用户和脚本都可使用 nmcli 来控制 NetworkManager。

nmcli 可用于创建、查看、编辑、删除、激活、禁用网络连接,也可以用来控制和查看网络接口的状态。

语法

nmcli [选项] 对象 [命令] [参数]

【 选项 】

-t, –terse 使用精炼的输出,用于脚本

-p, –pretty 使用易于阅读的输出,用于用户

-h, –help

【 对象 】

general、networking、radio、connection 或 device

【 命令 】

命令分多种:普通、网络控制、广播传输控制、活动监视、连接管理网络接口管理

熟悉这些命令后可 使用简写,如:

nmcli connection add type ethernet  # 可简化为:
nmcli      c      a  type eth

普通命令

nmcli general { status | hostname | permissions | logging } [ARGUMENTS...]

nmcli general status 查看 NetworkManager 的 整体状态nmcli genernal 后面如果不跟任何命令,默认用此命令

~]# nmcli general status
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

网络控制命令

nmcli networking { on | off | connectivity } [ARGUMENTS...]

查询网络状态

nmcli networking connectivity 查询网络连接状态,直接显示最近查看过的连接状态

nmcli networking connectivity check 重新检查连接状态

返回的网络连接的状态:

  • none 主机未连接到任何网络
  • portal 主机位于网关的后面,无法访问完整的互联网
  • limited 主机连接到某个网络,但无法访问互联网
  • full 主机连接到某个网络,并可访问互联网
  • unknown 无法查明连接状态
启用或禁用网络

nmcli networking on/off 启用、禁用网络。

网络被禁用时,所有 NM 管理的接口都会停用。

连接管理命令

nmcli connection { show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export } [ARGUMENTS...]

可以指定连接名称、UUID、D-Bus 路径。如果连接名过于混淆,可以使用 iduuidpathapath 等关键字。以下各命令均适用。

id ID ID 为连接名

uuid ID ID 为连接的 UUID

path ID 为 D-Bus 静态连接路径,格式为 /org/freedesktop/NetworkManager/Settings/numnum

show | 查看指定连接

nmcli connection show [--active] [ id | uuid | path | apath ] ID...

显示连接信息。

nmcli connection show 查看所有连接

nmcli connection show ens33 查看指定连接的配置参数

nmcli connection show --active 查看激活的连接

up | 激活连接

如果需要特定的接口来激活连接,可以使用 ifname 参数来指定接口名称。

如果没有指定连接名称,则必须要指定 ifname 接口名称。

nmcli connection up [ id | uuid | path ] ID [ifname ifname] [ap BSSID] [passwd-file file]

ifname 指定激活的接口

ap 要连接到的无线 AP 的 BSSID

passwd-file 指定密码文件

nmcli connection up id bond0`
down | 停用连接

deactivate,该接口仍具有自动激活的能力。可同时作用于多个连接。

该命令会停用指定的激活连接,但连接所在的 接口仍然随时准备连接,它会寻找合适的连接,如果找到的连接中含有 autoconnect 标签,包括刚被停用的连接,该接口还是可以被其自动激活。因此,如果连接被设定为自动连接,它仍会在该接口上自动激活。

在多数情况下,应该使用 nmcli device disconnect 命令,而不用 down

如果没有指定 --wait 参数,默认超时为 10 秒。

nmcli connection down [ id | uuid | path | apath ] ID...

nmcli connection down id port0`
modify | 修改连接配置

modify 命令用于 增加、修改、删除连接配置中的属性

被修改的属性可以用别名。

如果为某个属性追加值,在属性前加 +,要想从容器类的属性中删除一个值,在属性前加 -,并指定要删除的值。+- 只对有多个值的属性起作用,如 ipv4.dnsipv4.addressesbond.options 等。

modify [--temporary] [ id | uuid | path ] ID { option value | [+|-]setting.property value } ...

修改发送到 DHCP 服务器的主机名:

~]$ nmcli con modify my-office ipv4.dhcp-hostname ZION ipv6.dhcp-hostname ZION

修改发送到 DHCP 服务器的 IPv4 客户端名称:

~]$ nmcli con modify my-office ipv4.dhcp-client-id neo

忽略 DHCP 服务器发送到主机的 DNS 服务器:

~]$ nmcli con modify my-office ipv4.ignore-auto-dns yes ipv6.ignore-auto-dns yes

修改 DNS 服务器地址:

~]$ nmcli con mod test-lab ipv4.dns "8.8.8.8 8.8.4.4"
~]$ nmcli con mod test-lab ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"

添加 DNS 服务器地址:

~]$ nmcli con mod test-lab +ipv4.dns "8.8.8.8 8.8.4.4"
~]$ nmcli con mod test-lab +ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"

添加静态路由

~]# nmcli connection modify eth0 +ipv4.routes "192.168.122.0/24 10.10.10.1"

修改 IPv4 地址及网关

RHEL 7.0:

~]# nmcli con mod net-eth0 ipv4.addresses "192.168.2.10/24 192.168.2.1"
~]# nmcli con mod net-eth0 ipv4.method manual
~]# nmcli con up net-eth0

RHEL 7.1 :

~]# nmcli con mod net-eth0 ipv4.addresses 192.168.2.10/24
~]# nmcli con mod net-eth0 ipv4.gateway 192.168.2.1
~]# nmcli con mod net-eth0 ipv4.method manual
~]# nmcli con up net-eth0

修改 IPv4 地址和网关的命令在 RHEL 7.0 版本中,整体需要双引号括起来,引号内部可以用 IP 地址 + 空格 + 网关 的格式,但到了 RHEL 7.1 版本,因为 NetworkManager 版本的升级,导致语法也发生了变化。必须分开指定,指定时无需双引号。

add | 创建新连接

nmcli connection add [save { yes | no }] { option value | [+|-]setting.property value } ...

用指定属性 创建新连接

需要指定若干属性的值来创建新连接。要想创建一个有意义的连接,至少要设定 connection.type 属性,或使用别名 typetype 的取值可以是:

  1. ethernet
  2. wifi
  3. wimax
  4. pppoe
  5. gsm
  6. cdma
  7. infiniband
  8. bluetooth
  9. vlan
  10. bond
  11. bond-slave
  12. team
  13. team-slave
  14. bridge
  15. bridge-slave
  16. vpn
  17. olpc-mesh
  18. adsl
  19. tun
  20. ip-tunnel
  21. macvlan
  22. vxlan
  23. dummy

save 用来控制是否要把该配置保存到磁盘,默认为 yes

type 指定连接类型

ifname 接口名称

con-name 指定新连接名称。如未指定,默认格式为 type-ifname[-number]

某些属性的默认值:

connection.autoconnect: yes

ONBOOT: yes

ipv4.method: manual

connection.autoconnect: yes

BOOTPROTO: none

ONBOOT: yes

添加动态链接

nmcli connection add type ethernet ifname ens33 con-name MATRIX

配置会保存为 /etc/sysconfig/network-scripts/ifcfg-MATRIX

再次激活该接口之前,NetworkManager 不会意识到对 ifcfg 文件的手动更改。要想立即生效,必须使用 nmcli con reload

添加静态连接:

~]$ nmcli connection add type ethernet con-name LAB ifname ens33 ip4 192.168.1.56/24 gw4 192.168.1.1
~]$ nmcli con add type ethernet con-name LAB ifname ens9 ip4 10.10.10.10/24 gw4 10.10.10.254

添加 IPv6 地址和网关信息:

~]$ nmcli con add type ethernet con-name test-lab ifname ens9 ip4 10.10.10.10/24 gw4 10.10.10.254 ip6 abbe::cafe gw6 2001:db8::1