动态路由
Bonding
Network Teaming
静态路由实验
Linux的网络管理,了解基本的网络知识是基础,除此,要掌握好ifconig命令、ip命令、nmcli命令(CentOS 7),以及涉及到网络的配置文件。
配置动态路由:
通过守护进程获取动态路由,安装quagga包,支持RIP、OSPF、BGP,通过命令vtysh配置。
[root@centos6 ~]#yum -y install quagga
切换到服务启动脚本目录下启动或者直接servifce启动:
查看OSPF是否启动
[root@centos6 /etc/rc.d/init.d]#./ospfd status ospfd is stopped [root@centos6 /etc/rc.d/init.d]#./ospfd start # 启动 [root@centos6 /etc/rc.d/init.d]#./ospfd status ospfd is stopped # 没有成功启动 [root@centos6 /etc/rc.d/init.d]# 此时: [root@centos6 /etc/rc.d/init.d]#cd /etc/quagga [root@centos6 /etc/quagga]#lsbgpd.conf.sample ospf6d.conf.sample ripd.conf.sample vtysh.conf zebra.confbgpd.conf.sample2 ospfd.conf.sample ripngd.conf.sample vtysh.conf.sample zebra.conf.sample [root@centos6 /etc/quagga]#mv ospfd.conf.sample ospfd.conf # 重命名,去掉.sample [root@centos6 /etc/quagga]# 再次启动OSPF: [root@centos6 ~]#service ospfd start Starting ospfd: [ OK ] [root@centos6 ~]#service ospfd status ospfd (pid 2420) is running... [root@centos6 ~]#
我们来运行一下OSPF:
Bonding
所谓Bonding,就是将多块网卡绑定同一IP地址对外提供服务,从而实现高可用或负载均衡,其实现思路类似于思科网络中的二层或三层的链路聚合,两个不同的路由器接口不可能设置同一个IP,同样两个不同的网卡也不可能设置同一个IP,于是,Bonding就将两块网卡虚拟成一块网卡对外提供服务,此时,物理网卡会被修改为同一MAC地址;
Bonding有三种不同的模式Mode:
Mode 0 (balance-rr) 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。 本模式提供负载均衡和容错的能力 Mode 1 (active-backup) 活动-备份(主备)策略:在绑定中,只有一个slave被激活。当且仅当活动的slave接口失败时才会激活其他slave。 为了避免交换机发生混乱此时绑定的MAC地址只有 一个外部端口上可见 Mode 3 (broadcast) 广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力。
在进行Bonding试验之前,我们需要先了解网卡别名与设备别名以及网络接口识别并命令的udev相关配置文件!
网卡别名: 将多个IP地址绑定到一个NIC上,类似于网络中的子接口概念。
eth0:1 、eth0:2、eth0:3
[root@centos6 ~]#ifconfig eth0:0 10.1.250.11/24 [root@centos6 ~]#ifconfig eth0:1 10.1.251.11/14 [root@centos6 ~]#
如果你拥有一个网卡的话,你就可以避免在多个IP地址之间来回切换了!
再试试ip命令:
[root@centos6 ~]#ip addr add 10.1.251.55/24 dev eth2 label eth2:0 [root@centos6 ~]#ip addr add 10.1.250.66/16 dev eth2 label eth2:1 [root@centos6 ~]#ip addr add 192.168.10.1/24 dev eth2 label eth2:1
以上配置,重启网络服务后失效!!!
设备别名: 为每个设备别名生成独立的接口配置文件
别晕先,不管是网卡别名还是设备别名,它们都是别名,网卡也是设备,所以它们本质是指的是同一个“实现”,只不是实现方式不同罢了,前者是直接命令行实现,临时有效,而后者是直接写配置文件,让其永久生效。注意,在写设备别名的配置文件时,要关闭NetworkManager服务!且必须为静态联网!重启有效!
[root@centos6 ~]#service NetworkManager stop Stopping NetworkManager daemon: [ OK ] [root@centos6 ~]# [root@centos6 ~]#chkconfig NetworkManager off # 永久关闭此服务 [root@centos6 ~]#
在网络配置文件目录直接创建
[root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-eth0:0 DEVICE=eth0:0 IPADDR=192.168.10.1 PREFIX=24 ONPARENT=yes [root@centos6 /etc/sysconfig/network-scripts]#
udev配置文件
网络接口识别并命名相关的udev配置文件:
/etc/udev/rules.d
安装与卸载网卡
dmesg, ethtool modprobe, rmmod
dmesg命令被用于检查和控制内核的环形缓冲区。kernel会将开机信息存储在ring buffer中。若是开机时来不及查看信息,可利用dmesg来查看。开机信息保存在/var/log/dmesg文件里.
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能也多。其信息来源于网卡驱动层,即TCP/IP协议的链路层。
modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。
查看网卡: dmesg |grep –i eth ethtool -i eth0 卸载网卡驱动: modprobe -r e1000 rmmod e1000 装载网卡驱动: modprobe e1000
OK,我们再装载上网卡吧。
通过以上例子,我们对网上与网络的基本配置也有了一定的感知,现在就让我们来做一个Bonding吧!
创建bonding设备配置文件
Bonding是一个逻辑上的概念,即一个虚拟网卡,所以,设置好bonding配置文件后,必须要有物理网卡的支撑。即指定MASTER与SLAVE,MASTER就是bonding设备,SLAVE就是物理网卡。
这个bonding配置文件跟普通的网卡配置文件大体相同,就是多了一条bonding的特有选项:BONDING_OPTS,子选项miimong表示链路检测时间间隔,单位毫秒,如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路 mode表示Bonding的模式。
[root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-bond0 DEVICE=bond0 BOOTPROTO=static IPADDR=10.1.255.11 PERFIX=16 DNS1=114.114.114.114 DNS2=8.8.8.8 GATEWAY=10.1.0.1 BONDING_OPTS="miimon=100 mode=1" [root@centos6 /etc/sysconfig/network-scripts]# [root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-eth0 DEVICE=eth0 ONBOOT=yes SLAVE=yes MASTER=bond0 [root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-eth2 DEVICE=eth2 ONBOOT=yes SLAVE=yes MASTER=bond0 [root@centos6 /etc/sysconfig/network-scripts]#
重启网络服务,使bonding生效:
查看bonding状态
测试Bonding
Down掉目前bond0的活动网卡eth0
看bond0的IP是否还在继续ping
查看目前bond0活动的网卡
由此,bonding的mode1主备模式已成功切换!
此时我们再重启网卡eth0,看其能否再次抢占活动接口,如果不能,我们再重启网络服务,看其能否抢占活动网卡。
我们发现,eth0重启后也没能再次抢占为活动接口,这样也在一定程序上使网络相对稳定。好吧,我们再来重启网络服务。
重启网络服务后,eth0成功抢占为活动接口。
删除bonding:Down掉bond接口,删除其配置文件,重启网络服务
至此,我们小结下网络配置文件的主要格式:
ONBOOT:在系统引导时是否激活此设备 TYPE:接口类型;常见有的Ethernet, Bridge UUID:设备的惟一标识 IPADDR:指明IP地址 NETMASK:子网掩码 GATEWAY: 默认网关 DNS1:第一个DNS服务器指向 DNS2:第二个DNS服务器指向 USERCTL:普通用户是否可控制此设备 PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server 分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中
Network Teaming
网络组Network Teaming, 其实就是高级版本的Bonding, 所谓网络组,就是将多个网卡聚合在一起,从而实现冗错和提高吞吐量。 相比于bonding,可以提供更好的性能和扩展性,网络组由内核驱动和teamd守护进程实现。网络组功能主要由nmcli命令实现,nmcli是一个命令集,在CentOS 7上有较好的支持。
其有多种方式的runner:
多种方式runner broadcast roundrobin activebackup loadbalance lacp (implements the 802.3ad Link Aggregation Control Protocol)
网络组的特性:
启动网络组接口不会自动启动网络组中的port接口 启动网络组接口中的port接口不会自动启动网络组接口 禁用网络组接口会自动禁用网络组中的port接口 没有port接口的网络组接口可以启动静态IP连接 启用DHCP连接时,没有port接口的网络组会等待port接口的加入
nmcli命令
NAME nmcli - command‐line tool for controlling NetworkManager SYNOPSIS nmcli [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { general | networking | radio | connection | device | agent } OPTIONS := { -t[erse] 简洁的 -p[retty] 输出humans -m[mode] tabular | multiline -f[ields] <field1,field2,...> | all | common -e[scape] yes | no 转义:to escape ':' and '\' -n[ocheck] -a[sk] -w[ait] <seconds> -v[ersion] -h[elp] } connection - start, stop, and manage network connections COMMAND := { show | up | down | add | edit | modify | delete | reload | load } device - show and manage network interfaces COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }
使用示例
nmcli -t -f RUNNING general tells you whether NetworkManager is running or not. nmcli -t -f STATE general shows the overall status of NetworkManager. nmcli connection show lists all connections NetworkManager has. nmcli connection show --active lists all currently active connections. nmcli device status shows the status for all devices.
nmcli命令集支持简写!
[root@centos7 ~]#nmcli -t -f RUNNING generalrunning [root@centos7 ~]#nmcli -t -f STATE general connected [root@centos7 ~]# [root@centos7 ~]#nmcli con show --act NAME UUID TYPE DEVICE Wired connection 1 a7925ed3-dc18-44d6-9ff4-fed0a3b3ea49 802-3-ethernet eth2 virbr0 94c2eaa2-c9d1-4960-a3d3-34e7f785a194 bridge virbr0 eth0 3e132822-6672-45f2-8863-b0e905a4d58b 802-3-ethernet eth0 [root@centos7 ~]#nmcli device status DEVICE TYPE STATE CONNECTION virbr0 bridge connected virbr0 eth0 ethernet connected eth0 eth2 ethernet connected Wired connection 1 virbr0-nic ethernet unavailable -- lo loopback unmanaged -- [root@centos7 ~]#
接下来,我们来创建一个网络组,创建网络组的主要步骤如下:
创建网络组接口
nmcli con add type team con-name CNAME ifname INAME [config JSON] CNAME 连接名,INAME 接口名 JSON 指定runner方式 格式:'{"runner": {"name": "METHOD"}}' METHOD 可以是broadcast, roundrobin, activebackup, loadbalance, lacp
创建port接口
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM CNAME 连接名 INAME 网络接口名 TEAM 网络组接口名 连接名若不指定,默认为team-slave-IFACE nmcli dev dis INAME nmcli con up CNAME INAME 设备名CNAME 网络组接口名或port接口
激活网络组与port接口
注意:
修改连接配置后,需要重新加载配置 nmcli con reload nmcli con down “system eth0” 可被自动激活 nmcli con up “system eth0” nmcli dev dis eth0 禁用网卡,访止被自动激活 图形工具 nm-connection-editor
试验开始:
创建网络组接口与port接口,关键字:nmcli con add
[root@centos7 ~]#nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}' # 创建网络组接口 team0Connection 'team0' (b831a407-ec7d-4424-a918-c8e1a48ab1c6) successfully added. [root@centos7 ~]# [root@centos7 ~]#nmcli con add type team-slave con-name team0-port0 ifname eth0 master team0 # 创建port接口 eth0Connection 'team0-port0' (9e4984aa-585a-465c-9534-e0660be4eca0) successfully added. [root@centos7 ~]# [root@centos7 ~]#nmcli con add type team-slave con-name team0-port1 ifname eth2 master team0 # 创建port接口 eth2Connection 'team0-port1' (e4c70974-97a0-4ab2-867c-16dd70798b20) successfully added. [root@centos7 ~]#
为网络组配置IP地址,关键字:nmcli con mod
[root@centos7 ~]#nmcli con mod team0 ipv4.addresses 10.1.252.100/24 [root@centos7 ~]#nmcli con mod team0 ipv4.method manual [root@centos7 ~]#
激活网络组接口与port接口,关键字:nmcli con up
我们还发现在网络配置文件目录下自动添加了正如文件:
打开ifcfg-team0
打开ifcfg-team0-port0
当然,ifcfg-team0-port1的内容与其相似!
测试:
查看team0的IP及其状态:
可见,team0的活动接口为eth0.
Down掉team0-port0
查看活动接口
成功切换到了eth2!
可此时,却ping不通team0了,我们尝试着再次激活team0-port1,却发现能够正常ping通了!
此处可能上延迟比较大,于是索性再次激活目前的活动接口team0-port1。此处得靠点人品!
Down掉team0-port1
再次UPteam0-port0
eth0成功成为活动接口,并自动ping通team0,测试成功!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
注意,在网络组实验时,不要重启网络服务,否则,team0的状态就会异常!当然此时也就ping不通team0了!如果不慎重启了网络服务,则需要重启激活组接口与port接口,team0的状态也就正常了,相应地也能够ping通team0了!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
静态路由实验
实验环境:
R1,R2
PC1,PC2
拓扑图如下:
IP规划:
PC1: 192.168.10.1/24 PC2: 172.16.10.1/16 R1、R2: 10.1.1.0/32
实验准备:
主机模拟路由器时要开启路由功能
路由器要关闭NetworkManager服务
关闭防火墙:iptables -F
配置:
配置IP
PC1:
PC2:
R1:
R2:
配置路由
PC1网关
PC2网关
R1路由
R2路由
测试:
PC1与PC2ping各自的网关
PC1与PC2互ping
路由追踪:
本文主要介绍了Linux中跟网络相关的的基础知识,包括如何配置IP与路由,如何创建一个Bonding以及Network Teaming, 最后一个静态路由的实验,主要是体验下数据是如何经过下一跳,如何被路由到目的地。
止战
2016.9.9
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。