kvm虛擬機網絡管理


一、Linux Bridge網橋管理
網絡虛擬化是虛擬化技術中最復雜的部分,也是非常重要的資源。
第一節中我們創建了一個名為br0的linux-bridge網橋,如果在此網橋上新建一台vm,如下圖:

 

VM2 的虛擬網卡 vnet1 也連接到了 br0 上。 現在 VM1 和 VM2 之間可以通信,同時 VM1 和 VM2 也都可以與外網通信。
查看網絡狀態:
brctl命令:
brctl show 查看網橋
brctl addbr br1 創建一個網橋
brctl delbr br1 刪除一個網橋


 
二、Vlan介紹
 LAN 表示 Local Area Network,本地局域網,通常使用 Hub 和 Switch 來連接 LAN 中的計算機。一般來說,兩台計算機連入同一個 Hub 或者 Switch 時,它們就在同一個 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。如下圖

 

Access 口
這些端口被打上了 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原理
KVM 虛擬化環境下實現 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 的作用是:定義了 VLAN10
brvlan10 的作用是:Bridge 上的其他網絡設備自動加入到 VLAN10 中

(1)查看核心是否提供VLAN 功能,執行
# dmesg | grep -i 802
或者檢查/proc/net/vlan目錄是否存在。
如果沒有提供VLAN 功能,/proc/net/vlan目錄是不存在的。

 

如果8021q模塊沒有載入系統,則可以通過使用modprobe模組命令載入802.1q模組,並且利用lsmod命令確認模組是否已經載入到核心內。 
# modprobe 8021q
# lsmod | grep 8021q

 

設置開機載入8021q模塊(可選)
在/etc/sysconfig/modules下增加一個8021q.modules文件,文件內容為modprobe 8021q
# vi /etc/sysconfig/modules/8021q.modules
modprobe 8021q

環境前部署
[root@zxw6 ~]# modprobe 8021q
[root@zxw6 ~]# lsmod | grep 8021q
8021q 33104 0
garp 14384 1 8021q
mrp 18542 1 8021q
[root@zxw6 ~]#

第一步:添加網卡
第二步:重啟網絡服務
root@zxw6 ~]# systemctl restart network
第三步:查看
[root@zxw6 ~]# ip a
6: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.92.128/24 brd 192.168.92.255 scope global dynamic ens37
valid_lft 1683sec preferred_lft 1683sec
inet6 fe80::d664:933f:8fd6:76bd/64 scope link
valid_lft forever preferred_lft forever
第四步:添加ens37網卡配置文件
[root@zxw6 network-scripts]# cat ifcfg-ens37
HWADDR=00:0C:29:5C:6C:A8
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
UUID=ee1f5996-5816-36f0-b561-877e9e3bc499
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
第五步:上穿 vconfig包並安裝(創建vlan的軟件包)
[root@zxw6 ~]# yum localinstall vconfig-1.9-16.el7.x86_64.rpm -y

第六步:ens37修配置文件給為靜態
[root@zxw6 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37

DEVICE="ens37"
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes

第七步:創建ens37的vlan網口:為vlan10,vlan20:ens37.10 ,ens37.20
[root@zxw6 ~]# vconfig add ens37 10
Added VLAN with VID == 10 to IF -:ens37:-
[root@zxw6 ~]# vconfig add ens37 20
Added VLAN with VID == 20 to IF -:ens37:-
第八步:查看ens37創建出來的網口
[root@zxw6 ~]# ip a
8: ens37.10@ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
9: ens37.20@ens37: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff

第九步:創建網卡的配置文件ens37
[root@zxw6 network-scripts]# vim ifcfg-ens37.10

VLAN=yes 開啟vlan
TYPE=vlan 類型
PHYSDEV=ens37 網卡
VLAN_ID=10 ID
NAME=ens37.10 名字
ONBOOT=yes 開機啟動
DEVICE=ens37.10 驅動
BRIDGE=brvlan-10 綁定
ZONE=trusted 開啟zone域
~
[root@zxw6 network-scripts]# vim ifcfg-ens37.20

VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=20
NAME=ens37.20
ONBOOT=yes
DEVICE=ens37.20
BRIDGE=brvlan-20
ZONE=trusted
~

第十步:創建網橋brvlan-10 ,brvlan-20
[root@zxw6 network-scripts]# brctl addbr brvlan-10
[root@zxw6 network-scripts]# brctl addbr brvlan-20
[root@zxw6 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c295c6c9e no ens33
brvlan-10 8000.000000000000 no
brvlan-20 8000.000000000000 no
virbr0 8000.52540005d291 yes virbr0-nic

第十一步:創建網橋的配置文件
[root@zxw6 network-scripts]# vim ifcfg-brvlan-10

TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
[root@zxw6 network-scripts]# vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes

第十二步:在網橋添加網口brvlan-10——>ens37.10
brvlan-20——>ens37.20

[root@zxw6 network-scripts]# brctl addif brvlan-10 ens37.10
[root@zxw6 network-scripts]# brctl addif brvlan-20 ens37.20
[root@zxw6 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
brvlan-10 8000.000c295c6ca8 no ens37.10
brvlan-20 8000.000c295c6ca8 no ens37.20

第十三步:重新啟動網卡
[root@zxw6 network-scripts]# systemctl restart network

第十四步:查看網卡
[root@zxw6 network-scripts]# ip a
6: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.92.128/24 brd 192.168.92.255 scope global dynamic ens37
valid_lft 934sec preferred_lft 934sec
inet6 fe80::d664:933f:8fd6:76bd/64 scope link
valid_lft forever preferred_lft forever
8: ens37.10@ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master brvlan-10 state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
9: ens37.20@ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master brvlan-20 state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
10: brvlan-10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fe5c:6ca8/64 scope link
valid_lft forever preferred_lft forever
11: brvlan-20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:5c:6c:a8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fe5c:6ca8/64 scope link
valid_lft forever preferred_lft forever
12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:5c:6c:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.126.6/24 brd 192.168.126.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe5c:6c9e/64 scope link
valid_lft forever preferred_lft forever

 

取消操作
分離vlan和虛擬網卡
[root@zxw6 ~]# brctl delif brvlan-10 ens37.10
[root@zxw6 ~]# brctl delif brvlan-20 ens37.20
[root@zxw6 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c295c6c9e no ens33
brvlan-10 8000.000000000000 no
brvlan-20 8000.000000000000 no
virbr0 8000.52540005d291 yes virbr0-nic

刪除虛擬網卡
[root@zxw6 ~]# vconfig rem ens37.10
Removed VLAN -:ens37.10:-
[root@zxw6 ~]# vconfig rem ens37.20
Removed VLAN -:ens37.20:-

刪除配置文件
[root@zxw6 network-scripts]# rm -f ifcfg-ens37.10 ifcfg-ens37.20
ifcfg-brvlan-20 ifcfg-brvlan-10

nmtui刪除brvlan


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM