Linux网络管理基础

Linux网络管理基础


  • 动态路由

  • Bonding

  • Network Teaming

  • 静态路由实验


Linux的网络管理,了解基本的网络知识是基础,除此,要掌握好ifconig命令、ip命令、nmcli命令(CentOS 7),以及涉及到网络的配置文件。

配置动态路由:

通过守护进程获取动态路由,安装quagga包,支持RIP、OSPF、BGP,通过命令vtysh配置。

[root@centos6 ~]#yum -y install quagga

wKioL1fSqmOgfjmZAACgWXyeJR8739.png

切换到服务启动脚本目录下启动或者直接servifce启动:

wKiom1fSqn2gDu0nAACjcWV3i3k423.png

查看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:

wKioL1fSqwjhDfXLAAA_OC67iVE320.png


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 ~]#

wKioL1fSqzzhlMoSAAC7uPe2qZ0812.png

如果你拥有一个网卡的话,你就可以避免在多个IP地址之间来回切换了!

再试试ip命令:

[root@centos6 ~]#ip addr add 10.1.251.55/24 dev eth1 label eth1:0
[root@centos6 ~]#ip addr add 10.1.250.66/16 dev eth1 label eth1:1
[root@centos6 ~]#ip addr add 192.168.10.1/24 dev eth1 label eth1:1

wKiom1fSq2azuzIfAABY6rmQJPw876.png

以上配置,重启网络服务后失效!!!

设备别名: 为每个设备别名生成独立的接口配置文件

别晕先,不管是网卡别名还是设备别名,它们都是别名,网卡也是设备,所以它们本质是指的是同一个“实现”,只不是实现方式不同罢了,前者是直接命令行实现,临时有效,而后者是直接写配置文件,让其永久生效。注意,在写设备别名的配置文件时,要关闭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]#

wKioL1fSq6zyaY3oAAC832_hsTY896.png

udev配置文件

网络接口识别并命名相关的udev配置文件:

/etc/udev/rules.d

wKiom1fSq_rhCiD5AAD5WW2qI2c648.png

安装与卸载网卡

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

wKiom1fSrJfi71lyAACB0R-48oI190.png

wKiom1fSrLCigZPzAABQKFJYON0800.png

wKioL1fSrMOBIyvIAAAqqDGS9_0787.png

OK,我们再装载上网卡吧。

wKioL1fSrNWQIOWdAAA5TfXZaiI338.png

通过以上例子,我们对网上与网络的基本配置也有了一定的感知,现在就让我们来做一个Bonding吧!

  1. 创建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-eth1
DEVICE=eth1
ONBOOT=yes
SLAVE=yes
MASTER=bond0
[root@centos6 /etc/sysconfig/network-scripts]#

重启网络服务,使bonding生效:

wKioL1fSrTLj8fDnAAATxWt0gB8750.png

  1. 查看bonding状态

wKioL1fSrUOxNofVAADO5TdPiiU337.png

wKiom1fSrVShi1VIAACSRhCdioQ421.png

wKiom1fSrWXTU3R_AAA1EXHMb4I334.png

  1. 测试Bonding

Down掉目前bond0的活动网卡eth0

wKioL1fSrXji2mZTAAAxF8QPWgE241.png

看bond0的IP是否还在继续ping

wKiom1fSrYnQKijuAAAiOl2E4C8177.png

查看目前bond0活动的网卡

wKiom1fSrZqC1ItCAAAnx9gjY6o403.png

由此,bonding的mode1主备模式已成功切换!

此时我们再重启网卡eth0,看其能否再次抢占活动接口,如果不能,我们再重启网络服务,看其能否抢占活动网卡。

wKioL1fSraqxWLl2AAAhPEC_06c430.png

我们发现,eth0重启后也没能再次抢占为活动接口,这样也在一定程序上使网络相对稳定。好吧,我们再来重启网络服务。

wKiom1fSrbygx-4qAAAjYp65XF8002.png

重启网络服务后,eth0成功抢占为活动接口。

  1. 删除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  eth1   
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               
eth1        ethernet  connected    Wired connection 1 virbr0-nic  ethernet  unavailable  --                 
lo          loopback  unmanaged    --                 
[root@centos7 ~]#

接下来,我们来创建一个网络组,创建网络组的主要步骤如下:

  1. 创建网络组接口

    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
  2. 创建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接口
  3. 激活网络组与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 eth1 master team0   
# 创建port接口
eth1Connection '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

wKioL1fSrtPB48R3AAAcEQSZR4A646.png

我们还发现在网络配置文件目录下自动添加了正如文件:

wKiom1fSrumwS3igAACliBicPoo351.png

打开ifcfg-team0

wKiom1fSrvzALldgAAB3O2KXBiI910.png

打开ifcfg-team0-port0

wKiom1fSrw6SfPX3AAAsEhkYLho772.png

当然,ifcfg-team0-port1的内容与其相似!

测试:

查看team0的IP及其状态:

wKioL1fSryPzC-QBAABC8trsDT8102.png

wKiom1fSrzaQIp2oAAAWUJUlni8625.png

可见,team0的活动接口为eth0.

wKioL1fSr0vRx91yAABBkYA58u8788.png

Down掉team0-port0

wKiom1fSr1vxem-tAAALWoTXYnU608.png

查看活动接口

wKioL1fSr2_ztwH8AAAPD_SZIJo220.png

成功切换到了eth1!

可此时,却ping不通team0了,我们尝试着再次激活team0-port1,却发现能够正常ping通了!

wKioL1fSr4Hyhi-XAAALA1Ub9-A352.png

wKiom1fSr4_AaTC5AABv3SHyUKM838.png

此处可能上延迟比较大,于是索性再次激活目前的活动接口team0-port1。此处得靠点人品!

Down掉team0-port1

wKioL1fSr6HSBdYbAAALCcGbkwU320.png

wKioL1fSr8HzjeNrAABAFPifvlI717.png

再次UPteam0-port0

wKiom1fSr9egPRYoAAAfzKcPeN0891.png

wKiom1fSr-_QfEolAABSUjekW9Y624.png

eth0成功成为活动接口,并自动ping通team0,测试成功!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

注意,在网络组实验时,不要重启网络服务,否则,team0的状态就会异常!当然此时也就ping不通team0了!如果不慎重启了网络服务,则需要重启激活组接口与port接口,team0的状态也就正常了,相应地也能够ping通team0了!

wKioL1fSsASQ8IbZAABc2EBRNTI426.png

wKiom1fSsBvTyXbiAACOGFP3ELY442.png

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


静态路由实验

实验环境:

R1,R2

PC1,PC2

拓扑图如下:

wKiom1fSsEHhIMK3AAA6YpMhxJA570.png

IP规划:

PC1: 192.168.10.1/24
PC2: 172.16.10.1/16
R1、R2: 10.1.1.0/32

实验准备:

  1. 主机模拟路由器时要开启路由功能

  2. 路由器要关闭NetworkManager服务

  3. 关闭防火墙:iptables -F

配置:

  1. 配置IP

PC1:

wKioL1fSsF_jDfHSAAATVS84FNw217.png

PC2:

wKioL1fSsG_D6Zb7AAAQndQ0J30915.png

R1:

wKiom1fSsIGB5q9WAAAJLN3ZQ50155.png

R2:

wKiom1fSsJCyvbjRAAAK-JyFsN4763.png

  1. 配置路由

PC1网关

wKioL1fSsKPh4fnVAAAFs_l75S8137.png

PC2网关

wKioL1fSsLvz3TCiAAAE9f6AFTI822.png

R1路由

wKiom1fSsM7ify7fAAAGdAGgXVE758.png

wKioL1fSsN-jn3m4AAAlPMXAmcY939.png

R2路由

wKiom1fSsO6C7u9DAAAF_NAMZA8533.png

wKioL1fSsQPTo5PTAAAPCBbKFOw314.png

测试:

PC1与PC2ping各自的网关

wKioL1fSsRrQWcUJAAAgx8Rua0g808.png

wKiom1fSsSnR2IGpAAAeGA1ysb8476.png

PC1与PC2互ping

wKioL1fSsTjysAKpAABRQ7A-3wI990.png

wKiom1fSsUywOvi4AAAczEqgcPw082.png

路由追踪:

wKioL1fSsZmj54IPAAA4Suyy7ko813.png

wKiom1fSsa_ROmk0AAAPiQJu5Ac443.png

本文主要介绍了Linux中跟网络相关的的基础知识,包括如何配置IP与路由,如何创建一个Bonding以及Network Teaming, 最后一个静态路由的实验,主要是体验下数据是如何经过下一跳,如何被路由到目的地。

止战

2016.9.9

原创文章,作者:Liansir,如若转载,请注明出处:http://www.178linux.com/45052

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-10 11:56

    总结的很完整,图文并貌,能看出来很用心。