云计算底层技术-虚拟网络设备(Bridge,VLAN)
openstack底層技術-各種虛擬網絡設備一(Bridge,VLAN)?
openstack底層技術-各種虛擬網絡設備二(tun/tap,veth)
- Linux Bridge
- Bridge與netfilter
- VLAN
- VLAN設備原理及配置
- VLAN在openstack中的應用
IBM網站上有一篇高質量文章Linux 上的基礎網絡設備詳解。本文會參考文章部分內容,本系列介紹OpenStack使用的這些網絡設備包括Bridge,VLAN,tun/tap, veth,vxlan/gre。本篇先介紹Bridge和VLAN相關,其它在下一篇中介紹
OpenStack一般分為計算,存儲,網絡三部分。考慮構建一個靈活的可擴展的云網絡環境,而物理網絡架構一般是固定和難于擴展的,因此虛擬網絡將更有優勢。Linux平臺上實現了各種不同功能的虛擬網絡設備,包括Bridge,Vlan,tun/tap,veth pair,vxlan/gre,...,這些虛擬設備就像一個個積木塊一樣,被OpenStack組合用于構建虛擬網絡。 還有火熱的Docker,docker容器的隔離技術實現脫胎于Linux平臺上的namspace,以及更早的chroot。
文中會牽涉虛擬機,所以文中出現的”主機”一詞明確表示一臺物理機,”接口”指掛載到網橋上的網絡設備,環境如下:
CentOS Linux release 7.3.1611 (Core) Linux controller 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/LinuxOpenStack社區版 NewtonLinux Bridge
內核模塊bridge
[root@controller ~]# modinfo bridge filename: /lib/modules/3.10.0-514.16.1.el7.x86_64/kernel/net/bridge/bridge.koBridge是Linux上工作在內核協議棧二層的虛擬交換機,雖然是軟件實現的,但它與普通的二層物理交換機功能一樣。可以添加若干個網絡設備(em1,eth0,tap,..)到Bridge上(brctl addif)作為其接口,添加到Bridge上的設備被設置為只接受二層數據幀并且轉發所有收到的數據包到Bridge中(bridge內核模塊),在Bridge中會進行一個類似物理交換機的查MAC端口映射表,轉發,更新MAC端口映射表這樣的處理邏輯,從而數據包可以被轉發到另一個接口/丟棄/廣播/發往上層協議棧,由此Bridge實現了數據轉發的功能。如果使用tcpdump在Bridge接口上抓包,是可以抓到橋上所有接口進出的包
跟物理交換機不同的是,運行Bridge的是一個Linux主機,Linux主機本身也需要IP地址與其它設備通信。但被添加到Bridge上的網卡是不能配置IP地址的,他們工作在數據鏈路層,對路由系統不可見。不過Bridge本身可以設置IP地址,可以認為當使用brctl addbr br0新建一個br0網橋時,系統自動創建了一個同名的隱藏br0網絡設備。br0一旦設置IP地址,就意味著br0可以作為路由接口設備,參與IP層的路由選擇(可以使用route -n查看最后一列Iface)。因此只有當br0設置IP地址時,Bridge才有可能將數據包發往上層協議棧。
根據下圖來具體分析下Bridge工作過程
上圖主機有em1和em2兩塊網卡,有網橋br0。用戶空間進程有app1,app2等普通網絡應用,還有OpenVPN進程P1,以及一臺或多臺kvm虛擬機P2(kvm虛擬機實現為主機上的一個qemu-kvm進程,下文用qemu-kvm進程表示虛擬機)。此主機上使用到了多種虛擬網絡設備,在具體介紹某個虛擬網絡設備時,我們可以忽略其它網絡設備工作細節,只專注于當前網絡設備。下面來具體分析網橋br0
Bridge處理數據包流程
圖中可以看到br0有N個tap類型接口(tap0,..,tapN),tap設備名稱可能不同,例如tap45400fa0-9c或vnet*,但都是tap設備。一個”隱藏”的br0接口(可設置IP),以及物理網卡em2的一個VLAN子設備em2.100(這里簡單看作有一個網卡橋接到br0上即可,VLAN下面會講),他們都工作在鏈路層(Link Layer)。
來看數據從外部網絡(A)發往虛擬機(P2)qemu-kvm這一過程,首先數據包從em2(B)物理網卡進入,之后em2將數據包轉發給其vlan子設備em2.100,經過Bridge check(L)發現子設備em2.100屬于網橋接口設備,因此數據包不會發往協議棧上層(T),而是進入bridge代碼處理邏輯,從而數據包從em2.100接口(C)進入br0,經過Bridging decision(D)發現數據包應當從tap0(E)接口發出,此時數據包離開主機網絡協議棧(G),發往被用戶空間進程qemu-kvm打開的字符設備/dev/net/tun(N),qemu-kvm進程執行系統調用read(fd,...)從字符設備讀取數據。 這個過程中,外部網絡A發出的數據包是不會也沒必要進入主機上層協議棧的,因為A是與主機上的P2虛擬機通信,主機只是起到一個網橋轉發的作用
作為網橋的對比,如果是從網卡em1(M)進入主機的數據包,經過Bridge check(L)后,發現em1非網橋接口,則數據包會直接發往(T)協議棧IP層,從而在Routing decision環節決定數據包的去向(A –> M –> T –> K)
Bridging decision
上圖中網橋br0收到數據包后,根據數據包目的MAC的不同,Bridging decision環節(D)對數據包的處理有以下幾種:
- 包目的MAC為Bridge本身MAC地址(當br0設置有IP地址),從MAC地址這一層來看,收到發往主機自身的數據包,交給上層協議棧(D –> J)
- 廣播包,轉發到Bridge上的所有接口(br0,tap0,tap1,tap…)
- 單播&&存在于MAC端口映射表,查表直接轉發到對應接口(比如 D –> E)
- 單播&&不存在于MAC端口映射表,泛洪到Bridge連接的所有接口(br0,tap0,tap1,tap…)
- 數據包目的地址接口不是網橋接口,橋不處理,交給上層協議棧(D –> J)
Bridge與netfilter
Linux防火墻是通過netfiler這個內核框架實現,netfiler用于管理網絡數據包。不僅具有網絡地址轉換(NAT)的功能,也具備數據包內容修改、以及數據包過濾等防火墻功能。利用運作于用戶空間的應用軟件,如iptables/firewalld/ebtables等來控制netfilter。Netfilter在內核協議棧中指定了五個處理數據包的鉤子(hook),分別是PRE_ROUTING、INPUT、OUTPUT、FORWARD與POST_ROUTING,通過iptables/firewalld/ebtables等用戶層工具向這些hook點注入一些數據包處理函數,這樣當數據包經過相應的hook時,處理函數就被調用,從而實現包過濾功能。這些用戶層工具中,iptables工作在IP層,只能過濾IP數據包;ebtables工作在數據鏈路層,只能過濾以太網幀(比如更改源或目的MAC地址)
當主機上沒有Bridge存在時,從網卡進入主機的數據包會依次穿過主機內核協議棧,最后到達應用層交給某個應用程序處理。這樣我們可以很方便的使用iptables設置本主機的防火墻規則。進入數據包流向對應下圖路徑A --> L --> T --> ...
?
Bridge的出現使Linux上設置防火墻變得復雜,因為此時從物理網卡進入主機的數據包目的地可能是其上運行的一臺虛擬機。上圖是上面介紹的數據從外部網絡(A)發往虛擬機(P2)這一過程中數據包所經過的防火墻鏈(文中的兩張圖可以對比來看)。物理網卡em2子設備em2.100從外部網絡A收到二層數據包,經過bridge check后進入br0并穿越一系列防火墻鏈L --> D --> E,最終從Bridge上的另一個接口tap0發出。上圖紅色導向線可以很清楚看到整個過程中數據包是沒有進入主機內核協議棧的,因此位于主機IP層(Network Layer)的iptables根本無法過濾L --> D --> E這一路徑的數據包。那有沒有辦法使iptables能夠過濾Bridge中的數據包呢?
-
ebtables只可以簡單過濾二層以太網幀,無法過濾ipv4數據包。
-
當然也可以在虛擬機內使用iptables,但是一般不會這么玩,特別是在云平臺環境。 一個原因是如果一臺主機上運行有10臺虛擬機,那就需要分別登錄這10臺虛擬機設置其iptables規則,工作量會多很多。而且這么做意味著云平臺必須要能夠登錄用戶的虛擬機來設置iptables規則。 OpenStack中安全組也是iptables實現,我們在虛擬機內部并沒有發現有iptables規則存在。
-
解決辦法就是下文要講的bridge_netfilter
What is bridge-nf??
It is the infrastructure that enables {ip,ip6,arp}tables to see bridged IPv4, resp. IPv6, resp. ARP packets. Thanks to bridge-nf, you can use these tools to filter bridged packets, letting you make a transparant firewall. Note that bridge-nf is also referred to as bridge-netfilter and br-nf, the term bridge-nf should be preferred.
來自:Bridge-nf Frequently Asked Questions
為了解決上面提到的問題,Linux內核引入了bridge_netfilter,簡稱bridge_nf。bridge_netfilter在鏈路層Bridge代碼中插入了幾個能夠被iptables調用的鉤子函數,Bridge中數據包在經過這些鉤子函數時,iptables規則被執行(上圖中最下層Link Layer中的綠色方框即是iptables插入到鏈路層的chain,藍色方框為ebtables chain)。這就使得{ip,ip6,arp}tables能夠”看見”Bridge中的IPv4,ARP等數據包。這樣不管此數據包是發給主機本身,還是通過Bridge轉發給虛擬機,iptables都能完成過濾。
如何使用bridge_nf
從Linux 2.6.1內核開始,可以通過設置內核參數開啟bridge_netfilter機制。看名字就很容易知道具體作用
[root@controller ~]# sysctl -a |grep 'bridge-nf-' net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 ...然后在iptables中使用-m physdev引入相應模塊,以文中第一張圖上的虛擬機P2為例,它的虛擬網卡tap0橋接在br0上。我們在主機上設置如下iptables規則:丟棄從網橋br0的tap0接口進入的數據包。
#查看網橋 #brctl show bridge name bridge id STP enabled interfaces br0 8000.f8bc1212c3a0 no em1tap#操作對象是tap0 #ptables -t raw -A PREROUTING -m physdev --physdev-in tap0 -j DROP注意iptables?-m physdev操作對象是Bridge上的某個接口,因此規則的有效范圍是針對從此接口進出Bridge的數據包
還需要注意一點,這條命令是在主機上執行的,從主機角度看,主機收到從tap0接口進入的數據包,因此使用--physdev-in。但是從虛擬機P2角度來看,它發出了數據包,發給主機上的網橋br0。因此上面這條iptables命令實際的作用是丟棄虛擬機P2發出的數據包,也就是禁止虛擬機P2訪問外網。方向要分清,后面講到/tun/tap設備時會細說
上面介紹了使用iptables過濾Bridge中數據包的方法,實際中如果直接使用iptables命令顯然太繁瑣,而且如果主機上有多臺虛擬機的話,網橋接口就會變多導致容易出錯,需要依靠工具去做這些。
使用libvirt提供的virsh工具
libvirt的virsh nwfilter-*系列命令提供了設置虛擬機防火墻的功能,它其實是封裝了iptables過濾Bridge中數據包的命令(-m physdev)。它使用多個xml文件,每個xml文件中都可以定義一系列防火墻規則,然后把某個xml文件應用到某虛擬機的某張網卡(Bridge中的接口),這樣就完成了對此虛擬機的這張網卡的防火墻設置。當然可以把一個定義好防火墻規則的xml文件應用到多臺虛擬機。
#查看用于設置 # virsh --help |grep nwfilternwfilter-define define or update a network filter from an XML filenwfilter-dumpxml network filter information in XMLnwfilter-edit edit XML configuration for a network filternwfilter-list list network filtersnwfilter-undefine undefine a network filter# 定義有防火墻規則的xml文件 # virsh nwfilter-dumpxml centos6.3_filter <filter name='centos6.3_filter' chain='root'><uuid>b1fdd87c-a44c-48fb-9a9d-e30f1466b720</uuid><rule action='accept' direction='in' priority='400'><tcp dstportstart='8000' dstportend='8002'/></rule><rule action='accept' direction='in' priority='400'><tcp srcipaddr='172.16.1.0' srcipmask='24'/></rule> </filter>#查看定義的防火墻xml文件 # virsh nwfilter-listUUID Name ------------------------------------------------------------------69754f43-0325-453f-bd53-4a6e3ab5d456 centos6.3_filter#在虛擬機xml文件中應用centos6.3_filter<interface type='bridge'><mac address='f8:c9:79:ce:60:01'/><source bridge='br0'/><model type='virtio'/><filterref filter='centos6.3_filter'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface>openstack中的安全組
像openstack等很多云平臺在web控制臺中都會提供有設置虛擬機防火墻功能(安全組),可以很方便的添加應用防火墻規則到云主機
在OpenStack部署中,若使用Bridge實現虛擬網絡,其安全組功能就是依靠bridge_nf實現,計算節點上iptables才能”看見”并過濾發往其上instance的數據包,如下是OpenStack計算節點上部分iptables規則,當啟用安全組時,OpenStack會自動設置net.bridge.bridge-nf-call-iptables = 1等內核參數,不用再明確設置。?tap10f15e45-aa為該計算節點上某instance網卡(tap設備)
... #針對虛擬網卡tap10f15e45-aa的部分規則 -A neutron-filter-top -j neutron-linuxbri-local -A neutron-linuxbri-FORWARD -m physdev --physdev-out tap10f15e45-aa --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to the security group chain." -j neutron-linuxbri-sg-chain -A neutron-linuxbri-FORWARD -m physdev --physdev-in tap10f15e45-aa --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to the security group chain." -j neutron-linuxbri-sg-chain ...Bridge+netfilter內容很多,下次有時間會專門用一篇文章介紹OpenStack中的安全組實現,關鍵字?iptables+bridge+netfilter+conntrack
Linux上還有一款虛擬交換機OVS,主要區別是OVS支持vlan tag以及流表(例如openflow)等一些高級特性,Bridge只是單純二層交換機也不支持vlan tag,OVS具體介紹參考這里openstack底層技術-使用openvswitch
VLAN
上面簡單介紹過Bridge和OVS區別,要在Linux上實現一個帶VLAN功能的虛擬交換機,OVS可以通過給不同port打不同tag實現vlan功能,而Bridge需要結合VLAN設備才能實現。
這部分先介紹VLAN設備原理及配置,然后介紹VLAN在openstack中的應用
VLAN設備原理及配置
VLAN又稱虛擬網絡,其基本原理是在二層協議里插入額外的VLAN協議數據(稱為 802.1.q VLAN Tag),同時保持和傳統二層設備的兼容性。Linux里的VLAN設備是對 802.1.q 協議的一種內部軟件實現,模擬現實世界中的 802.1.q 交換機。詳細介紹參考文章開頭給出的IBM文章中”VLAN device for 802.1.q”部分,這里不再重復
下面使用VLAN結合Bridge實現文中第一張圖上的多個VLAN子設備VLAN 100, VLAN X, VLAN Y, ...以及多個網橋br0, brX, brY, ...(X Y都是小于2048的正整數)。前提是此主機上有一塊網卡設備比如em2,不管em2為物理網卡或虛擬網卡,em2所連接的交換機端口必須設置為trunk。
添加VLAN子設備VLAN 100, VLAN X, VLAN Y, ...
#cat /etc/sysconfig/network-scripts/ifcfg-em2 TYPE=Ethernet BOOTPROTO=none IPV4_FAILURE_FATAL=no NAME=em2 UUID=4f2cfd28-ba78-4f25-afa1-xxxxxxxxxxxxx DEVICE=em2 ONBOOT=yes#添加vlan子設備em2.100 #cat /etc/sysconfig/network-scripts/ifcfg-em2.100 DEVICE=em2.100 BOOTPROTO=static ONBOOT=yes VLAN=yes#可以繼續添加多個帶不同vlan tag的子設備,比如VLAN X, VLAN Y, VLAN ... #vlan子設備em2.X #cat /etc/sysconfig/network-scripts/ifcfg-em2.X #DEVICE=em2.X #BOOTPROTO=static #ONBOOT=yes #VLAN=yes#vlan子設備em2.Y #cat /etc/sysconfig/network-scripts/ifcfg-em2.Y #DEVICE=em2.Y #BOOTPROTO=static #ONBOOT=yes #VLAN=yes#...#重啟網絡 service network restart查看子設備em2.100,可以看到,其driver為VALN
#ethtool -i eth1.101 driver: 802.1Q VLAN Support version: 1.8 ...添加網橋br0, brX, brY, ...
#添加br0網橋 brctl addbr br0 #br0添加em2.100子設備 凡是橋接到br0上的數據包都會帶上tag 100 brctl addif br0 em2.100#可以繼續添加多個網橋brX, brY, ... #brctl addbr brX #凡是橋接到brX上的數據包都會帶上tag X #brctl addif brX em2.X#brctl addbr brY #brctl addif brY em2.Y#...#brctl show bridge name bridge id STP enabled interfaces br0 8000.525400315e23 no em2.100 tap0VLAN設備的作用是建立一個個帶不同vlan tag的子設備,它并不能建立多個可以交換轉發數據的接口,因此需要借助于Bridge,把VLAN建立的子設備例如em2.100橋接到網橋例如br0上,這樣凡是橋接到br0上的設備就自動加入了vlan 100子網。對比一臺帶有兩個vlan 100,X的物理交換機,這里br0網橋上所連接的接口相當于物理交換機上那些劃分到vlan 100的端口,而brX所連接的接口相當于物理交換機上那些劃分到vlan X的端口。因此Bridge加VLAN能在功能層面完整模擬現實世界里的802.1.q交換機。
參考文中第一張圖,我們從網橋br0上tap0接口(E)角度,來看下具體的數據收發流程:
- 數據從tap0接口進入,發往外部網絡A
tap0收到的數據被發送給br0(E) --> D --> br0把數據從em2.100接口發出(C) --> 母設備em2收到em2.100發來的數據(B) --> 母設備em2給數據打上100的vlan tag(因為來自em2.100) --> em2將帶有100 tag的數據發出到外部網絡(A) --> em2所連接的交換機收到數據(trunk口)
- 數據從em2網卡進入,發往tap0
em2從所連接的交換機收到tag 100的數據 --> em2發現此數據帶有tag 100,移除數據包中tag --> 不帶tag的數據發給em2.100子設備 --> br0收到從em2.100進入的數據包 --> D --> br0轉發數據到tap0
上面忽略了對于數據包是否帶tag,以及數據包所帶tag的子設備是否存在的檢查。這些屬于vlan基礎知識
VLAN在openstack中的應用
openstack中虛擬機網絡使用VLAN模式的話,就會用到VLAN設備。openstack中配置vlan+bridge模式如下
#neutron-server節點(網絡節點)配置 #cat /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] #neutron-server啟動時,加載flat,vlan兩種網絡類型驅動 type_drivers = flat,vlan #vlan模式不需要tenant_network,留空 tenant_network_types = #neutron-server啟動時加載linuxbridge和openvswitch網橋驅動 mechanism_drivers = linuxbridge,openvswitch[ml2_type_flat] #在命令行或控制臺新建flat類型網絡時需要指定的名稱,此名稱會配置映射到計算節點上某塊網卡,下面會設置 flat_networks = proext[ml2_type_vlan] #在命令行或控制臺新建vlan類型網絡時需要指定的名稱,此名稱會配置映射到計算節點上某塊網卡,下面會設置 network_vlan_ranges = provlan#重啟neutron-server服務 #使用Bridge+vlan網絡模式的nova-compute節點(計算節點)配置 #cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini [linux_bridge] #provlan名稱映射到此計算節點eth2網卡,因為使用vlan模式,eth2需要設置為trunk #proext名稱映射到此計算節點eth3網卡,我這個環境下eth3網卡為虛擬機連接外網接口 physical_interface_mappings = provlan:eth2,proext:eth3#重啟此計算節點nova-compute服務 #配置中只需要指定vlan要用的母設備eth2,后續控制臺新建帶tag的網絡時,neutron會自動建立eth2.{TAG}子設備并加入到網橋在控制臺新建一個vlan tag為1023的Provider network: subvlan-1023,使用此subvlan-1023網絡新建幾臺虛擬機,看下計算節點上網橋配置
[root@compute03 neutron]# brctl show bridge name bridge id STP enabled interfaces brq82405415-7a 8000.52540048b1a9 no eth2.1023tap10f15e45-aatapa659a214-b1 brqf5808b72-44 8000.5254001ac83d no eth3tapd3388a60-ae[root@compute03 neutron]# virsh domiflist instance-00000145 Interface Type Source Model MAC ------------------------------------------------------- tapa659a214-b1 bridge brq82405415-7a virtio fa:16:3e:bc:c9:e0虛擬機instance-00000145的網卡tapa659a214-b1橋接到brq82405415-7a。跟上面介紹的類似,橋接到brq82405415-7a上的接口設備就自動加入了vlan 1023子網,因此從instance-00000145發出的數據包會帶有tag 1023(eth2.1023的母設備eth2負責添加或移除tag)
假如在控制臺或命令行再新建一個tag為1024的子網,則網橋配置如下
[root@compute03 neutron]# brctl show bridge name bridge id STP enabled interfaces brq82405415-7a 8000.52540048b1a9 no eth2.1023tap10f15e45-aatapa659a214-b1 brq7d59440b-cc 8000.525400aabbcc no eth2.1024tap20ffafb2-1b brqf5808b72-44 8000.5254001ac83d no eth3tapd3388a60-ae[root@compute03 neutron]# virsh domiflist instance-00000147 Interface Type Source Model MAC ------------------------------------------------------- tap20ffafb2-1b bridge brq7d59440b-cc virtio fa:16:3e:bd:12:40虛擬機instance-00000147的網卡tap20ffafb2-1b橋接到brq7d59440b-cc,instance-00000147屬于vlan 1024子網,這就實現了屬于不同vlan子網的instance-00000145與instance-00000147的隔離性。他們雖然在同一臺計算節點上,但彼此不互通,除非設置為兩個VLAN可以互通
感謝Bridge和VLAN設備,他們讓openstack配置vlan網絡成了可能,BUT!, Bridge+VLAN不是唯一的選擇,openstack也支持OVS,OVS中是靠給不同instance接口打不同tag來實現instance的多vlan環境,OVS模式除了配置部分跟Bridge+VLAN不同之外,使用上并沒有什么區別,這里的設置mechanism_drivers = linuxbridge,openvswitch加載相應驅動,屏蔽掉了底層操作的差別
與Bridge中provlan,proext映射到計算節點網卡的配置不同,OVS配置文件中映射關系為vlan類型網絡provlan映射到網橋br-vlan,flat類型網絡proext映射到網橋br-ext。至于br-vlan橋接eth2網卡,br-ext橋接eth3網卡則需要預先手動配置好,來看一個使用OVS的計算節點網橋
[root@compute01 neutron]# ovs-vsctl show dd7ccaae-6a24-4d28-8577-9e5e6b5dfbd3Manager "ptcp:6640:127.0.0.1"is_connected: trueBridge br-extController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort phy-br-extInterface phy-br-exttype: patchoptions: {peer=int-br-ext}Port br-extInterface br-exttype: internalPort "eth3"Interface "eth3"Bridge br-vlanController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort br-vlanInterface br-vlantype: internalPort phy-br-vlanInterface phy-br-vlantype: patchoptions: {peer=int-br-vlan}Port "eth2"Interface "eth2"Bridge br-intController "tcp:127.0.0.1:6633"is_connected: truefail_mode: securePort int-br-extInterface int-br-exttype: patchoptions: {peer=phy-br-ext}Port br-intInterface br-inttype: internalPort int-br-vlanInterface int-br-vlantype: patchoptions: {peer=phy-br-vlan}Port "qvo7d59440b-cc"tag: 1Interface "qvo7d59440b-cc"ovs_version: "2.5.0" [root@compute01 neutron]# brctl show bridge name bridge id STP enabled interfaces qbr7d59440b-cc 8000.26d03016fcf6 no qvb7d59440b-cctap7d59440b-cc#查看虛擬機網卡 [root@compute01 neutron]# virsh domiflist instance-00000149 Interface Type Source Model MAC ------------------------------------------------------- tap7d59440b-cc bridge qbr7d59440b-cc virtio fa:16:3e:12:ba:e6instance-00000149出數據流向為tap7d59440b-cc --> qbr7d59440b-cc --> qvo7d59440b-cc(tag 1) --> br-int --> br-vlan --> eth2。qvb7d59440b-cc 與 qvo7d59440b-cc 為一對veth設備
這其中牽涉OVS流表和OVS內外部tag轉換問題,又足夠寫一篇文章來介紹了,本文暫不繼續介紹。還有一點,在使用OVS做網橋的同時又開啟安全組功能時,會多出一個Bridge網橋用于設置安全組,如上面的qbr7d59440b-cc, 因為目前iptables不支持OVS,只能在虛擬機與OVS網橋之間加進一個Bridge網橋用于設置iptables規則
其它網絡設備會在另一篇文章介紹,本文完
總結
以上是生活随笔為你收集整理的云计算底层技术-虚拟网络设备(Bridge,VLAN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暴雪团队:《暗黑破坏神4》是给玩家的一封
- 下一篇: 一步步编写操作系统21 x86虚拟机bo