neutron網(wǎng)絡(luò)目的是為OpenStack云更靈活的劃分網(wǎng)絡(luò),在多租戶的環(huán)境下提供給每個租戶獨立的網(wǎng)絡(luò)環(huán)境。
neutron混合實施了第二層的VLAN和第三層的路由服務(wù),它可為支持的網(wǎng)絡(luò)提供防火墻,負載均衡以及IPSec VPN等擴展功能。
neutron是openstack中一個重要模塊,也是比較難理解和debug的模塊之一。
一、分析經(jīng)典的三個節(jié)點的Havana的OpenStack中網(wǎng)絡(luò)

圖1:三節(jié)點opens網(wǎng)絡(luò)
分為三個網(wǎng)絡(luò):
1、External Network/API Network,這個網(wǎng)絡(luò)是鏈接外網(wǎng)的,無論是用戶調(diào)用OpenStack的API,還是創(chuàng)建出來的虛擬機要訪問外網(wǎng),或者外網(wǎng)要ssh到虛擬機,都需要通過這個網(wǎng)絡(luò)
2、Data Network,數(shù)據(jù)網(wǎng)絡(luò),虛擬機之間的數(shù)據(jù)傳輸通過這個網(wǎng)絡(luò)來進行,比如一個虛擬機要連接到另一個虛擬機,虛擬機要連接虛擬路由都是通過這個網(wǎng)絡(luò)來進行
3、Management Network,管理網(wǎng)絡(luò),OpenStack各個模塊之間的交互,連接數(shù)據(jù)庫,連接Message Queue都是通過這個網(wǎng)絡(luò)來進行。
將這三個網(wǎng)絡(luò)隔離,一方面是安全,在虛擬機里面,無論采用什么手段,干擾的都僅僅是Data
Network,都不可能訪問到我的數(shù)據(jù)庫。一方面是流量分離,Management
Network的流量不是很大的,而且一般都會比較優(yōu)雅的使用,而Data Network和External Network就需要有流量控制策略。
這個網(wǎng)絡(luò)結(jié)構(gòu)有點奇怪,除了Controlller節(jié)點是兩張網(wǎng)卡之外,其他的都多了一張網(wǎng)卡連接到External Network。這個網(wǎng)卡是用來做apt-get的,因為Compute Node按說是沒有網(wǎng)卡連接到外網(wǎng)的,為了apt-get添加了eth0;NetWork Node雖然有一個網(wǎng)卡eth1是連接外網(wǎng)的,而在neutron配置好之前,這個網(wǎng)卡通常是沒有IP的,為了apt-get也添加了eth0;有人說可以通過route規(guī)則都通過Controller連接到外網(wǎng),但是對于初學者,這樣比較容易操作。
二、neutron三個節(jié)點簡介
neutron是用來創(chuàng)建虛擬網(wǎng)絡(luò)的,所謂虛擬網(wǎng)絡(luò),就是虛擬機啟動的時候會有一個虛擬網(wǎng)卡,虛擬網(wǎng)卡會連接到虛擬switch上,虛擬交換機連接到虛擬router上,虛擬路由器最終和物理網(wǎng)卡聯(lián)通,從而虛擬網(wǎng)絡(luò)和物理網(wǎng)絡(luò)聯(lián)通起來。
neutron分成多個模塊分布在三個節(jié)點上。
Controller節(jié)點:
neutron-server,用于接受API請求創(chuàng)建網(wǎng)絡(luò),子網(wǎng),路由器等,然而創(chuàng)建的這些東西僅僅是一些數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)庫里面
?Network節(jié)點:
neutron-l3-agent,用于創(chuàng)建和管理虛擬路由器,當neutron-server將路由器的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建好,neutron-l3-agent是做具體事情的,真正的調(diào)用命令行將虛擬路由器,路由表,namespace,iptables規(guī)則全部創(chuàng)建好。
neutron-dhcp-agent,用于創(chuàng)建和管理虛擬DHCP server,每個虛擬網(wǎng)絡(luò)都會有一個DHCP server,這個DHCP server為這個虛擬網(wǎng)絡(luò)里面的虛擬機提供IP。
neutron-openvswitch-plugin-agent,這個是用于創(chuàng)建L2的switch的,在Network節(jié)點上,Router和DHCP Server都會連接到二層的switch上。
?Compute節(jié)點:
neutron-openstackvswitch-plugin-agent,這個是用于創(chuàng)建L2層switch的,在compute節(jié)點上,虛擬機的網(wǎng)卡也是連接到二層的switch上。
三、租戶網(wǎng)絡(luò)創(chuàng)建過程
當我們搭建好了OpenStack,然后創(chuàng)建好了tenant后,我們會為這個tenant創(chuàng)建一個網(wǎng)絡(luò)。

圖2:租戶網(wǎng)絡(luò)創(chuàng)建過程
結(jié)合上圖說明給一個租戶創(chuàng)建網(wǎng)絡(luò)的流程:
1、為這個Tenant創(chuàng)建一個private network,不同的private network是需要通過VLAN
tagging進行隔離的,互相之間廣播(broadcast)不能到達,這里我們我們用的是GRE模式,也需要一個類似VLANID的東西,稱為Segment
ID
2、為private network創(chuàng)建一個subnet,subnet才是真正配置IP網(wǎng)段的地方,對于私網(wǎng),我們常常用192.168.0.0/24這個網(wǎng)段
3、為這個Tenant創(chuàng)建一個Router,才能夠訪問外網(wǎng)
4、將private network連接到Router上
5、創(chuàng)建一個External Network
6、創(chuàng)建一個External
Network的Subnet,這個外網(wǎng)邏輯上代表了我們數(shù)據(jù)中心的物理網(wǎng)絡(luò),通過這個物理網(wǎng)絡(luò),我們可以訪問外網(wǎng)。因而PUBLIC_GATEWAY應(yīng)該設(shè)為數(shù)據(jù)中心里面的Gateway,PUBLCI_RANGE也應(yīng)該和數(shù)據(jù)中心的物理網(wǎng)絡(luò)的CIDR一致,否則連不通。之所以設(shè)置PUBLIC_START和PUBLIC_END,是因為在數(shù)據(jù)中心中,不可能所有的IP地址都給OpenStack使用,另外的可能搭建了VMware
Vcenter,可能有物理機,所以僅僅分配一個區(qū)間給OpenStack來用。
7、將Router連接到External Network
經(jīng)過這個流程,從虛擬網(wǎng)絡(luò)到物理網(wǎng)絡(luò)即邏輯上聯(lián)通了。
代碼流程如下:
#!/bin/bash?
TENANT_NAME="openstack"???
TENANT_NETWORK_NAME="openstack-net"???
TENANT_SUBNET_NAME="${TENANT_NETWORK_NAME}-subnet"???
TENANT_ROUTER_NAME="openstack-router"???
FIXED_RANGE="192.168.0.0/24"???
NETWORK_GATEWAY="192.168.0.1"
PUBLIC_GATEWAY="172.24.1.1"??
PUBLIC_RANGE="172.24.1.0/24"???
PUBLIC_START="172.24.1.100"?????
PUBLIC_END="172.24.1.200"?
TENANT_ID=$(keystone tenant-list | grep " $TENANT_NAME " | awk '{print $2}')
(1) TENANT_NET_ID=$(neutron net-create --tenant_id $TENANT_ID
$TENANT_NETWORK_NAME --provider:network_type gre
--provider:segmentation_id 1 | grep " id " | awk '{print $4}')
(2) TENANT_SUBNET_ID=$(neutron subnet-create --tenant_id $TENANT_ID
--ip_version 4 --name $TENANT_SUBNET_NAME $TENANT_NET_ID $FIXED_RANGE
--gateway $NETWORK_GATEWAY --dns_nameservers list=true 8.8.8.8 | grep "
id " | awk '{print $4}')
(3) ROUTER_ID=$(neutron router-create --tenant_id $TENANT_ID $TENANT_ROUTER_NAME | grep " id " | awk '{print $4}')
(4) neutron router-interface-add $ROUTER_ID $TENANT_SUBNET_ID
(5) neutron net-create public --router:external=True
(6) neutron subnet-create --ip_version 4 --gateway $PUBLIC_GATEWAY
public $PUBLIC_RANGE --allocation-pool
start=$PUBLIC_START,end=$PUBLIC_END --disable-dhcp --name public-subnet
(7) neutron router-gateway-set ${TENANT_ROUTER_NAME} public
四、GRE模式下網(wǎng)絡(luò)細節(jié)
創(chuàng)建完網(wǎng)絡(luò),如果不創(chuàng)建虛擬機,我們發(fā)現(xiàn)neutron的agent還是做了很多工作的,創(chuàng)建了很多虛擬網(wǎng)卡和switch。
-----------------------------------------------------------------------------------------------
在compute節(jié)點上:
root@ComputeNode:~#ip addr??? 【顯示所有接口的IP信息】
1:eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:49:5c:41 brd ff:ff:ff:ff:ff:ff
inet 172.24.1.124/22 brd 16.158.167.255 scope global eth0???
2: eth2: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:8e:42:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.56.124/24 brd 192.168.56.255 scope global eth2???
3:eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:68:92:ce brd ff:ff:ff:ff:ff:ff
inet 10.10.10.124/24 brd 10.10.10.255 scope global eth3???
4: br-int: mtu 1500 qdisc noqueue state UNKNOWN
link/ether d6:2a:96:12:4a:49 brd ff:ff:ff:ff:ff:ff
5:br-tun: mtu 1500 qdisc noqueue state UNKNOWN
link/ether a2:ee:75:bd:af:4a brd ff:ff:ff:ff:ff:ff
6:qvof5da998c-82: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether c2:7e:50:de:8c:c5 brd ff:ff:ff:ff:ff:ff
7:qvbf5da998c-82: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether c2:33:73:40:8f:e0 brd ff:ff:ff:ff:ff:ff
root@ComputeNode:~#ovs-vsctl show??? 【查看open vswitch網(wǎng)橋】
39f69272-17d4-42bf-9020-eecc9fe8cde6
Bridge br-int
Port patch-tun???
Interface patch-tun
type: patch
options: {peer=patch-int}
??? Port br-int???
Interface br-int
type: internal
Bridge br-tun
Portpatch-int???
Interface patch-int
type: patch
options: {peer=patch-tun}
Port"gre-1"
Interface "gre-1"
type: gre
options: {in_key=flow, local_ip="10.10.10.124", out_key=flow, remote_ip="10.10.10.121"}
Port br-tun
Interface br-tun
type: internal
ovs_version: "1.10.2"
------------------------------------------------------------------------------------------------
在Network 節(jié)點上:?
root@NetworkNode:~#ip addr??? 【顯示所有接口的IP信息】
1: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:22:8a:7a brd ff:ff:ff:ff:ff:ff
inet 172.24.1.121/22 brd 172.24.1.255 scope global eth0
2:eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f1:31:81 brd ff:ff:ff:ff:ff:ff
3: eth2: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:56:7b:8a brd ff:ff:ff:ff:ff:ff
inet 192.168.56.121/24 brd 192.168.56.255 scope global eth2
4:eth3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:26:bc:84 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.121/24 brd 10.10.10.255 scope global eth3
5:br-ex: mtu 1500 qdisc noqueue state UNKNOWN
link/ether 08:00:27:f1:31:81 brd ff:ff:ff:ff:ff:ff
inet 172.24.1.8/24 brd 172.24.1.255 scope global br-ex
6:br-int: mtu 1500 qdisc noqueue state UNKNOWN
link/ether 22:fe:f1:9b:29:4b brd ff:ff:ff:ff:ff:ff
7:br-tun: mtu 1500 qdisc noqueue state UNKNOWN
link/ether c6:ea:94:ff:23:41 brd ff:ff:ff:ff:ff:ff
root@NetworkNode:~#ip netns?【列出網(wǎng)絡(luò)命名空間】
qrouter-b2510953-1ae4-4296-a628-1680735545ac
qdhcp-96abd26b-0a2f-448b-b92c-4c98b8df120b
root@NetworkNode:~#ip netns exec qrouter-b2510953-1ae4-4296-a628-1680735545ac ip addr??? 【利用網(wǎng)絡(luò)命名空間進行操作】
8: qg-97040ca3-2c: mtu 1500 qdisc noqueue state UNKNOWN
link/ether fa:16:3e:26:57:e3 brd ff:ff:ff:ff:ff:ff
inet 172.24.1.100/24 brd 172.24.1.255 scope global qg-97040ca3-2c
11: qr-e8b97930-ac: mtu 1500 qdisc noqueue state UNKNOWN
link/ether fa:16:3e:43:ef:16 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.1/24 brd 192.168.0.255 scope global qr-e8b97930-ac
root@NetworkNode:~#ip netns exec qdhcp-96abd26b-0a2f-448b-b92c-4c98b8df120b ip addr??? 【利用網(wǎng)絡(luò)命名空間進行操作】
9: tapde5739e1-95: mtu 1500 qdisc noqueue state UNKNOWN
link/ether fa:16:3e:19:8c:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global tapde5739e1-95
inet 169.254.169.254/16 brd 169.254.255.255 scope global tapde5739e1-95
root@NetworkNode:~#ovs-vsctl show??? 【查看open vswitch的網(wǎng)絡(luò)狀態(tài)】
d5d5847e-1c9e-4770-a68c-7a695b7b95cd
Bridge br-ex
Port "qg-97040ca3-2c"
Interface "qg-97040ca3-2c"
type: internal
Port "eth1"
Interface "eth1"
Port br-ex
Interface br-ex
type: internal
Bridge br-int
Port patch-tun???
Interface patch-tun
type: patch
options: {peer=patch-int}
Port "tapde5739e1-95"
tag: 1
Interface "tapde5739e1-95"
type: internal
Port br-int
Interface br-int
type: internal
Port "qr-e8b97930-ac"
tag: 1
Interface "qr-e8b97930-ac"
type: internal
Bridge br-tun
Portpatch-int???
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "gre-2"
Interface "gre-2"
type: gre
options: {in_key=flow, local_ip="10.10.10.121", out_key=flow, remote_ip="10.10.10.124"}
Port br-tun
Interface br-tun
type: internal
ovs_version: "1.10.2"
這時如果我們在這個網(wǎng)絡(luò)里創(chuàng)建一個虛擬機,在Compute Node多了下面的網(wǎng)卡:
13:qvof5da998c-82: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether c2:7e:50:de:8c:c5 brd ff:ff:ff:ff:ff:ff
14:qvbf5da998c-82: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether c2:33:73:40:8f:e0 brd ff:ff:ff:ff:ff:ff
15:qbr591d8cc4-df: mtu 1500 qdisc noqueue state UP
link/ether f2:d9:f0:d5:48:c8 brd ff:ff:ff:ff:ff:ff
16:qvo591d8cc4-df: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether e2:58:d4:dc:b5:16 brd ff:ff:ff:ff:ff:ff
17:
qvb591d8cc4-df: mtu
1500 qdisc pfifo_fast master qbr591d8cc4-df state UP qlen 1000
link/ether f2:d9:f0:d5:48:c8 brd ff:ff:ff:ff:ff:ff
18:
tap591d8cc4-df: mtu 1500 qdisc
pfifo_fast master qbr591d8cc4-df state UNKNOWN qlen 500
link/ether fe:16:3e:6e:ba:d0 brd ff:ff:ff:ff:ff:ff
如果我們按照ovs-vsctl show的網(wǎng)卡橋接關(guān)系,便可以畫出下面的圖

圖3:GRE網(wǎng)絡(luò)
GRE網(wǎng)絡(luò)原理:
假設(shè)虛擬機VM0網(wǎng)卡eth0有網(wǎng)絡(luò)數(shù)據(jù)包向外網(wǎng)發(fā)送,那么數(shù)據(jù)會依次經(jīng)過qbrLinux Bridge設(shè)備,qvb和qvo虛擬網(wǎng)絡(luò)設(shè)備,到達OVS網(wǎng)橋br-int上,br-int將數(shù)據(jù)包attach到OVS網(wǎng)橋br-tun上,數(shù)據(jù)包再從compute節(jié)點OVS網(wǎng)橋的br-tun和network節(jié)點OVS網(wǎng)橋br-tun構(gòu)成的GRE隧道穿過,交付到Network節(jié)點的OVS網(wǎng)橋br-int上;網(wǎng)絡(luò)節(jié)點的br-int通過qr設(shè)備借助Linux命名空間qrouter連通到br-ex上的qg設(shè)備,將數(shù)據(jù)包交付到OVS網(wǎng)橋br-ex上,最后br-ex通過網(wǎng)絡(luò)節(jié)點的外部武力端口eth1把數(shù)據(jù)包傳送到外部路由器的網(wǎng)關(guān)。
五、通過例子理解GRE網(wǎng)絡(luò)
openstack為什么要創(chuàng)建這么多的虛擬網(wǎng)卡?
這些網(wǎng)卡看起來復(fù)雜,卻是各有用處,這種虛擬網(wǎng)絡(luò)拓撲,正是我們經(jīng)常使用的物理網(wǎng)絡(luò)的拓撲結(jié)構(gòu)。
下面通過一個非常容易理解的例子來逐步分析gre網(wǎng)絡(luò)。
我們先來回到一個最最熟悉不過的場景,我們的大學寢室,當時我們還買不起路由器,所以一般采取的方法如下圖所示:
寢室長的機器上弄兩張網(wǎng)卡,寢室買一個HUB,其他人的電腦都接到HUB上,寢室長的電腦的兩張網(wǎng)卡一張對外連接網(wǎng)絡(luò),一張對內(nèi)連接HUB。寢室長的電腦其實充當?shù)谋闶锹酚善鞯淖饔谩?/p>
后來條件好了,路由器也便宜了,所以很多家庭也是類似的拓撲結(jié)構(gòu),只不過將Computer1和switch合起來,變成了一個路由器,路由器也是有多個口一個連接WLAN,一個連接LAN。

圖4
現(xiàn)在我們想象一個寢室變成了一臺Hypervisor,所有的電腦都變成了虛擬機,就變成了下面的樣子:

圖5:單節(jié)點的openstack的網(wǎng)絡(luò)結(jié)構(gòu)
我們先忽略qbr和DHCP Server,以及namespace。
br-int就是寢室里的HUB,所有虛擬機都會連接到這個switch上,虛擬機之間的相互通信就是通過br-int來的。
Router就是寢室長的電腦,一邊連接在br-int上,一邊連接在對外的網(wǎng)口上,br-ex/eth0外面就是我們的物理網(wǎng)絡(luò)。
圖5其實就是單節(jié)點的openstack的網(wǎng)絡(luò)結(jié)構(gòu),雖然復(fù)雜,但是就是把我們家里的,或者寢室里面的物理機搬到一個Hypervisor上了,其結(jié)構(gòu)就不難理解了。
當然單節(jié)點的openstack不過是個測試環(huán)境,compute節(jié)點和network節(jié)點也是要分開的,如圖3,每個機器上都有了自己的br-int。
六、GRE網(wǎng)絡(luò)原理進一步理解
以下內(nèi)容可對比圖3來理解
(1)DHCP
為什么會有個DHCP Server呢,是同一個private network里的虛擬機得到IP都是通過這個DHCP Server來的,這個DHCP Server也是連接到br-int上和虛擬機進行通信的。
(2)qbr
既然qbr和br-int都是網(wǎng)橋,為什么不直接連到br-int,還要通過qbr,qvb,qvo豈不是多余,為什么會有qbr呢?這是和security group的概念有關(guān)。簡單說就是OVS網(wǎng)橋br-int沒有設(shè)置iptables規(guī)則的功能,但openstack又要提供安全組服務(wù),就借助了Linux bridge(qbr)的功能,雖然OVS的br-int和linux bridge (qbr)都是二層網(wǎng)橋,但是為了功能互補就同時出現(xiàn)了。具體了解,openstack中的security group開通哪些端口,屏蔽哪些端口是用iptables來實現(xiàn)的,然而br-int這些虛擬bridge都是openvswitch創(chuàng)建的,openstack的Kernel mode和netfilter的kernel mode不兼容。一個IP包進來要么走iptables規(guī)則進行處理,要么走openvswitch的規(guī)則進行處理,br-int上有很多openvswitch的規(guī)則,比如vlan tag等,所以iptables必須要另外建立一個linux bridge(qbr)來做,因而就有了qbr,在了解拓撲結(jié)構(gòu)的時候,可以將qbr忽略,看到VM直接連接到br-int上就可以了。
(3)namespace
為什么會有namespace呢,java的namespace是為了在不同namespace下有相同類名,openstack也想做到這一點。不同Tenant都創(chuàng)建自己的router和private
network,彼此不知道別人指定了哪些網(wǎng)段,很有可能兩個tenant都指定了192.168.0.0/24,這樣不同的private
network的路由表,DHCP Server就需要隔離,不然就亂了,因而就有了namespace。
(4)OVS一體化網(wǎng)橋br-int
每個機器上都有了自己的br-int,但是對于虛擬機和虛擬router來說,它們?nèi)匀挥X得自己連接到了一個大的L2的br-int上,通過這個br-int相互通信的,它們感受不到br-int下面的虛擬網(wǎng)卡br-tun。所以對于多節(jié)點結(jié)構(gòu),我們可以想象br-int是一個大的,橫跨所有compute和network節(jié)點的二層switch,虛擬機之間的通信以及虛擬機和Router的通信,就像在一個寢室一樣的。這是一種很重要的抽象思維,好像openstack環(huán)境中所有虛擬機都連接到了一個巨型的虛擬交換機上。
然而br-int畢竟被物理的割開了,需要有一種方式將他們串聯(lián)起來,openstack提供了多種方式,可以用GRE tunnel將不同機器的br-int連接起來,也可以通過VLAN將br-int連接起來,當然還可以使用vxlan。
這就是為什么openstack有了br-int這個bridge,但是不把所有的openvswitch的規(guī)則都在它上面實現(xiàn)。就是為了提供這種靈活性,對于虛擬機來講,看到的是一大整個br-int,不同機器的br-int可以有多種方式連接,這在br-int下面的網(wǎng)卡上面實現(xiàn)。
(5)OVS通道網(wǎng)橋br-tun
br-tun也是OVS創(chuàng)建的虛擬網(wǎng)橋,它是一個中間層,接收br-int的網(wǎng)絡(luò)數(shù)據(jù),然后在通過特定網(wǎng)絡(luò)協(xié)議與各個節(jié)點的br-tun相連構(gòu)成一個通道層。如果所有的br-int構(gòu)成的抽象層定義為虛擬二層網(wǎng)絡(luò),那么所有的br-tun構(gòu)成的抽象層邊上虛擬三層網(wǎng)絡(luò)了。
(6)網(wǎng)絡(luò)數(shù)據(jù)包隔離
如果有不同的Tenant,創(chuàng)建了不同的private network,為了在data network上對包進行隔離,創(chuàng)建private network的時候,需要指定vlanid或者segmentid。
從ovs-vsctl show我們可以看到,不同的tenant的private network上創(chuàng)建的虛擬機,連接到br-int上的時候是帶tag的,所以不同tenant的虛擬機,即便連接到同一個br-int上,因為tag不同,也是不能相互通信的。然而同一個機器上的tag的計數(shù)是僅在本機有效的,并不使用我們創(chuàng)建private network的時候指定的全局唯一的vlanid或者segmentid,一個compute節(jié)點上的br-int上的tag 1和另一臺compute節(jié)點上的br-int的tag1很可能是兩碼事。全局的vlanid和segmentid僅僅在br-int以下的虛擬網(wǎng)卡和物理網(wǎng)絡(luò)中使用,虛擬機所有能看到的東西,到br-int為止,看不到打通br-int所要使用的vlanid和segmentid。
從局部有效的taging到全局有效的vlanid或者segmentid的轉(zhuǎn)換,都是通過openvswitch的規(guī)則,在br-tun或者br-eth1上實現(xiàn)。
?本文參考下文并做修改方便自己理解: