RHEL 和 CentOS 系统默认使用 NetworkManager 来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。可以使用 nmcli 命令来管理 NetworkManager 服务。nmcli 是一款基于命令行的网络配置工具,功能丰富,参数众多。
mcli命令 是一个非常丰富和灵活的命令行工具,可以完成网卡上的所有配置,并可以写入配置文件中
centos默认安装,而ubuntu需要手动安装apt install network-manager
SYNOPSIS
NAME
nmcli - command-line tool for controlling NetworkManager
SYNOPSIS
nmcli [OPTIONS...] {help | general | networking | radio | connection | device | agent | monitor} [COMMAND] [ARGUMENTS...]
OPTIONS
选项 | 作用 |
---|---|
-t | 简洁输出,会将多余的空格删除, |
-p | 人性化输出,输出很漂亮 |
-n | 优化输出,有两个选项tabular(不推荐)和multiline(默认) |
-c | 颜色开关,控制颜色输出(默认启用) |
-f | 过滤字段,all为过滤所有字段,common打印出可过滤的字段 |
-g | 过滤字段,适用于脚本,以:分隔 |
-w | 超时时间 |
COMMANDS
nmcli general {status|hostname|permissions|logging}
[root@node1 ~]# nmcli gen status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled
[root@node1 ~]# nmcli gen hostname node1-centos
[root@node1 ~]# cat /etc/hostname
node1-centos
[root@node1 ~]# nmcli gen permission
PERMISSION VALUE
org.freedesktop.NetworkManager.enable-disable-network yes
org.freedesktop.NetworkManager.enable-disable-wifi yes
org.freedesktop.NetworkManager.enable-disable-wwan yes
...
[root@node1 ~]# nmcli gen logging
LEVEL DOMAINS
INFO
PLATFORM,RFKILL,ETHER,WIFI,BT,MB,DHCP4,DHCP6,PPP,IP4,IP6,AUTOIP4,DNS,VPN,SHARING,SUPPLICANT,AGENTS,SETTINGS,SUSPEND,CORE,DEVICE,OLPC,INFINIBAND,FIREWALL,ADSL,BOND,VLAN,BRIDGE,TEAM,CONCHECK,DCB,DISPATCH,AUDIT,SYSTEMD,PROXY
命令格式:nmcli networking {on|off|connectivity}
命令描述:查询网络管理器网络状态,开启和关闭网络
选项:
on: 开启所有接口
off: 禁用所有接口
connectivity: 获取网络状态,可选参数check告诉网络管理器重新检查连接性,否则显示最近已知的状态。而无需重新检查。(可能的状态如下所示)
- none: 主机为连接到任何网络
- portal: 无法到达完整的互联网
- limited: 主机已连接到网络,但无法访问互联网
- full: 主机连接到网络,并具有完全访问
- unknown: 无法找到连接状态
[root@node1 ~]# nmcli networking connectivity
full
[root@node1 ~]# nmcli networking connectivity check
full
[root@node1 ~]# nmcli networking off
[root@node1 ~]#
Network error: Software caused connection abort #好的,连不上了
命令格式:nmcli connection {show|up|down|modify|add|edit|clone|delete|monitor|reload|load|import|export}
这是主要使用的一个功能
show
show有两种用法,分别是:
① 列出活动的连接,或进行排序(±为升降序)
# 查看所有连接状态
[root@www ~]# nmcli connection show
# 等同于nmcli connection show --order +active
[root@www ~]# nmcli connection show --active
# 以活动的连接进行排序
[root@www ~]# nmcli connection show --order +active
# 将所有连接以名称排序
[root@www ~]# nmcli connection show --order +name
# 将所有连接以类型排序(倒序)
[root@www ~]# nmcli connection show --order -type
② 查看指定连接的详细信息
[root@node1 ~]# nmcli connection show --order +name
NAME UUID TYPE DEVICE
System ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet --
Wired connection 1 e741eeb8-242e-3dad-8f70-df385496b90f ethernet --
Wired connection 2 d05a7dea-7039-39c7-9089-d462f1402c4b ethernet ens33
[root@node1 ~]# nmcli connection show ens33
Error: ens33 - no such connection profile. #奇怪并不好用
up/down
激活连接/停用连接,提供连接名称或uuid进行激活,若未提供,则可以使用ifname指定设备名进行激活。
[root@node1 ~]# nmcli conn up ifname ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
nmcli connection show eth0
进行获取,然后可以修改、添加或删除属性,若要设置属性,只需指定属性名称后跟值,空值将删除属性值,同一属性添加多个值使用+
。同一属性删除指定值用-
加索引。
# 添加三个
[root@www ~]# nmcli connection modify eth0 +ipv4.addresses 192.168.100.102/24
[root@www ~]# nmcli connection modify eth0 +ipv4.addresses 192.168.100.103/24
[root@www ~]# nmcli connection modify eth0 +ipv4.addresses 192.168.100.104/24
# 查看
[root@www ~]# nmcli -f IP4 connection show eth0
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
# 启用配置
[root@www ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/18)
# 再次查看
[root@www ~]# nmcli -f IP4 connection show eth0
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.ADDRESS[2]: 192.168.100.102/24
IP4.ADDRESS[3]: 192.168.100.103/24
IP4.ADDRESS[4]: 192.168.100.104/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
[root@www ~]# nmcli -f IP4 connection show eth0
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.ADDRESS[2]: 192.168.100.102/24
IP4.ADDRESS[3]: 192.168.100.103/24
IP4.ADDRESS[4]: 192.168.100.104/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
# 删除索当前索引为2的地址
[root@www ~]# nmcli connection modify eth0 -ipv4.addresses 2
# 查看
[root@www ~]# nmcli -f IP4 connection show eth0
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.ADDRESS[2]: 192.168.100.102/24
IP4.ADDRESS[3]: 192.168.100.103/24
IP4.ADDRESS[4]: 192.168.100.104/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
# 再次激活
[root@www ~]# nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/19)
# 查看
[root@www ~]# nmcli -f IP4 connection show eth0
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.ADDRESS[2]: 192.168.100.102/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
[root@www ~]# nmcli con add con-name eth1 type ethernet autoconnect yes ifname eth0
# con-name 连接名称
# type 连接类型
# autoconnect 是否自动连接
# ifname 连接到的设备名称
更多的类型或方法可以使用nmcli connection add help查看。
克隆连接,克隆一个存在的连接,除了连接名称和uuid是新生成的,其他都是一样的。
[root@www ~]# nmcli connection clone eth0 eth0_1
删除连接,这将删除一个连接。
[root@www ~]# nmcli connection delete eth0_1
从磁盘加载/重新加载一个或多个连接文件,例如你手动创建了一个/etc/sysconfig/network-scripts/ifcfg-ethx连接文件,你可以将其加载到网络管理器,以便管理。
[root@www ~]# echo -e "TYPE=Ethernet\nNAME=ethx" > /etc/sysconfig/network-scripts/ifcfg-ethx
[root@www ~]# nmcli connection show
NAME UUID TYPE DEVICE
eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802-3-ethernet eth0
[root@www ~]# nmcli connection load /etc/sysconfig/network-scripts/ifcfg-ethx
[root@www ~]# nmcli connection show
NAME UUID TYPE DEVICE
eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802-3-ethernet eth0
ethx d45d97fb-8530-60e2-2d15-d92c0df8b0fc 802-3-ethernet --
监视连接配置文件活动。每当指定的连接更改时, 此命令都会打印一行。要监视的连接由其名称、UUID 或 D 总线路径标识。如果 ID 不明确, 则可以使用关键字 id、uuid 或路径。有关 ID 指定关键字的说明, 请参阅上面的连接显示。
监视所有连接配置文件, 以防指定无。当所有监视的连接消失时, 该命令将终止。如果要监视连接创建, 请考虑使用带有 nmcli 监视器命令的全局监视器
[root@www ~]# nmcli connection monitor eth0
命令格式:nmcli device {status|show|set|connect|reapply|modify|disconnect|delete|monitor|wifi|lldp}
显示和管理设备接口。该选项有很多功能,例如连接wifi,创建热点,扫描无线,邻近发现等,下面仅列出常用选项。详细功能可使用nmcli device help
查看。
status
打印设备状态,如果没有将命令指定给nmcli device,则这是默认操作。
[root@www ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
lo loopback unmanaged --
[root@www ~]# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
lo loopback unmanaged --
show
显示所有设备接口的详细信息。
# 不指定设备接口名称,则显示所有接口的信息
[root@www ~]# nmcli device show eth0
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:99:9A:A1
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: eth0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/9
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 192.168.100.101/24
IP4.ADDRESS[2]: 192.168.100.102/24
IP4.GATEWAY: 192.168.100.100
IP4.DNS[1]: 8.8.8.8
set
设置设备属性
[root@www ~]# nmcli device set ifname eth0 autoconnect yes
connect
连接设备。提供一个设备接口,网络管理器将尝试找到一个合适的连接, 将被激活。它还将考虑未设置为自动连接的连接。(默认超时为90s)
[root@www ~]# nmcli dev connect eth0
Device 'eth0' successfully activated with '5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03'.
reapply(重新申请)
使用上次应用后对当前活动连接所做的更改来更新设备。
[root@www ~]# nmcli device reapply eth0
Connection successfully reapplied to device 'eth0'.
modify
修改设备上处于活动的设备,但该修改只是临时的,并不会写入文件。(语法与 nmcli connection modify 相同)
[root@www ~]# nmcli device modify eth0 +ipv4.addresses 192.168.100.103/24
Connection successfully reapplied to device 'eth0'.
[root@www ~]# nmcli dev show eth0
[root@www ~]# nmcli device modify eth0 -ipv4.addresses 1
Connection successfully reapplied to device 'eth0'.
disconnect
断开当前连接的设备,防止自动连接。但注意,断开意味着设备停止!但可用 connect 进行连接
[root@www ~]# nmcli device disconnect eth0
delete
删除设备,该命令从系统中删除接口。请注意, 这仅适用于诸如bonds, bridges, teams等软件设备。命令无法删除硬件设备 (如以太网)。超时时间为10秒
[root@www ~]# nmcli device delete bonds
monitor
监视设备活动。每当指定的设备更改状态时, 此命令都会打印一行。
监视所有设备以防未指定接口。当所有指定的设备消失时, 监视器将终止。如果要监视设备添加, 请考虑使用带有 nmcli 监视器命令的全局监视器。
[root@www ~]# nmcli device monitor eth0
mcli 如果成功退出状态值为0,如果发生错误则返回大于0的值。
状态码 | 说明 |
---|---|
0 | 成功-指示操作已成功 |
1 | 位置或指定的错误 |
2 | 无效的用户输入,错误的nmcli调用 |
3 | 超时了(请参阅 --wait 选项) |
4 | 连接激活失败 |
5 | 连接停用失败 |
6 | 断开设备失败 |
7 | 连接删除失败 |
8 | 网络管理器没有运行 |
10 | 连接、设备或接入点不存在 |
65 | 当使用 --complete-args 选项,文件名应遵循。 |
ifcfg命令家族:ifconfig、route和netstat
前文提到ifcfg命令家族功能和ip相似,并且长时间未维护,很有可能被ip取代,所以本文将简要介绍
语法及参数
ifconfig命令的英文全称是“network interfaces configuring”,即用于配置和显示Linux内核中网络接口的网络参数。
用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
此工具在net-tools工具包中,可以通过yum install net-tools
安装
NAME
ifconfig - configure a network interface
SYNOPSIS
ifconfig [-v] [-a] [-s] [interface]
ifconfig [-v] interface [aftype] options | address ...
interface:接口的名称。这通常是一个驱动程序名,后面跟着一个单元号,例如用于第一个以太网接口的eth0。
选项options
选项 | 说明 |
---|---|
up | 此标志将导致激活接口。如果将地址分配给接口,则会隐式指定该地址。 |
down | 此标志导致关闭此接口的驱动程序。 |
[-]arp | 启用或禁用在此接口上使用ARP协议。 |
[-]promisc | 启用或禁用接口的混杂模式。如果选中,网络上的所有数据包都将由接口接收。混杂模式是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。 |
[-]allmulti | 启用或禁用所有多播模式。如果选中,则接口将接收网络上的所有多播数据包。 |
metric N | 此参数设置接口度量。它在GNU/Linux下不可用 |
mtu N | 此参数设置接口的最大传输单元(MTU)。 |
dstaddr addr | 为点对点链路(如PPP)设置远程IP地址.这个关键字现在已经过时了;使用pointopoint关键字代替。 |
netmask addr | 设置此接口的IP网络掩码。此值默认为通常的A、B或C类网络掩码(从接口IP地址派生),但可以设置为任何值。 |
add addr/prefixlen | 向接口添加IPv 6地址 |
del addr/prefixlen | 从接口中删除IPv 6地址 |
tunnel ::aa.bb.cc.dd | 创建一个新的SIT(IPv6-in-IPv4)设备,通过隧道到达给定的目的地。 |
irq addr | 设置此设备使用的中断行。并非所有设备都可以动态更改其IRQ设置。 |
io_addr addr | 为该设备设置I/O空间中的起始地址 |
mem_start addr | 设置此设备使用的共享内存的起始地址。只有少数几个设备需要这个 |
media type | 设置设备要使用的物理端口或介质类型。并非所有设备都可以更改此设置,以及那些可以更改其支持的值的设备。典型的类型值是10 base 2(细以太网)、10 base T(双绞线10 Mbps以太网)、AUI(外收发信机)等。驱动的特殊介质类型可以用来告诉驱动对媒体进行自动感知。同样,并不是所有的驱动都能做到这一点。 |
[-]broadcast [addr] | 如果地址参数给定,则为该接口设置协议广播地址。否则,设置(或清除)接口的IFF_BROADCAST标志。 |
[-]pointopoint [addr] | 这个关键字启用了接口的点对点模式,这意味着它是两台机器之间的直接链接,没有其他人监听它。如果地址参数也给出了,就像过时的dstaddr关键字一样,设置链接另一端的协议地址。否则,设置或清除接口的IFF_POINTOPOINT标志。 |
hw class address | 如果设备驱动程序支持此操作,则设置此接口的硬件地址(mac地址)。关键字后面必须跟着硬件类的名称和相当于硬件地址的可打印的ASCII。目前支持的硬件类包括ether (以太网)、ax25(AMPRAX.25)、ARCnet和netrom(AMPR NET/ROM)。 |
multicast | 在接口上设置多播标志。这通常不应该需要,因为驱动程序本身设置正确的标志。 |
address | 要分配给此接口的IP地址。 |
txqueuelen length | 设置设备的传输队列的长度。对于具有高延迟(调制解调器链路,ISDN)的较慢设备,将其设置为小值是有用的,以防止快速批量传输过多地干扰诸如telnet之类的交互通信。 |
ifconfig [interface]
[root@node1 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.71.183 netmask 255.255.255.0 broadcast 192.168.71.255
inet6 fe80::3872:4f8b:dbfc:1aa2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:79:08:6b txqueuelen 1000 (Ethernet)
RX packets 14790 bytes 1205753 (1.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1636 bytes 148104 (144.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 19 base 0x2000
ifconfig IFACE IP/MASK [up/down]
[root@node1 ~]# ifconfig ens33 192.168.71.184/24 down #好的,连不上了
[root@node1 ~]# ifconfig ens33 192.168.71.184/24 up
注意:地址及掩码可缺省
也可以以这种形式:
ifconfig ens33 192.168.71.184 netmask 255.255.255.0 down
ifconfig IFACE IP netmask NETMASK
[root@node1 ~]# ifconfig ens33 192.168.71.184/24
重启后失效,如果要长久使用,则需要修改配置文件
[root@node1 ~]# ifconfig -s
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 0 0 0 0 0 0 0 0 BMU
docker_gwbridge 1500 3472 0 0 0 534 0 0 0 BMU
ens33 1500 3472 0 0 0 534 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
[root@node1 ~]# ifconfig docker0 hw ether 00:0c:29:49:e3:f4
route命令:路由查看及管理,路由条目类型:
1. 主机路由:目标地址为单个ip
2. 网络路由:目标地址为ip网络
3. 默认路由:目标为任意主机,0.0.0./0.0.0.0
1. 查看
route -n
显示数字IP,不加n
反解地址及端口号
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.71.1 0.0.0.0 UG 100 0 0 ens33
192.168.71.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@node1 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens33
192.168.71.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
U表示活跃,G表示网关
2. 添加
route add [-net|-host] target [netmask Nm] [gw GW] [[dev] if]
1 - net 网络路由,host主机路由
2 - target 网络地址
3 - netmask 子网掩码
4 - gw 网关,下一跳地址
添加指定网段的网关
route add -net 192.168.72.0/24(或写为netmask 255.255.255.0) gw 192.168.20.1 dev enp1s0
解释:
192.168.72.0为指定到达的网络
192.168.20.1为下一跳的网关,必须与自己的某块网卡在同一网络中
dev enp1s0 由哪个网卡访问,可省略
添加路由记录,指定通过eth0
网卡传输到192.168.5.0
网段的数据
route add -net 192.168.5.0 netmask 255.255.255.0 dev eth0
添加默认网关:
route add default gw 192.168.0.1 #添加默认网关
3. 删除
route del [-net|-host] target [netmask Nm] [gw GW] [[dev] if]
示例1:
route del -net 192.168.72.0/24 [gw 192.168.20.1] #网关可缺省
示例2:
route del default
Print network connections, routing tables, interface statistics, masquerade connec‐tions, and multicast memberships
netstat -rn
和route -n大体相似
-r 显示内核路由表
-n 不反解ip为主机名
[root@node1 ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.71.1 0.0.0.0 UG 0 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
netstat [-t/--tcp][-u/--udp]
参数 | 说明 |
---|---|
-t | tcp协议相关链接,均有其状态:FSM (finite state machine,有限状态机) |
-u | udp协议相关 |
-w | 裸套接字相关连接 |
-l | 处于监听状态的连接,不加表示已建立 |
-a | 所有状态,不加表示当前只处于连接中的,不包括-l |
-n | 以数字格式显示ip |
-e | 扩展格式 |
-p | 显示相关进程和pid |
常用组合:-nltp,-nlup, -tan, -uan
[root@node1 ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 857/rpcbind
...
tcp6 0 0 ::1:25 :::* LISTEN 1347/master
[root@node1 ~]# netstat -nlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 192.168.122.1:53 0.0.0.0:* 1636/dnsmasq
...
udp 0 0 0.0.0.0:602 0.0.0.0:* 857/rpcbind
netstat -i/-I<无空格>[IFACE] # IFACE为接口名字
① 所有接口:
[root@node1 ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33 1500 40099 1 9 0 6142 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 LRU
virbr0 1500 0 0 0 0 0 0 0 0 BMU
② 指定接口:
netstat -I<eth1> #不能加空格
[root@node1 ~]# netstat -Iens33
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33 1500 42409 1 9 0 6364 0 0 0 BMRU
前面介绍的都是临时添加路由,如何在服务器重启后,添加的路由仍能生效?
在/etc/sysconfig/network-script/目录下创建名为route- eth0的文件,eth0为网卡名称,一般为eth0、ens33等
在此文件添加如下格式的内容
192.168.1.0/24 via 192.168.0.1 dev eth0
重启网络验证
systemctl restart network
修改/etc/netplan/*.yaml配置文件
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.0.2/24
gateway4: 192.168.0.1
routes:
- to: 192.168.1.0/24
via: 192.168.0.1
配置保存后,通过下面命令生效
netplan apply
编辑network/interfaces文件,我们需要编辑网络接口和IP地址的配置文件。打开终端并运行以下命令:
sudo nano /etc/network/interfaces
在文件的底部添加以下行:
up route add -net 192.168.1.0/24 gw 192.168.0.1 dev eth0
这个命令添加了一个到网关192.168.0.1的路由,并将流量发送到eth0网络接口。
保存配置文件后,重启网络服务以使更改生效。运行以下命令:
sudo service network-manager restart