brctl常用命令
查看當前虛擬網橋狀態
brctl show
添加一個網橋
addbr
刪除一個網橋
delbr
添加網口
addif
刪除網口
delif
VALN
LAN 表示 Local Area Network,本地局域網,通常使用 Hub (集線器)和 Switch(交換機) 來連接 LAN 中的計算機。一般來說,兩台計算機連入同一個 Hub 或者 Switch 時,它們就在同一個 LAN 中。(就是說你的網絡如果是從一個交換機之下分出來的這幾根弦線,那么大家所連的網絡是在這一個LAN里面)
一個 LAN 表示一個廣播域(路由器組播廣播域)。 其含義是:LAN 中的所有成員都會收到任意一個成員發出的廣播包。
VLAN 表示 Virtual LAN(虛擬的網絡段)。一個帶有 VLAN 功能的switch 能夠將自己的端口划分出多個 LAN。計算機發出的廣播包可以被同一個 LAN 中其他計算機收到,但位於其他 LAN 的計算機則無法收到。 簡單地說,VLAN 將一個交換機分成了多個交換機,限制了廣播的范圍,在二層將計算機隔離到不同的 VLAN 中。
比方說,有兩組機器,Group A 和 B,我們想配置成 Group A 中的機器可以相互訪問,Group B 中的機器也可以相互訪問,但是 A 和 B 中的機器無法互相訪問。 一種方法是使用兩個交換機,A 和 B 分別接到一個交換機。 另一種方法是使用一個帶 VLAN 功能的交換機,將 A 和 B 的機器分別放到不同的 VLAN 中。
VLAN 的隔離是二層上的隔離,A 和 B 無法相互訪問指的是二層廣播包(比如 arp)無法跨越 VLAN 的邊界。但在三層上(比如IP)是可以通過路由器讓 A 和 B 互通的。
現在的交換機幾乎都是支持 VLAN 的。 通常交換機的端口有兩種配置模式: Access 和 Trunk。
ccess 口
這些端口被打上了 VLAN 的標簽,表明該端口屬於哪個 VLAN。 不同 VLAN 用 VLAN ID 來區分,VLAN ID 的 范圍是 1-4096。 Access 口都是直接與計算機網卡相連的,這樣從該網卡出來的數據包流入 Access 口后就被打上了所在 VLAN 的標簽。 Access 口只能屬於一個 VLAN。
Trunk 口
假設有兩個交換機 A 和 B。 A 上有 VLAN1(紅)、VLAN2(黃)、VLAN3(藍);B 上也有 VLAN1、2、3,那如何讓 AB 上相同 VLAN 之間能夠通信呢?
辦法是將 A 和 B 連起來,而且連接 A 和 B 的端口要允許 VLAN1、2、3 三個 VLAN 的數據都能夠通過。這樣的端口就是Trunk口了。 VLAN1, 2, 3 的數據包在通過 Trunk 口到達對方交換機的過程中始終帶着自己的 VLAN 標簽。
Linux Bridge實現Vlan原理
eth0 是宿主機上的物理網卡,有一個命名為 eth0.10 的子設備與之相連。 eth0.10 就是 VLAN 設備了,其 VLAN ID 就是 VLAN 10。 eth0.10 掛在命名為 brvlan10
Linux Bridge 上,虛機 VM1 的虛擬網卡 vent0 也掛在 brvlan10 上。
這樣的配置其效果就是: 宿主機用軟件實現了一個交換機(當然是虛擬的),上面定義了一個 VLAN10。 eth0.10,brvlan10 和 vnet0 都分別接到 VLAN10 的 Access口上。而 eth0 就是一個 Trunk 口。VM1 通過 vnet0 發出來的數據包會被打上 VLAN10 的標簽。
eth0.10 的作用是:定義了 VLAN10brvlan10 的作用是:Bridge 上的其他網絡設備自動加入到 VLAN10 中增加一個 VLAN20,如下圖
這樣虛擬交換機就有兩個 VLAN 了,VM1 和 VM2 分別屬於 VLAN10 和 VLAN20。
對於新創建的虛機,只需要將其虛擬網卡放入相應的 Bridge,就能控制其所屬的 VLAN。
VLAN 設備總是以母子關系出現,母子設備之間是一對多的關系。 一個母設備(eth0)可以有多個子設備(eth0.10,eth0.20 ……),而一個子設備只有一個母設備。
操作步驟
第一步 查看當前宿主機核心是否提供VLAN功能
dmesg | grep –i 802
或者檢查/proc/net/vlan目錄是否存在,如果沒有提供VLAN 功能,/proc/net/vlan目錄是不存在的
第二步 查看8021q模塊是否載入系統
lsmod | grep 8021q
第三步 如果沒有載入請載入
modprobe 8021q
第四步 安裝VLAN配置工具---vconfig,需提前准備好安裝包vconfig-1.9-16.el7.x86_64.rpm
rpm -ivh vconfig-1.9-16.el7.x86_64.rpm rpm -qa vconfig
第五步 添加一塊網卡,使用ip a查看
第六步 使用nmtui填寫配置文件,重啟網卡
第七步 基於新添加的網卡建立vlan10,vlan20接口:ens39.10 ens39.20
vconfig add ens39 10 vconfig add ens39 20
第八步 創建剛添加vlan10和vlan20接口的配置文件
vim ifcfg-ens39.10 vim ifcfg-ens39.20 VLAN=yes VLAN=yes TYPE=vlan TYPE=vlan PHYSDEV=ens39 PHYSDEV=ens39 VLAN_ID=10 VLAN_ID=20 NAME=ens39.10 NAME=ens39.20 ONBOOT=yes ONBOOT=yes ZONE=trusted ZONE=trusted DEVICE=ens39.10 DEVICE=ens39.20 BRIDGE=brvlan-10 BRIDGE=brvlan-20
第九步 建立網橋brvlan-10和brvlan-20
brctl addbr brvlan-10 brctl addbr brvlan-20
編輯網橋配置文件
vim ifcfg-brvlan-10 TYPE=bridge BOOTPROTO=static NAME=brvlan-10 DEVICE=brvlan-10 ONBOOT=yes vim ifcfg-brvlan-20 TYPE=bridge BOOTPROTO=static NAME=brvlan-20 DEVICE=brvlan-20 ONBOOT=yes
第十一步 將網橋brvlan-10接到網口ens39.10,將網橋brvlan-20接到網口ens39.20
brctl addif brvlan-10 ens34.10 brctl addif brvlan-20 ens34.20
第十二步 重啟網絡服務
systemctl restart network
第十三步 虛機測試VLAN
先將NetworkManager服務關閉
(1)在宿主機中已經提前創建好了虛機 VM1
在 virt-manager 中將 VM1 的虛擬網卡掛到 brvlan-10 上
(2)從VM1克隆一台虛機VM2
virst-clone -o vm1 -n vm2 -f /var/lib/libvirt/images/vm2.qcow2
(3)在 virt-manager 中將 VM2 的虛擬網卡掛到 brvlan-10 上
(4)啟動VM1和VM2,並配置ip
(5)查看 Bridge,發現 brvlan10 已經連接了 vnet0 vnet1設備。
(6)當兩台虛機處於同一vlan,就可以相互ping通,處於不同vlan,就不能ping通
第十四步 如何使兩台虛機ping通外網
(1)再分別添加一塊網卡
(2)將添加的網卡掛到br0上即可
網卡配置bond(綁定)
就是說將多張網卡通過一個額外的軟件的bond驅動實現綁定,這樣,可以提高網卡的吞吐量,實現高可用和負載均衡。
(1)網卡bond(綁定),也稱作網卡捆綁。就是將兩個或者更多的物理網卡綁定成一個虛擬網卡。網卡是通過把多張網卡綁定為一個邏輯網卡,實現本地網卡的冗余,帶寬擴容和負載均衡,在應用部署中是一種常用的技術。
多網卡綁定實際上需要提供一個額外的軟件的bond驅動程序實現。通過驅動程序可以將多塊網卡屏蔽。對TCP/IP協議層只存在一個Bond網卡,在Bond程序中實現網絡流量的負載均衡,即將一個網絡請求重定位到不同的網卡上,來提高總體網絡的可用性。
(2)網卡綁定的目的:
1.提高網卡的吞吐量。
2.增強網絡的高可用,同時也能實現負載均衡。
(3)網卡配置bond(綁定)bond模式:
1、Mode=0(balance-rr) 表示負載分擔round-robin,平衡輪詢策略,具有負載平衡和容錯功能
bond的網卡MAC為當前活動的網卡的MAC地址,需要交換機設置聚合模式,將多個網卡綁定為一條鏈路。(就是說我每個網卡負載能力都是一樣的,輪着來負責請求,而且給你提供請求的網卡也是隨機的)
2、Mode=1(active-backup) 表示主備模式,具有容錯功能,只有一塊網卡是active(激活),另外一塊是備的standby(備份),這時如果交換機配的是捆綁,將不能正常工作,因為交換機往兩塊網卡發包,有一半包是丟棄的。(就是說有兩塊網卡,一個是主,一個是備,交換機的網卡做了捆綁以后,交換機會同時往這兩快網卡發數據,因為第二塊網卡是備的網卡,這個時間段它是沒有對外提供服務的,只有第一塊網卡對外提供服務,所以,交換機往這兩塊網卡發包,第二塊網卡的包就丟棄了)
3、Mode=2(balance-xor) 表示XOR Hash負載分擔(異或平衡策略),具有負載平衡和容錯功能
每個slave接口傳輸每個數據包和交換機的聚合強制不協商方式配合。(需要xmit_hash_policy)。
4、Mode=3(broadcast) 表示所有包從所有interface發出,廣播策略,具有容錯能力,這個不均衡,只有冗余機制...和交換機的聚合強制不協商方式配合。(選用此模式,多塊網卡同時對外提供服務,只不過可能第一塊負擔的多一些,第二塊負擔的少一些)(需要配置交換機)
5、Mode=4(802.3ad) 表示支持802.3ad協議(IEEE802.3ad 動態鏈接聚合) 和交換機的聚合LACP方式配合(需要xmit_hash_policy)。
6、Mode=5(balance-tlb) 適配器傳輸負載均衡,並行發送,無法並行接收(當服務器發送數據的時候,是多塊網卡同時發送,但在接收的時候,只有一塊網卡在接收數據),解決了數據發送的瓶頸。 是根據每個slave的負載情況選擇slave進行發送,接收時使用當前輪到的slave。
7、Mode=6(balance-alb) 在5的tlb基礎上增加了rlb。適配器負載均衡模式並行發送,並行接收數據包。(既可以同時發送也可以同時接收數據)
5和6不需要交換機端的設置,網卡能自動聚合。4需要支持802.3ad。0,2和3理論上需要靜態聚合方式,但實測中0可以通過mac地址欺騙的方式在交換機不設置的情況下不太均衡地進行接收。
常用的有三種:
mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。
mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。
mode=6:平衡負載模式,有自動備援,不必”Switch”支援及設定。
實現多塊網卡綁定bond
第一步 因為我們之前的實驗是做的vlan,所以要恢復ens39網卡,並添加額外的3張網卡
(1)關掉綁定的虛擬機
(2)將虛擬機的網卡綁定至br0
(3)斷開虛擬網橋,斷開虛擬網口
brctl delif brvlan-10 ens39.10 brctl delif brvlan-20 ens39.20
(4)刪除虛擬網橋和網口
vconfig rem ens39.10 vconfig rem ens39.20 brctl delbr brvlan-10 brctl delbr brvlan-20
(5)刪除網橋配置文件
rm –rf ifcfg-ens39.*
第二步 修改每個網卡的配置文件
TYPE=Ethernet BOOTPROTO=none DEVICE=每個網卡名 ONBOOT=yes MASTER=bond0 SLAVE=yes
第三步 載入bond模塊
modprobe bonding
第四步 創建bond0網卡
DEVICE=bond0 TYPE=Bond NAME=bond0 BONDING_MASTER=yes BOOTPROTO=static USERCTL=no ONBOOT=yes #IPADDR=192.168.10.10 #PREFIX=24 #GATEWAY=192.168.10.19 BONDING_OPTS="mode=6 miimon=100" BRIDGE=br1
第五步 創建橋接的網卡br1
vim ifcfg-br1 TYPE=Bridge DEVICE=br1 ONBOOT=yes IPADDR=192.168.66.2 #IPADDR1=192.168.20.1 #IPADDR2=192.168.30.1 #IPADDR3=192.168.40.1 #IPADDR4=192.168.50.1 #PREFIX3=24 #PREFIX4=24 #GATEWAY=172.16.0.1 #DNS1=172.16.254.251 #DNS2=223.5.5.5
第六步 重啟網絡服務
在bond上做VLAN
第一步 在原先bond實驗的基礎上進行實驗,先對虛擬網卡br1進行修改
TYPE=Bridge DEVICE=br1 ONBOOT=yes BOOTPROTO=static NAME=br1
第二步 創建虛擬網口br1 10 和 br1 20
vconfig add br1 10 vconfig add br1 20
第三步 為虛擬網口創建配置文件
vim ifcfg-br1.10 VLAN=yes TYPE=vlan PHYSDEV=br1 VLAN_ID=10 NAME=br1.10 ONBOOT=yes ZONE=trusted DEVICE=br1.10 BRIDGE=brvlan-10 vim ifcfg-br1.20
第四步 編輯網橋配置文件 brvlan-10 和 brvaln-20
vim ifcfg-brvlan-10 TYPE=bridge BOOTPROTO=static NAME=brvlan-10 DEVICE=brvlan-10 ONBOOT=yes vim ifcfg-brvlan-20 TYPE=bridge BOOTPROTO=static NAME=brvlan-20 DEVICE=brvlan-20 ONBOOT=yes
第五步 網口連接網橋
brctl addif brvlan-10 br1.10 brctl addif brvlan-20 br1.20
第六步 重啟網絡服務
第七步 開啟虛擬機驗證