一、简介

Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。

NetworkManager 可以用于以下类型的连接:Ethernet,VLANS,Bridges,Bonds,Teams,Wi-Fi,mobile boradband(如移动3G)以及 IP-over-InfiniBand。针对与这些网络类型,NetworkManager 可以配置他们的网络别名,IP 地址,静态路由,DNS,VPN连接以及很多其它的特殊参数。

在CentOS / RHEL 7中网络管理命令行工具,也叫nmcli – command-line tool for controlling NetworkManager

经常使用ifconfig的用户应该在CentOS 7中避免使用ifconfig了。nmcli的功能要强大、复杂的多。

二、网卡配置文件详解

/etc/sysconfig/network-scripts/ifcfg-ens33

配置参数说明
 
# 注:这些参数值不区分大小写,不区分单引号和双引号,甚至可以不用引号。

# 有Ethernet、IPsec等类型,网络接口类型为Ethernet。
TYPE:配置文件接口类型。

DEVICE:网络接口名称

# none dhcp static,dhcp表示动态分配ip;none或者static则为静态固定ip
BOOTPROTO:网卡获取ip地址方式
 

# 刚安装系统未勾选启动启动,默认是ONBOOT为 no
ONBOOT:系统启动时是否激活
 
    yes:系统启动时激活该网络接口
 
    no:系统启动时不激活该网络接口
    
UUID含义是通用唯一识别码 (Universally Unique Identifier),在此可以忽略
 
IPADDR:IP地址
 
NETMASK:子网掩码
 
GATEWAY:网关地址
 
BROADCAST:广播地址

# 只需设置其中一个,同时设置时不能相互冲突。
HWADDR/MACADDR:MAC地址。

# 如果使用DHCP协议,默认为yes。 静态配置就需要手动指定
PEERDNS:是否指定DNS。
 
    yes:如果DNS设置,修改/etc/resolv.conf中的DNS
 
    no:不修改/etc/resolv.conf中的DNS


# 当PEERDNS为yes时会被写入/etc/resolv.conf中。DNS可以设置多个,在DNS后面加数字依次排序
DNS{1, 2}:DNS地址。

# 修改保存后立即生效,无需重启。被其坑过几次,建议一般设为no。
NM_CONTROLLED:是否由Network Manager控制该网络接口。
 
    yes:由Network Manager控制
 
    no:不由Network Manager控制
 
USERCTL:用户权限控制
 
    yes:非root用户允许控制该网络接口
 
    no:非root用户不运行控制该网络接口
 
IPV6INIT:是否执行IPv6
 
    yes:支持IPv6
 
    no:不支持IPv6
 
IPV6ADDR:IPv6地址/前缀长度

二、命令使用

1、命令语法:

nmcli[ OPTIONS ] OBJECT { COMMAND | help }

OBJECT 和 COMMAND 可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。

OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device

device叫网络接口,是物理设备
nmcli device help

connection是连接,偏重于逻辑设置
nmcli connection help

# 多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。
# 这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应connection
2、查看网卡信息命令
# 查看所有网络连接
# 长格式
nmcli connection show

# 短格式,缩写
nmcli con show

# 查看活动的网络连接
nmcli con show -active

# 查看指定网卡的详细信息
nmcli con show eth0

# 显示设备的连接状态
nmcli status

# 显示所有设备网络设备详情信息
nmcli device show

# 显示指定网络设备的详细信息
nmcli device show eth0
3、网卡状态修改命令
# 启用网络连接
nmcli con up eth0

# 停用网络连接(可以被自动激活)
nmcli con down eth0

# 禁用网卡,防止自动被激活
nmcli device disconnect eth0

# 删除网络连接的配置文件
nmcli con delete eth0

# 重新加载网络配置文件
nmcli con reload
4、新增网卡配置文件
# 使用 add 命令会在 /etc/sysconfig/network-scripts中生成以为 ifcfg开头加add指定的 con-name 名称命名,此文件皆由 nmcli命令进行动态配置

# 如果手动修改 ifcfg文件,重启NetworkManager是无法生效,还需要在执行 nmcli con up才行

# 因此不建议手动修改配置文件,一切修改都使用nmcli命令,修改后执行 nmcli con up 立即生效


# 动态获取IP方式的网络连接配置:
nmcli con add con-name dynamic ifname ens36 type ethernet 

#启用动态配置文件
nmcli con up  dynamic

# 指定静态IP方式的网络连接配置:
nmcli con add con-name static ifname ens36 autoconnect yes type ethernet ip4 10.10.10.10/24 gw4 10.10.10.1

#启动静态配置文件
nmcli con up static
4、修改网卡配置

命令语法:

nmcli connection modify Con-Name [+|-]setting.propertyvalue

setting.property:

ipv4.method (manual | auto)
ipv4.addresse
ipv4.gateway
ipv4.dns1
修改网络单项
# 设置网卡自启动,实际修改的是网卡配置文件 ONBOOT=yes
nmcli con mod CON-NAME connection.autoconnect yes

# 修改IP地址是静态(manual)还是dhcp动态(auto)
# 实际修改的是网卡配置文件BOOTPROTO,BOOTPROTO=none 表示静态;BOOTPROTO=dhcp 表示动态
nmcli con mod CON-NAME ipv4.method manual(static) | auto

# 修改IP配置及网关
nmcli con mod CON-NAME ipv4.addresses “10.10.10.10/24 10.10.10.1”

# 修改默认网关
nmcli con mod CON-NAME ipv4.gateway 10.10.10.1

# 添加第二个IP地址
nmcli con mod CON-NAME +ipv4.addresses 10.10.10.10/16

# 删除第二个IP地址
nmcli con mod CON-NAME -ipv4.addresses 10.10.10.10/16

# 添加dns1
nmcli con mod CON-NAME ipv4.dns 114.114.114.114

# 添加dns2
nmcli con mod CON-NAME +ipv4.dns  8.8.8.8
修改所对应的文件条目
#修改配置文件
nmcli con mod      			# ifcfg-* 文件

# IP获取方式
ipv4.method manual|static   # BOOTPROTO=none
ipv4.method auto     		# BOOTPROTO=dhcp

# 连接名称
connection.id eth0     		# NAME=eth0

#IP地址信息
ipv4.addresses      
“192.0.2.1/24      			# IPADDR0=192.0.2.1 PREFIX0=24
192.0.2.254”      			# GATEWAY0=192.0.2.254

# dns
ipv4.dns 8.8.8.8     		# DNS0=8.8.8.8

# dns搜索域
ipv4.dns-search example.com  # DOMAIN=example.com

ipv4.ignore-auto-dns true    # PEERDNS=no
connection.autoconnect yes   # ONBOOT=yes
connection.interface-name eth0  # DEVICE=eth0
802-3-ethernet.mac-address... 	# HWADDR=...