码迷,mamicode.com
首页 > 系统相关 > 详细

Linux网络管理基础

时间:2016-09-09 22:34:49      阅读:500      评论:0      收藏:0      [点我收藏+]

标签:路由 ip bonding network teaming

Linux网络管理基础


  • 动态路由

  • 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 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

技术分享

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

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

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

  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生效:

技术分享

  1. 查看bonding状态

技术分享

技术分享

技术分享

  1. 测试Bonding

Down掉目前bond0的活动网卡eth0

技术分享

看bond0的IP是否还在继续ping

技术分享

查看目前bond0活动的网卡

技术分享

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

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

技术分享

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

技术分享

重启网络服务后,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

技术分享

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

技术分享

打开ifcfg-team0

技术分享

打开ifcfg-team0-port0

技术分享

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

测试:

查看team0的IP及其状态:

技术分享

技术分享

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

技术分享

Down掉team0-port0

技术分享

查看活动接口

技术分享

成功切换到了eth1!

可此时,却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

实验准备:

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

  2. 路由器要关闭NetworkManager服务

  3. 关闭防火墙:iptables -F

配置:

  1. 配置IP

PC1:

技术分享

PC2:

技术分享

R1:

技术分享

R2:

技术分享

  1. 配置路由

PC1网关

技术分享

PC2网关

技术分享

R1路由

技术分享

技术分享

R2路由

技术分享

技术分享

测试:

PC1与PC2ping各自的网关

技术分享

技术分享

PC1与PC2互ping

技术分享

技术分享

路由追踪:

技术分享

技术分享

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

止战

2016.9.9


本文出自 “止战-连Sir” 博客,请务必保留此出处http://liansir.blog.51cto.com/9372908/1851237

Linux网络管理基础

标签:路由 ip bonding network teaming

原文地址:http://liansir.blog.51cto.com/9372908/1851237

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!