【前言】
上篇文章说了网络模型的一些定义和原理,那么这篇就以实践为主了,主要来讲一讲关于网络设置的一些命令。
【Ifconfig】
Ifconfig命令是一个历史悠久的命令,这点在man 帮助里是有所体现的:
虽然年代久远,但是还是很德高望重的,那么就首先来说说这位老人家的用法。
ifconfig 后面不加任何参数,可以查看当前系统使用的网卡信息
在这里我们使用CentOS7来进行实验:
ifconfig -a 显示当前系统中的所有网卡
这里因为小编没有其他的网卡,所以跟上个命令的显示结果一样,看官们如果发现有不同也不要惊慌哈~
ifcnonfig 网卡名 up/down 激活或停用一个网卡
既然上面我们说ifocnfig这个命令年代久远,那么必须就要有个新势力出现了,这个新势力就是ip
命令。
ip命令是一个强大的工具,它可以代替很多传统的工具,例如ifconfig、route等来实现一些它们的功能,它对应了三个对象(object),分别是addr、link、route。首先来看一下ip addr
ip addr (可以简写为 ip a )查看网卡信息
ip addr add IP地址 设备名称 可以给当前网卡手动添加一个地址
ip addr del IP地址 设备名称 删除一个地址
ip link
ip link 显示网络设备的运行状态
ip -s link 显示更详细的设备信息
ip link show dev eth1 仅显示eth0的信息
ip link show up 仅显示处于激活状态的设备
ip link set ens33 down down掉eth0
ip link set ens33 up 激活eth0
ip route
这个命令和route
实现的功能是大同小异的,这里就放在一块说吧:
route -n 查看路由表
route add 添加路由
-net 到达网络路由
-host 到达主机路由,比较精准
添加默认网关:
route add -net 0.0.0.0/0 gw xxx.xxx.xxx.xxx 添加默认路由记录
route add default gw xxx.xxx.xxx.xxx
route del 删除路由
ip route
ip route add IP地址 via 网关地址 dev 设备名
ip route add default via GW 添加默认网关
ip route del IP地址 删除路由
ip route show|list 显示路由表
ip route flush 清空路由表
ip route flush dev ens33 清空路由表
当然以上所说的都是通过命令来实现,但都是临时生效,开机重启之后会恢复到远状态,如果想要长期有效,就要将其写入文件中,在/etc/sysconfig/network-scripts/
下创建一个名为route-IFACE(网卡名)的文件,在文件中写入如下格式,即可生效:
IP地址 via GW eg : 10.0.0.0/8 via 172.17.0.1
以上说这些命令并不能直观的来感受,那么我们就通过一个实验演示来说明:
实验条件:
两台PC,A和B;三台路由R1 R2 R3
拓扑图为:
接下来进行路由和网络的设置
首先来手动修改五台机器的IP地址,写入文件最好,因为会重启网络服务让其生效,如果命令设置重启网络以后会失效:
A: IADDR=192.168.1.100/16
B: IADDR=192.168.4.100/16
R1、R2、R3有两个网卡,因此不要忘记设置两个网卡的IP地址呦~~
R1: IADDR=192.168.1.200/16
IADDR=192.168.2.200/16
R2: IADDR=192.168.2.201/16
IADDR=192.168.3.200/16
R3: IADDR=192.168.3.201/16
IADDR=192.168.4.200/16
设置完以后,就要对每台机器设置网关地址:
因为AB两台机器网关的端口是一样的,所以这里可以使用默认官网来设置:
A: route add -net default gw 192.168.1.200
B:ip route add default via 192.168.4.200
设置三台路由器的网关地址:
R1: route add -net 192.168.3.0 gw 192.168.2.201
route add -net 192.168.4.0 gw 192.168.2.201
R2: route add -net 192.168.1.0 gw 192.168.2.200 dev eth0
route add -net 192.168.4.0 gw 192.168.3.201 dev eth1
R3: route add -net 192.168.1.0 gw 192.168.3.200
route add -net 192.168.2.0 gw 192.168.3.200
设置完成以后,如果ping命令相互之间不同的话,就需要开启路由转发的功能。
那么什么是路由转发功能呢?路由器的默认功能在接收到一个包以后,如果有自己的地址则会转发,没有对应自己的地址则会丢弃不会转发,这里我们就要把它的这个功能打开,使他能够对其他地址实现转发功能,实现方法:
echo 1 > /proc/sys/net/ipv4/ip_forward
关闭防火墙以后就可以测试两台主机之间是否可以相互连接了。
关于路由的一些设置就先说这么多,接下来介绍一个Centos7上的强大的网络配置工具nmcli
,在Centos6上也可以使用,但是功能就相对的少了许多。
【nmcli】
nmcli
命令强大之处在于可以使用这一条命令实现ifconfig、route、ip 等其他的功能,而且nmcli命令做出的修改时可以同步到文件之中的,这样就不同于我们之前的命令都是临时生效的,如果想长期的设置还需要手动修改文件。那接下来就来详细看一下nmcli的用法:
nmcli 也是作用于对象,我们可以查看一下:
nmcli 命令总共作用于以上这8个对象,那本篇博里就只研究device和connection这两个对象。
首先我们需要简单区分一下device和connection的区别
- device叫网络接口,是物理设备
- connection是连接,偏重于逻辑设置
- 多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。这样的意义在于,我们可以设置不同的connection应用到一个device中,在device其中一个地址出现错误的时候,可以启用另一个connection。
nmcli device
nmcli device (status) 显示设备状态
nmcli device show 显示全部网络接口属性
nmcli device show ens33 显示ens33网络接口属性
nmcli device (connect)disconnect ens33 激活网卡或者停用网卡
[root@localhost ~]# nmcli device status -------------->查看设备状态
DEVICE TYPE STATE CONNECTION
virbr0 bridge connected virbr0
ens33 ethernet connected ens33
ens34 ethernet connected ens34
lo loopback unmanaged --
virbr0-nic tun unmanaged --
[root@localhost ~]# nmcli device -------------->默认与上条命令显示结果相同
DEVICE TYPE STATE CONNECTION
virbr0 bridge connected virbr0
ens33 ethernet connected ens33
ens34 ethernet connected ens34
lo loopback unmanaged --
virbr0-nic tun unmanaged --
nmcli connection
nmcli connection add 增加连接
nmcli connection delete 删除连接
nmcli connection down ens33 down掉ens33设备
nmcli connection up ens33 启用ens33设备
nmcli con reload 重新加载网卡
nmcli con add help 可以查看帮助
nmcli connection modify static ipv4.gateway xxx.xxx.xxx.xxx 修改网关地址
nmcli connection modify static ipv4.dns 8.8.8.8 修改DNS (修改其他同下)
nmcli connection modify static +ipv4.dns 8.8.8.8 添加dns
nmcli connection modify static -ipv4.dns 8.8.8.8 删除dns
实验:
对以上命令进行解析:add
上面有说到,指增加一个新的连接;type
是指指定增加连接的类型,如果不确定要写什么,可以按两下TAB键查看一下都支持什么选项,这事nmcli比较强大的一点; ifname
要指定设备名,即要给哪一个设备的连接;con-name
连接名,可以随意设置;ipv4.method manual
这一参数是指我们要手工指定静态IP,不使用动态IP,想当于配置文件的BOOTPROTO=none;ipv4.address
后面加上想要设置的IP 地址、设置完成以后,我们查看一下发现这个连接是没有启用的,这个就是因为我们前面所说的,同一时间只能启用一个device;同时我们查看/etc/sysconfig/nework-scripts
下,有一个ifcfg-my-ens33
是自动生成的,我们查看一下这个文件,发现被红框标注的地方正是刚刚我们使用命令设置的,这正表明这个文件是nmcli自动生成的吧~~
那么如果我们想要让新增加的连接启动呢?
前面我们说了,同一时间只能启用一个device,那么使用up命令启用我们新设置的连接,那么另一个连接则会自动失效。
我们发现之前设置的文件没有设置网关地址,那么如果给已存在的连接添加或者修改网关地址呢?那就要使用modify
选项,如上图所示,我们发现这个也是直接修改了文件,证明修改成功,同理,添加DNS地址也是一样的:
想要删除一个连接,可以down掉这个连接,然后删除文件;或者是直接删除文件,重新加载网卡,这两种方法都可以实现。我们来实验后一种:
【实验:多种方法实现多网卡绑定】
所谓多网卡绑定,就是将两个以上的网卡绑定在一个IP地址上进行使用,在原理上我们是实现的是网卡的均衡负载,避免一个网卡负载过重的情况。那么在使用nmcli进行实验之前,我们先来使用一个最原始的方法来实现多网卡绑定。什么方法?写文件喽。
多网卡绑定有一个名词称为bond,bond有多种模式,这里简单介绍几个:
1、mode0 轮转,轮流接收,提供负载平衡和容错的能力。
2、mode1 (active-backup) 备份网卡,备份网卡随时监控主网卡。
3、mode3 (dup!表示)广播策略,发送一个包回复两个包,提供容错能力。
我们实验来设置一个mode1模式:
首先手动创建一个在/etc/sysconfig/network-scripts/下的文件ifcfg-bond0文件:
设置完以后,要在原两个网卡文件里写入以下标注的两行:
重启网络服务以后ifconfig查看就为以下页面:
如想要查看bond0的运行状态,可以cat /proc/net/bonding/bond0 这个文件。
取消bond卸载网卡,删除文件,卸载这个驱动模块就可以恢复到原来状态了~~~
记得要把原网卡配置文件中表明奴隶的两行也要删掉哈~~
【nmcli实现】
以上我们使用的是最古老的方法来实现多网卡绑定,那么既然上面介绍了nmcli是一项强大的工具,接下来就使用nmcli命令来实现多网卡绑定:
【bond】
这样就表明已经实现了多网卡绑定,取消的方式也与上面提到的相同,这里就不再演示了哈~~
在nmcli中实现多网卡绑定还可以使用网络组team来进行实现,它的原理与bond相似,
下面就简单进行演示一下:
【team】
[root@localhost ~]# nmcli connection add type team con-name myteam0 ifname team0 ipv4.method manual ipv4.addresses 172.16.0.66/16 config '{"runner":{"name":"roundrobin"}}' -----------------> 最后这个参数是team的固定格式,runner和name是固定的,最后一个写入你所选择的模式
[root@localhost ~]# nmcli connection add type team-slave ifname ens34 master bond0 ----------------->将两个网卡设置为team组的奴隶
[root@localhost ~]# nmcli connection add type team-slave ifname ens33 master bond0
[root@localhost ~]# nmcli connection
NAME UUID TYPE DEVICE
ens33 e307bd78-116a-498a-af89-d99f699169a4 802-3-ethernet ens33
ens34 cfb6ae93-a266-4a4c-92a4-735452b5588f 802-3-ethernet ens34
myteam0 32d8a6d2-0e4c-4d6b-b78d-85b6a2484b5c team team0
virbr0 ebd9e583-08c5-4958-8bff-00b445d9f775 bridge virbr0
team-slave-ens33 92160562-eab7-4777-9a00-73c4ca4619b3 802-3-ethernet --
team-slave-ens34 6a92fa1a-9a24-47ce-a00f-fcec395315c2 802-3-ethernet -- --
[root@localhost ~]# nmcli connection up team-slave-ens33 ----------------->启动两个连接
[root@localhost ~]# nmcli connection up team-slave-ens34