openstack安全組ovs實現原理

2021-09-13 19:21:24 字數 3688 閱讀 9571

目標ip:10.211.202.16

目標mac:fa:16:3e:f1:2a:30

該網路對應的外部vlan id:202

分析ssh 10.211.202.16時的流表匹配過程

[root@xs-compute07 ~]# ovs-ofctl dump-flows br-bond1

cookie=0x9eedb808458e18cb, duration=11354519.037s, table=0, n_packets=682083853, n_bytes=201236764900, priority=0 actions=normal

以上規則會放行(normal)進入的流量

[root@xs-compute07 ~]# ovs-ofctl dump-flows br-int|grep 'in_port=1,'

cookie=0x15dc71101f8d4543, duration=10899451.078s, table=0, n_packets=172929377, n_bytes=22752624935, idle_age=0, hard_age=65534, priority=3,in_port=1,dl_vlan=203 actions=mod_vlan_vid:2,resubmit(,60)

cookie=0x15dc71101f8d4543, duration=9456683.601s, table=0, n_packets=221698989, n_bytes=84670387007, idle_age=0, hard_age=65534, priority=3,in_port=1,dl_vlan=202 actions=mod_vlan_vid:3,resubmit(,60)

將外部vlan轉換為內部vlan(202->3),並提交到60號表

[root@xs-compute07 ~]# ovs-ofctl dump-flows br-int|grep 'table=60'

... cookie=0x15dc71101f8d4543, duration=1665303.968s, table=60, n_packets=20426879, n_bytes=2381752266, idle_age=2, hard_age=65534, priority=90,dl_vlan=2,dl_dst=fa:16:3e:33:d3:e6 actions=load:0x9->nxm_nx_reg5,load:0x2->nxm_nx_reg6,strip_vlan,resubmit(,81)

cookie=0x15dc71101f8d4543, duration=2729.235s, table=60, n_packets=413, n_bytes=48828, idle_age=4, priority=90,dl_vlan=3,dl_dst=fa:16:3e:f1:2a:30 actions=load:0x11->nxm_nx_reg5,load:0x3->nxm_nx_reg6,strip_vlan,resubmit(,81)

cookie=0x15dc71101f8d4543, duration=11355648.212s, table=60, n_packets=25365663, n_bytes=3397813240, idle_age=0, hard_age=65534, priority=3 actions=normal

...

根據目標mac、內部vlan資訊匹配中第二條流表,對應的action為:

load:0x11->nxm_nx_reg5,load:0x3->nxm_nx_reg6,strip_vlan,resubmit(,81)

nxm_nx_reg5是指openflow協議定義的一些變數,叫暫存器,用在流表匹配過程中臨時儲存一些中間資料,供後續使用

[root@xs-compute07 ~]# ovs-ofctl dump-flows br-int|grep 'table=81'|grep -v arp|grep -v icmp|grep -v udp|grep -v ipv6|grep reg5=0x11

cookie=0x15dc71101f8d4543, duration=3946.445s, table=81, n_packets=382, n_bytes=47176, idle_age=1, priority=90,ct_state=-trk,ip,reg5=0x11 actions=ct(table=82,zone=nxm_nx_reg6[0..15])

cookie=0x15dc71101f8d4543, duration=3946.445s, table=81, n_packets=0, n_bytes=0, idle_age=4773, priority=80,ct_state=+trk,reg5=0x11 actions=resubmit(,82)

根據步驟三中暫存器內容(0x11)匹配第二條流表,對應action:

actions=ct(table=82,zone=nxm_nx_reg6[0…15])

ct(conntrack):鏈結跟蹤模組主要被用於有狀態的資料報檢測。ct([argument][,argument…])

table=number: 將資料報流水線複製為兩份。原始的資料報作為未被跟蹤的資料報在當前的動作流水線中繼續處理。被複製的資料報被傳送到鏈結跟蹤模組,這些資料報會重新回到openflow流水線中觸發後續的處理,但是這些資料報中的ct_state和其他的ct欄位被置位。

zone=value or zone=src[start…end]: 16位的上下文id,其被用於將鏈結隔離到不同的域,將疊加的網路對映到不同的區域中。zone的預設值為0。

[root@xs-compute07 ~]# ovs-ofctl dump-flows br-int|grep 'table=82'|grep reg5=0x11

cookie=0x15dc71101f8d4543, duration=4575.807s, table=82, n_packets=46, n_bytes=7698, idle_age=2517, priority=77,ct_state=+est-rel-rpl,tcp,reg5=0x11,nw_src=10.211.8.0/24,tp_dst=22 actions=output:17,resubmit(,92)

cookie=0x15dc71101f8d4543, duration=4575.807s, table=82, n_packets=2, n_bytes=148, idle_age=2525, priority=77,ct_state=+new-est,tcp,reg5=0x11,nw_src=10.211.8.0/24,tp_dst=22 actions=ct(commit,zone=nxm_nx_reg6[0..15]),output:17,resubmit(,92)

nw_src=10.211.8.0/24,tp_dst=22 為我們的安全組規則

匹配中第一條規則後執行動作:output:17,resubmit(,92)

[root@xs-compute07 ~]# ovs-ofctl show br-int

17(tapabd12273-43): addr:fe:16:3e:f1:2a:30

config: 0

state: 0

current: 10mb-fd copper

speed: 10 mbps now, 0 mbps max

正是我們要訪問的目標主機,至此匹配完安全組規則後到達主機

OpenStack 關閉安全組

openstack neutron的安全組缺省會對每個網口開啟mac ip過濾功能 防arp欺騙 不是該網口的mac ip發出的包會被宿主機丟棄。這種限制會導致vnf的上行網口 的資料報被丟棄,無法到達vrouter。關閉安全組有兩種方法 第一種是整體關閉 etc neutron plugins m...

035 OpenStack 關閉安全組

openstack neutron的安全組缺省會對每個網口開啟mac ip過濾功能 防arp欺騙 不是該網口的mac ip發出的包會被宿主機丟棄。這種限制會導致vnf的上行網口 的資料報被丟棄,無法到達vrouter。關閉安全組有兩種方法 第一種是整體關閉 etc neutron plugins m...

預設OpenStack安全組 如何更改規則?

openstack安全組讓管理員可以控制進入雲計算例項的流量。但是,有乙個問題,在預設的組是否可以更改規則?首先,沒有類似於預設openstack安全組這樣的事。每個專案都有自己的預設組,它在管理員開始乙個新專案之時就已經建立。這些安全組帶有標準規則,不允許對該專案中的例項進行訪問。預設openst...