首页 > 代码库 > Centos7系统配置上的变化(二)网络管理基础
Centos7系统配置上的变化(二)网络管理基础
原文 Centos7系统配置上的变化(二)网络管理基础
上篇简单介绍了CentOS 7 在服务和网络方面的一点变化,先前很多烂熟于心的操作指令已经不适用了,不管是否习惯,总要接受、熟悉这些变化。 写上篇的时候还没有最小安装的ISO(CentOS-7.0-1406-x86_64-Minimal.iso),后来安装了首先发现ifconfig、netstat、route、arp都没有了,在哪儿呢?
1.
[root
@centos7
~]# yum search ifconfig
2.
......
3.
======================== Matched: ifconfig =========================
4.
net-tools.x86_64 : Basic networking tools
5.
[root
@centos7
~]#
哦,最小安装默认没有包含这些老工具,如果非用不可,就 yum install net-tools 吧,但我就是要看看不用它们我们怎么来管理网络。 我们将要用到的是ip指令,ss指令和NetworkManager的两个工具 nmtui,nmcli。老实说,这几个工具更加强大了,但还真不太容易习惯呢。
一、ip ss指令替代 ifconfig route arp netstat
1、ip 指令入门 ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT 和 COMMAND可以简写到一个字母 ip help 可以查到OBJECT列表和OPTIONS,简写 ip h ip <OBJECT> help 查看针对该OBJECT的帮助,比如 ip addr help,简写 ip a h ip addr 查看网络接口地址,简写 ip a
查看网络接口地址,替代ifconfig:
01.
[root
@centos7
~]# ip addr
02.
1
: lo: <LOOPBACK,UP,LOWER_UP> mtu
65536
qdisc noqueue state UNKNOWN
03.
link/loopback
00
:
00
:
00
:
00
:
00
:
00
brd
00
:
00
:
00
:
00
:
00
:
00
04.
inet
127.0
.
0.1
/
8
scope host lo
05.
valid_lft forever preferred_lft forever
06.
inet6 ::
1
/
128
scope host
07.
valid_lft forever preferred_lft forever
08.
2
: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu
1500
qdisc pfifo_fast state UP qlen
1000
09.
link/ether
08
:
00
:
27
:
15
:
35
:d2 brd ff:ff:ff:ff:ff:ff
10.
inet
192.168
.
150.110
/
24
brd
192.168
.
150.255
scope global enp0s3
11.
valid_lft forever preferred_lft forever
12.
inet6 fe80::a00:27ff:fe15:35d2/
64
scope link
13.
valid_lft forever preferred_lft forever
14.
[root
@centos7
~]#
网络接口统计信息
01.
[root
@centos7
~]# ip -s link
02.
1
: lo: <LOOPBACK,UP,LOWER_UP> mtu
65536
qdisc noqueue state UNKNOWN mode DEFAULT
03.
link/loopback
00
:
00
:
00
:
00
:
00
:
00
brd
00
:
00
:
00
:
00
:
00
:
00
04.
RX: bytes packets errors dropped overrun mcast
05.
0
0
0
0
0
0
06.
TX: bytes packets errors dropped carrier collsns
07.
0
0
0
0
0
0
08.
2
: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu
1500
qdisc pfifo_fast state UP mode DEFAULT qlen
1000
09.
link/ether
08
:
00
:
27
:
15
:
35
:d2 brd ff:ff:ff:ff:ff:ff
10.
RX: bytes packets errors dropped overrun mcast
11.
8135366
131454
0
0
0
456
12.
TX: bytes packets errors dropped carrier collsns
13.
646297
2441
0
0
0
0
2、ip route显示和设定路由
显示路由表
1.
[root
@centos7
~]# ip route
2.
default
via
192.168
.
150.254
dev enp0s3 proto
static
metric
1024
3.
192.168
.
150.0
/
24
dev enp0s3 proto kernel scope link src
192.168
.
150.110
太难看了,格式化一下(显示的是默认网关和局域网路由,两行的内容没有共通性):
1.
[root
@centos7
tmp]# ip route|column -t
2.
default
via
192.168
.
150.254
dev enp0s3 proto
static
metric
1024
3.
192.168
.
150.0
/
24
dev enp0s3 proto kernel scope link src
192.168
.
150.110
添加静态路由
01.
[root
@centos7
~]# ip route add
10.15
.
150.0
/
24
via
192.168
.
150.253
dev enp0s3
02.
[root
@centos7
~]#
03.
[root
@centos7
~]# ip route|column -t
04.
default
via
192.168
.
150.254
dev enp0s3 proto
static
metric
1024
05.
10.15
.
150.0
/
24
via
192.168
.
150.253
dev enp0s3 proto
static
metric
1
06.
192.168
.
150.0
/
24
dev enp0s3 proto kernel scope link src
192.168
.
150.110
07.
[root
@centos7
~]#
08.
[root
@centos7
~]# ping
10.15
.
150.1
09.
PING
10.15
.
150.1
(
10.15
.
150.1
)
56
(
84
) bytes of data.
10.
64
bytes from
10.15
.
150.1
: icmp_seq=
1
ttl=
63
time=
1.77
ms
11.
64
bytes from
10.15
.
150.1
: icmp_seq=
1
ttl=
63
time=
1.08
ms
12.
64
bytes from
10.15
.
150.1
: icmp_seq=
1
ttl=
63
time=
1.57
ms
13.
^C
删除静态路由只需要把 add 替换成 del,或者更简单的只写目标网络
1.
[root
@centos7
~]# ip route del
10.15
.
150.0
/
24
2.
[root
@centos7
~]#
但是,ip route 指令对路由的修改不能保存,重启就没了。 设置永久的静态路由的方法RHEL官网文档讲了几种,试验成功的只有一种:
1.
[root
@centos7
~]#echo
‘10.15.150.0/24 via 192.168.150.253 dev enp0s3‘
> /etc/sysconfig/network-scripts/route-enp0s3
重启计算机,或者禁用再启用设备enp0s3才能生效, 注意:/etc/sysconfig/static-routes,/etc/sysconfig/network 配置文件都不好用。
3、用 ip neighbor 代替 arp -n
1.
[root
@centos7
~]# ip nei
2.
192.168
.
150.254
dev enp0s3 lladdr b8:a3:
86
:
37
:bd:f8 STALE
3.
192.168
.
150.100
dev enp0s3 lladdr
90
:b1:1c:
94
:a1:
20
DELAY
4.
192.168
.
150.253
dev enp0s3 lladdr
00
:
09
:0f:
85
:
86
:b9 STALE
4、用ss 代替 netstat 对应netstat -ant
1.
[root
@centos7
~]# ss -ant
2.
State Recv-Q Send-Q Local Address:Port Peer Address:Port
3.
LISTEN
0
100
127.0
.
0.1
:
25
*:*
4.
LISTEN
0
128
*:
22
*:*
5.
ESTAB
0
0
192.168
.
150.110
:
22
192.168
.
150.100
:
53233
6.
LISTEN
0
100
::
1
:
25
:::*
7.
LISTEN
0
128
:::
22
:::*
对应netstat -antp
01.
[root
@centos7
tmp]# ss -antp
02.
State Recv-Q Send-Q Local Address:Port Peer Address:Port
03.
LISTEN
0
100
127.0
.
0.1
:
25
*:*
04.
users:((
‘master‘
,
1817
,
13
))
05.
LISTEN
0
128
*:
22
*:*
06.
users:((
‘sshd‘
,
1288
,
3
))
07.
ESTAB
0
0
192.168
.
150.110
:
22
192.168
.
150.100
:
59413
08.
users:((
‘sshd‘
,
2299
,
3
))
09.
LISTEN
0
100
::
1
:
25
:::*
10.
users:((
‘master‘
,
1817
,
14
))
11.
LISTEN
0
128
:::
22
:::*
12.
users:((
‘sshd‘
,
1288
,
4
))
13.
[root
@centos7
tmp]#
看着真的很别扭,不管多宽的终端屏,users:部分都会折到下一行,其实是在一行的。
格式化一下,内容整齐了,但是标题行串了:
1.
[root
@centos7
tmp]# ss -antp|column -t
2.
State Recv-Q Send-Q Local Address:Port Peer Address:Port
3.
LISTEN
0
100
127.0
.
0.1
:
25
*:* users:((
‘master‘
,
1817
,
13
))
4.
LISTEN
0
128
*:
22
*:* users:((
‘sshd‘
,
1288
,
3
))
5.
ESTAB
0
0
192.168
.
150.110
:
22
192.168
.
150.100
:
59413
users:((
‘sshd‘
,
2299
,
3
))
6.
LISTEN
0
100
::
1
:
25
:::* users:((
‘master‘
,
1817
,
14
))
7.
LISTEN
0
128
:::
22
:::* users:((
‘sshd‘
,
1288
,
4
))
5、旧的network脚本和ifcfg文件 Centos7 开始,网络由 NetworkManager 服务负责管理,相对于旧的 /etc/init.d/network 脚本,NetworkManager是动态的、事件驱动的网络管理服务。旧的 /etc/init.d/network 以及 ifup,ifdown 等依然存在,但是处于备用状态,即:NetworkManager运行时,多数情况下这些脚本会调用NetworkManager去完成网络配置任务;NetworkManager么有运行时,这些脚本就按照老传统管理网络。
1.
[root
@centos7
~]# /etc/init.d/network start
2.
Starting network (via systemctl): [ OK ]
注意(via systemctl)。
6、网络配置文件: /etc/sysconfig/network 说是全局设置,默认里面啥也没有 /etc/hostname 用nmtui修改hostname后,主机名保存在这里 /etc/resolv.conf 保存DNS设置,不需要手工改,nmtui里面设置的DNS会出现在这里 /etc/sysconfig/network-scripts/ 连接配置信息 ifcfg 文件 /etc/NetworkManager/system-connections/ VPN、移动宽带、PPPoE连接
二、nmtui配置基本网络连接 nmtui 属于curses-based text user interface(文本用户界面), 类似 Centos6 的 setup 工具,但只能编辑连接、启用/禁用连接、更改主机名。系统初装之后可以第一时间用nmtui配置网络,挺方便。 看图吧,功能跳转可以用 tab 键或光标键,用空格或回车执行。每个子功能完成了、退出了或取消了会直接回命令行(觉得不方便就试试 nmtui help,有直达的方法)。
在命令行运行 nmtui
添加连接,支持的连接很丰富啊,还有WiFi呢。但是vpn在哪?呵呵,nmtui目前还不支持。
编辑连接。
想编哪里就跳到哪里,如果不喜欢enp0s3这样的连接名,可以在Profile name处改掉,后面会说改名的好处。
注意,编辑复选框只能用空格
启用/禁用连接,远程连接的时候可以试试执行一下 <Deactivate>,然后以泪洗面吧。。。。
改主机名,改完后重启才有效,不想重启就回命令行执行 hostname <你的主机名> ,注销再登录就好了。
三、nmcli和其他网络设置 nmcli的功能要强大、复杂的多
01.
[root
@centos7
~]# nmcli help
02.
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
03.
04.
OPTIONS
05.
-t[erse] terse output
06.
-p[retty] pretty output
07.
-m[ode] tabular|multiline output mode
08.
-f[ields] <field1,field2,...>|all|common specify fields to output
09.
-e[scape] yes|no escape columns separators in values
10.
-n[ocheck] don‘t check nmcli and NetworkManager versions
11.
-a[sk] ask
for
missing parameters
12.
-w[ait] <seconds> set timeout waiting
for
finishing operations
13.
-v[ersion] show program version
14.
-h[elp] print
this
help
15.
16.
OBJECT
17.
g[eneral] NetworkManager‘s general status and operations
18.
n[etworking] overall networking control
19.
r[adio] NetworkManager radio switches
20.
c[onnection] NetworkManager‘s connections
21.
d[evice] devices managed by NetworkManager
OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device。
device叫网络接口,是物理设备 connection是连接,偏重于逻辑设置 多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。 这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应的connection。
上篇说了,/etc/udev/rules.d/70-persistent-net.rules 文件没有了,新添加的网卡NetworkManager自动识别。我们现在试试,给Virtualbox虚拟机增加第二块网卡,虚拟机启动后直接可以看到并且生效了。
1.
[root
@centos7
~]# nmcli con show
2.
NAME UUID TYPE DEVICE
3.
Wired connection
1
0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet enp0s8
4.
enp0s3 295e1841-0ff3-4db9-
8800
-4e25fc2944da
802
-
3
-ethernet enp0s3
“Wired connection 1”是新增的网络连接,对应的网络接口叫enp0s8; “enp0s3”是最初的网络连接,默认与网络接口同名。
我们可以用nmtui把两个连接改成我们熟悉的名字(nmcli也能,但比较麻烦哦)。改完了看看连接:
1.
[root
@centos7
~]# nmcli con show
2.
NAME UUID TYPE DEVICE
3.
eth3 0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet enp0s8
4.
eth0 295e1841-0ff3-4db9-
8800
-4e25fc2944da
802
-
3
-ethernet enp0s3
这样就舒服多了!
看看设备:
01.
[root
@centos7
~]# nmcli dev show enp0s3
02.
GENERAL.DEVICE: enp0s3
03.
GENERAL.TYPE: ethernet
04.
GENERAL.HWADDR:
08
:
00
:
27
:
15
:
35
:D2
05.
GENERAL.MTU:
1500
06.
GENERAL.STATE:
100
(connected)
07.
GENERAL.CONNECTION: eth0
08.
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/
4
09.
WIRED-PROPERTIES.CARRIER: on
10.
IP4.ADDRESS[
1
]: ip =
192.168
.
150.110
/
24
, gw =
192.168
.
150.254
11.
IP4.DNS[
1
]:
192.168
.
150.254
12.
IP6.ADDRESS[
1
]: ip = fe80::a00:27ff:fe15:35d2/
64
, gw = ::
13.
[root
@centos7
~]#
14.
[root
@centos7
~]# nmcli dev show enp0s8
15.
GENERAL.DEVICE: enp0s8
16.
GENERAL.TYPE: ethernet
17.
GENERAL.HWADDR:
08
:
00
:
27
:
98
:D1:B7
18.
GENERAL.MTU:
1500
19.
GENERAL.STATE:
100
(connected)
20.
GENERAL.CONNECTION: eth3
21.
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/
3
22.
WIRED-PROPERTIES.CARRIER: on
23.
IP4.ADDRESS[
1
]: ip =
10.0
.
3.15
/
24
, gw =
10.0
.
3.2
24.
IP4.DNS[
1
]:
10.0
.
3.2
25.
IP6.ADDRESS[
1
]: ip = fe80::a00:27ff:fe98:d1b7/
64
, gw = ::
26.
[root
@centos7
~]#
但是试试用连接名查设备呢?
1.
[root
@centos7
~]# nmcli dev show eth0
2.
Error: Device
‘eth0‘
not found.
用设备名查连接也是一样出错:
1.
[root
@centos7
~]# nmcli con show enp0s3
2.
Error: enp0s3 - no such connection profile.
这回能看清楚了吧?懂得了连接和设备的区别,在一些指令帮助里面有的参数需要connection,有的需要device,就不会糊涂了。
需要注意的是,enp0s3设备对应的连接名改为eth0,但对应的ifcfg文件并没有改名,我们改改试试,改之前先备份原配置文件到其他目录(注意,不能备份到network-scripts目录!)。
01.
[root
@centos7
network-scripts]# cat ifcfg-enp0s3
02.
TYPE=Ethernet
03.
BOOTPROTO=none
04.
DEFROUTE=yes
05.
IPV4_FAILURE_FATAL=no
06.
IPV6INIT=no
07.
IPV6_AUTOCONF=yes
08.
IPV6_DEFROUTE=yes
09.
IPV6_PEERDNS=yes
10.
IPV6_PEERROUTES=yes
11.
IPV6_FAILURE_FATAL=no
12.
NAME=eth0
13.
UUID=295e1841-0ff3-4db9-
8800
-4e25fc2944da
14.
ONBOOT=yes
15.
IPADDR0=
192.168
.
150.110
16.
PREFIX0=
24
17.
GATEWAY0=
192.168
.
150.254
18.
DNS1=
192.168
.
150.254
19.
HWADDR=
08
:
00
:
27
:
15
:
35
:D2
20.
[root
@centos7
network-scripts]#
21.
[root
@centos7
network-scripts]# cp ifcfg-enp0s3 /root/
22.
[root
@centos7
network-scripts]# mv ifcfg-enp0s3 ifcfg-eth0
23.
[root
@centos7
network-scripts]#
24.
[root
@centos7
network-scripts]# systemctl restart network
25.
[root
@centos7
network-scripts]#
没有问题,配置文件改名成功,强迫症又一次胜利了,耶! 我们还可以看到,ifcfg-eth0里面没有参数指明设备enp0s3,唯一与设备enp0s3相对应的是MAC地址(HWADDR 08:00:27:15:35:D2)。
现在试试增加一个针对新网络接口enp0s8的连接,现有连接是 eth3:
01.
[root
@centos7
network-scripts]# cat ifcfg-eth3
02.
HWADDR=
08
:
00
:
27
:
98
:D1:B7
03.
TYPE=Ethernet
04.
BOOTPROTO=dhcp
05.
DEFROUTE=yes
06.
PEERDNS=yes
07.
PEERROUTES=yes
08.
IPV4_FAILURE_FATAL=no
09.
IPV6INIT=yes
10.
IPV6_AUTOCONF=yes
11.
IPV6_DEFROUTE=yes
12.
IPV6_PEERDNS=yes
13.
IPV6_PEERROUTES=yes
14.
IPV6_FAILURE_FATAL=no
15.
NAME=eth3
16.
UUID=0c451785-b098-4c5c-994d-9107171b439d
17.
ONBOOT=yes
嗯,是自动获得IP的。
我们新建一个连接eth3-1,分配固定IP,用nmtui可以很容易的建立
01.
[root
@centos7
~]# nmcli con show
02.
NAME UUID TYPE DEVICE
03.
eth3-
1
ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
802
-
3
-ethernet --
04.
eth3 0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet enp0s8
05.
eth0 295e1841-0ff3-4db9-
8800
-4e25fc2944da
802
-
3
-ethernet enp0s3
06.
只是增加了一个连接,其他的没有变化。
07.
我们启动新连接 eth3-
1
08.
[root
@centos7
~]# nmcli con up eth3-
1
09.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/
2
)
10.
[root
@centos7
~]#
11.
[root
@centos7
~]# nmcli con show
12.
NAME UUID TYPE DEVICE
13.
eth3-
1
ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
802
-
3
-ethernet enp0s8
14.
eth3 0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet --
15.
eth0 295e1841-0ff3-4db9-
8800
-4e25fc2944da
802
-
3
-ethernet enp0s3
16.
[root
@centos7
~]#
17.
[root
@centos7
~]# nmcli -t -f IP4.ADDRESS dev show enp0s8
18.
IP4.ADDRESS[
1
]:ip =
10.0
.
3.110
/
24
, gw =
10.0
.
3.2
“nmcli -t -f IP4.ADDRESS dev show enp0s8” 是以脚本友好的方式显示网络接口信息。 现在可以很明显的看到,将连接eth3-1 up了之后,eth3-1占据了原来由eth3占据的DEVICE enp0s8,并且IP地址已经是指定的10.0.3.110/24 了。
01.
[root
@centos7
network-scripts]# cat ifcfg-eth3-
1
02.
TYPE=Ethernet
03.
BOOTPROTO=none
04.
IPADDR0=
10.0
.
3.110
05.
PREFIX0=
24
06.
GATEWAY0=
10.0
.
3.2
07.
DNS1=
10.0
.
3.2
08.
DEFROUTE=yes
09.
IPV4_FAILURE_FATAL=no
10.
IPV6INIT=no
11.
NAME=eth3-
1
12.
UUID=ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
13.
DEVICE=enp0s8
14.
ONBOOT=yes
ifcfg-eth3-1文件里没有HWADDR参数,但是多了一个DEVICE参数,等于enp0s8,你可以对比一下ifcfg-eth3看看区别在哪。 连接的配置文件 ifcfg-*,可以用 DEVICE 指定设备名,也可以用HWADDR指定设备的MAC地址,最终结果都一样的指向某个设备(网络接口)。
我们再试试用nmcli增加连接:
01.
[root
@centos7
~]# nmcli con add con-name eth3-
2
ifname enp0s8 type ethernet ip4
10.0
.
3.120
/
24
gw4
10.0
.
3.2
02.
Connection
‘eth3-2‘
(468815f5-ce97-43bd-904a-3078e2e59fec) successfully added.
03.
[root
@centos7
~]#
04.
[root
@centos7
~]# nmcli con show
05.
NAME UUID TYPE DEVICE
06.
eth3-
1
ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
802
-
3
-ethernet enp0s8
07.
eth3 0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet --
08.
eth0 295e1841-0ff3-4db9-
8800
-4e25fc2944da
802
-
3
-ethernet enp0s3
09.
eth3-
2
468815f5-ce97-43bd-904a-3078e2e59fec
802
-
3
-ethernet --
10.
[root
@centos7
~]#
11.
[root
@centos7
~]# nmcli con up eth3-
2
12.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/
3
)
13.
[root
@centos7
~]#
14.
[root
@centos7
~]# nmcli con show
15.
NAME UUID TYPE DEVICE
16.
eth3-
1
ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
802
-
3
-ethernet --
17.
eth3 0c451785-b098-4c5c-994d-9107171b439d
802
-
3
-ethernet --
18.
eth0 295e1841-0ff3-4db9-
8800