千家信息网

Linux网络管理基础

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,Linux网络管理基础动态路由BondingNetwork Teaming静态路由实验Linux的网络管理,了解基本的网络知识是基础,除此,要掌握好ifconig命令、ip命令、nmcli命令(Cen
千家信息网最后更新 2024年09月21日Linux网络管理基础

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 statusospfd 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 startStarting ospfd:                                            [  OK  ][root@centos6 ~]#service ospfd statusospfd (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:0DEVICE=eth0:0IPADDR=192.168.10.1PREFIX=24ONPARENT=yes[root@centos6 /etc/sysconfig/network-scripts]#

udev配置文件

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

/etc/udev/rules.d

安装与卸载网卡

dmesg, ethtoolmodprobe, 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=bond0BOOTPROTO=staticIPADDR=10.1.255.11PERFIX=16DNS1=114.114.114.114DNS2=8.8.8.8GATEWAY=10.1.0.1BONDING_OPTS="miimon=100 mode=1"[root@centos6 /etc/sysconfig/network-scripts]#[root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-eth0DEVICE=eth0ONBOOT=yesSLAVE=yesMASTER=bond0[root@centos6 /etc/sysconfig/network-scripts]#cat ifcfg-eth2DEVICE=eth2ONBOOT=yesSLAVE=yesMASTER=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, BridgeUUID:设备的惟一标识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 NetworkManagerSYNOPSIS   nmcli  [ OPTIONS ] OBJECT { COMMAND | help }   OBJECT := { general | networking | radio | connection | device | agent  } OPTIONS := {   -t[erse]   简洁的   -p[retty]  输出humans   -m[mode] tabular | multiline   -f[ields]  | all | common   -e[scape] yes | no   转义:to escape ':' and '\'   -n[ocheck]   -a[sk]   -w[ait]    -v[ersion]   -h[elp]   }   connection - start, stop, and manage network connectionsCOMMAND := { show | up | down | add | edit | modify | delete | reload | load }device - show and manage network interfacesCOMMAND := { 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 --actNAME                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 statusDEVICE      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 ~]#

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

  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 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/24PC2: 172.16.10.1/16R1、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


0