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各自的網關

wKioL1f***rQWcUJAAAgx8Rua0g808.png

wKiom1fSsSnR2IGpAAAeGA1ysb8476.png

PC1與PC2互ping

wKioL1fSsTjysAKpAABRQ7A-3wI990.png

wKiom1fSsUywOvi4AAAczEqgcPw082.png

路由追蹤:

wKioL1fSsZmj54IPAAA4Suyy7ko813.png

wKiom1fSsa_ROmk0AAAPiQJu5Ac443.png

本文主要介紹了Linux中跟網絡相關的的基礎知識,包括如何配置IP與路由,如何創建一個Bonding以及Network Teaming, 最後一個靜態路由的實驗,主要是體驗下數據是如何經過下一跳,如何被路由到目的地。

止戰

2016.9.9


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章