溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

openstack-理解neutron服務(wù)的命名空間和安全組

發(fā)布時(shí)間:2020-06-09 19:20:39 來(lái)源:網(wǎng)絡(luò) 閱讀:1728 作者:羊草 欄目:云計(jì)算


Neutron 的設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)“網(wǎng)絡(luò)即服務(wù)”,為了達(dá)到這一目標(biāo),在設(shè)計(jì)上遵循了基于“軟件定義網(wǎng)絡(luò)”實(shí)現(xiàn)網(wǎng)絡(luò)虛擬化的原則,在實(shí)現(xiàn)上充分利用了 Linux 系統(tǒng)上的各種網(wǎng)絡(luò)相關(guān)的技術(shù)

涉及的linux網(wǎng)絡(luò)技術(shù)如下:

bridge:網(wǎng)橋,Linux中用于表示一個(gè)能連接不同網(wǎng)絡(luò)設(shè)備的虛擬設(shè)備,linux中傳統(tǒng)實(shí)現(xiàn)的網(wǎng)橋類似一個(gè)hub設(shè)備,而ovs管理的網(wǎng)橋一般類似交換機(jī)。

br-int:bridge-integration,綜合網(wǎng)橋,常用于表示實(shí)現(xiàn)主要內(nèi)部網(wǎng)絡(luò)功能的網(wǎng)橋。

br-ex:bridge-external,外部網(wǎng)橋,通常表示負(fù)責(zé)跟外部網(wǎng)絡(luò)通信的網(wǎng)橋。

GRE:General Routing Encapsulation,一種通過(guò)封裝來(lái)實(shí)現(xiàn)隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet

VETH:虛擬ethernet接口,通常以pair的方式出現(xiàn),一端發(fā)出的網(wǎng)包,會(huì)被另一端接收,可以形成兩個(gè)網(wǎng)橋之間的通道。

qvb:neutron veth, Linux Bridge-side

qvo:neutron veth, OVS-side

TAP設(shè)備:模擬一個(gè)二層的網(wǎng)絡(luò)設(shè)備,可以接受和發(fā)送二層網(wǎng)包。

TUN設(shè)備:模擬一個(gè)三層的網(wǎng)絡(luò)設(shè)備,可以接受和發(fā)送三層網(wǎng)包。

iptables:Linux 上常見的實(shí)現(xiàn)安全策略的防火墻軟件。

Vlan:虛擬 Lan,同一個(gè)物理 Lan 下用標(biāo)簽實(shí)現(xiàn)隔離,可用標(biāo)號(hào)為1-4094。

VXLAN:一套利用 UDP 協(xié)議作為底層傳輸協(xié)議的 Overlay 實(shí)現(xiàn)。一般認(rèn)為作為 VLan 技術(shù)的延伸或替代者。

namespace:用來(lái)實(shí)現(xiàn)隔離的一套機(jī)制,不同 namespace 中的資源之間彼此不可


以neutron的gre模式為例,簡(jiǎn)化示意如下

openstack-理解neutron服務(wù)的命名空間和安全組

一、命名空間


在 Linux 中,命名空間(namespace)可以被認(rèn)為是隔離的擁有單獨(dú)網(wǎng)絡(luò)棧(網(wǎng)卡、路由轉(zhuǎn)發(fā)表、iptables)的環(huán)境。網(wǎng)絡(luò)名字空間經(jīng)常用來(lái)隔離網(wǎng)絡(luò)設(shè)備和服務(wù),只有擁有同樣網(wǎng)絡(luò)名字空間的設(shè)備,才能看到彼此。

可以用ip netns list命令來(lái)查看已經(jīng)存在的名字空間。

ip net list

openstack-理解neutron服務(wù)的命名空間和安全組


qdhcp開頭的名字空間是dhcp服務(wù)器使用的,qrouter開頭的則是router服務(wù)使用的。 可以通過(guò) ip netns exec namespaceid command 來(lái)在指定的網(wǎng)絡(luò)名字空

間中執(zhí)行網(wǎng)絡(luò)命令,例如

ip netns exec qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a ip addr

openstack-理解neutron服務(wù)的命名空間和安全組

可以看到,dhcp服務(wù)的網(wǎng)絡(luò)命名空間只有有一個(gè)網(wǎng)絡(luò)接口"aa08fc00-39",它通過(guò)"tapa08fc00-39"連接到br-int上。


1.1DHCP服務(wù)

    

dhcp服務(wù)是通過(guò)dnsmasq進(jìn)程(輕量級(jí)服務(wù)器,可以提供dns、dhcp、tftp等服務(wù))來(lái)實(shí)現(xiàn)的,該進(jìn)程綁定到dhcp名字空間中的br-int的接口上??梢圆榭聪嚓P(guān)的進(jìn)程

例如查詢”qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a“的服務(wù)進(jìn)程

ps -ef |grep 3bb9ca55-d2e5-45eb-b782-e4de1f60014a

openstack-理解neutron服務(wù)的命名空間和安全組

此dhcp服務(wù),主要是給租戶私有網(wǎng)絡(luò)提供dhcp服務(wù),在openstack的dashboard顯示如下:

openstack-理解neutron服務(wù)的命名空間和安全組



2.1 路由服務(wù)

router是提供跨 subnet 的互聯(lián)功能的。比如用戶的內(nèi)部網(wǎng)絡(luò)中主機(jī)想要訪問(wèn)外部互聯(lián)網(wǎng)的地址,就需要router來(lái)轉(zhuǎn)發(fā)(因此,所有跟外部網(wǎng)絡(luò)的流量都必須經(jīng)過(guò)router)。目前router的實(shí)現(xiàn)是通過(guò)iptables進(jìn)行的。

同樣的,router服務(wù)也運(yùn)行在自己的名字空間中,可以通過(guò)如下命令查看:

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  ip addr

openstack-理解neutron服務(wù)的命名空間和安全組

可以看出,該名字空間中包括兩個(gè)網(wǎng)絡(luò)接口。

第一個(gè)接口 qr-d1a40252-8b(192.168.1.1/24)跟 br-int 上的接口相連。即任何從 br-int 來(lái)的找 192.168.1.0/24 (租戶的私有網(wǎng)段)的網(wǎng)包都會(huì)到達(dá)這個(gè)接口。

第一個(gè)接口 qg-2fe564e2-cd 連接到 br-ex 上的接口,即任何從外部來(lái)的網(wǎng)包,詢問(wèn) 172.31.208.102(默認(rèn)的靜態(tài) NAT 外部地址)或 172.31.208.110(租戶申請(qǐng)的

floating IP 地址),都會(huì)到達(dá)這個(gè)接口。

在dashboard上也可以看到

openstack-理解neutron服務(wù)的命名空間和安全組

查看該名字空間中的路由表

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  ip route

openstack-理解neutron服務(wù)的命名空間和安全組

默認(rèn)情況,以及訪問(wèn)外部網(wǎng)絡(luò)的時(shí)候,休會(huì)從 qg-xxx 接口發(fā)出,經(jīng)過(guò) br-ex 發(fā)布到

外網(wǎng)。訪問(wèn)租戶內(nèi)網(wǎng)的時(shí)候,會(huì)從 qr-xxx 接口發(fā)出,發(fā)給 br-int


查看路由的snat和dnat規(guī)則

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  iptables -t nat -S

openstack-理解neutron服務(wù)的命名空間和安全組


其中SNAT和DNAT規(guī)則完成外部 floating ip (172.31.208.110)到內(nèi)部ip(192.168.1.17) 的映射


另外有一條SNAT規(guī)則把所有其他的內(nèi)部IP出來(lái)的流量都映射到外部IP172.31.208.102。這樣即使在內(nèi)部虛擬機(jī)沒(méi)有外部浮動(dòng)IP的情況下,也可以發(fā)起對(duì)外網(wǎng)的訪

問(wèn)

openstack-理解neutron服務(wù)的命名空間和安全組





二、安全組

 Security group通過(guò)Linux IPtables來(lái)實(shí)現(xiàn),為此,在控制節(jié)點(diǎn)上引入了qbr*這樣的Linux傳統(tǒng)bridge(iptables規(guī)則目前無(wú)法加載到直接掛在到ovs的tap設(shè)備上)。 首先在控制節(jié)點(diǎn)上用neutron port-list命令列出虛擬機(jī)的端口id

neutron port-list

openstack-理解neutron服務(wù)的命名空間和安全組


其中id的前10位數(shù)字被用作虛機(jī)對(duì)外連接的qbr(同時(shí)也是tap口)的id。i或o加上前9位數(shù)字被用作安全組chain的id。

所有的規(guī)則默認(rèn)都在Compute節(jié)點(diǎn)上的filter表(默認(rèn)表)中實(shí)現(xiàn),分別來(lái)查看filter表的INPUT、OUTPUT、FORWARD三條鏈上的規(guī)則。

在Compute節(jié)點(diǎn)上,可以用 iptables --line-numbers -vnL [CHAIN] 來(lái)獲得filter表(可以指定某個(gè)鏈上的)規(guī)則。


2.1INPUT

iptables --line-numbers -vnL INPUT

openstack-理解neutron服務(wù)的命名空間和安全組

可以看到,跟安全組相關(guān)的規(guī)則被重定向到neutron-openvswi-INPUT。 查看其規(guī)則,只有一條

iptables --line-numbers -vnL neutron-openvswi-INPUT

openstack-理解neutron服務(wù)的命名空間和安全組

重定向到neutron-openvswi-ocleef425-c

iptables --line-numbers -vnL neutron-openvswi-oc1eef425-c

openstack-理解neutron服務(wù)的命名空間和安全組

如果是vm發(fā)出的dhcp請(qǐng)求,直接通過(guò),否則轉(zhuǎn)到neutron-openvswi-ocleef424-c



2.2 OUTPUT

iptables --line-numbers -vnL OUTPUT

openstack-理解neutron服務(wù)的命名空間和安全組


分別跳轉(zhuǎn)到neutron-filter-top和neutron-openvswi-OUTPUT。

iptables --line-numbers -vnL neutron-filter-top

openstack-理解neutron服務(wù)的命名空間和安全組

neutron-filter-top鏈?zhǔn)翘D(zhuǎn)到neutron-openvswi-local。


查看neutron-openvswi-OUTPUT

iptables --line-numbers -vnL neutron-openvswi-OUTPUT

openstack-理解neutron服務(wù)的命名空間和安全組

可以看到 output 鏈無(wú)規(guī)則


同時(shí)查看neutron-openvswi-local鏈規(guī)則

iptables --line-numbers -vnL neutron-openvswi-local

openstack-理解neutron服務(wù)的命名空間和安全組

可以看到neutron-oenvswi-local鏈也是無(wú)規(guī)則




2.3 FORWARD

FORWARD chain上主要實(shí)現(xiàn)安全組的功能。用戶在配置缺省安全規(guī)則時(shí)候(例如允許ssh到vm,允許ping到vm),影響該chain

iptables --line-numbers -vnL FORWARD

openstack-理解neutron服務(wù)的命名空間和安全組

同樣跳轉(zhuǎn)到neutron-filter-top,無(wú)規(guī)則。跳轉(zhuǎn)到neutron-openvswi-FORWARD。

iptables --line-numbers -vnL neutron-openvswi-FORWARD

openstack-理解neutron服務(wù)的命名空間和安全組

neutron-openvswi-FORWARD將匹配所有進(jìn)出tapcleef425端口的流量。

iptables --line-numbers -vnL neutron-openvswi-sg-chain

openstack-理解neutron服務(wù)的命名空間和安全組

如果是網(wǎng)橋從tap-cleef425端口發(fā)出到VM的流量,則跳轉(zhuǎn)到neutron-openvswi-icleef425-c;如果是從tap-cleef425端口進(jìn)入到網(wǎng)橋的(即vm發(fā)出來(lái)的)流量,則跳轉(zhuǎn)到neutron-openvswi-ocleef425。

iptables --line-numbers -vnL neutron-openvswi-ic1eef425-c

openstack-理解neutron服務(wù)的命名空間和安全組

neutron-openvswi-icleef425-c允許安全組中配置的策略(允許ssh、ping等)和dhcp reply通過(guò)。默認(rèn)的neutron-openvswi-sg-fallback將drop所有流量。

可以看到,還有一個(gè)編號(hào)為4的規(guī)則,是允許tcp協(xié)議的目的端口22,這個(gè)就是我們開放的端口組進(jìn)行ssh協(xié)議使用22端口進(jìn)行登陸

openstack-理解neutron服務(wù)的命名空間和安全組

iptables --line-numbers -vnL neutron-openvswi-oc1eef425-c

openstack-理解neutron服務(wù)的命名空間和安全組

neutron-openvswi-ocleef425-c將跳轉(zhuǎn)到neutron-openvswi-scleef425-c,允許DHCP Request和匹配VM的源IP和源MAC的流量通過(guò)。



2.4整體邏輯

整體邏輯如下所示:

openstack-理解neutron服務(wù)的命名空間和安全組



2.5 快速查找安全組規(guī)則

從前面分析可以看出,某個(gè)vm的安全組相關(guān)規(guī)則的chain的名字,跟vm的id的前9個(gè)字符有關(guān)。因此,要快速查找qbr-XXX上相關(guān)的iptables規(guī)則,可以用iptables -S列出(默認(rèn)是

filter表)所有鏈上的規(guī)則,其中含有id的鏈即為虛擬機(jī)相關(guān)的安全組規(guī)則。其中--physdev-in表示即將進(jìn)入某個(gè)網(wǎng)橋的端口,--physdev-out表示即將從某個(gè)網(wǎng)橋端口發(fā)出

iptables -S |grep tapc1eef425-c0

openstack-理解neutron服務(wù)的命名空間和安全組

可以看出,進(jìn)出tap-cleef425-c0 口的FORWARD鏈上的流量都被扔到了neutron-openvswi-sg-chain這個(gè)鏈,neutron-openvswi-sg-chain上是security group具體的實(shí)現(xiàn)(兩條

規(guī)則,訪問(wèn)虛擬機(jī)的流量扔給neutron-openvswi-icleef425-c;從虛擬機(jī)出來(lái)的扔給neutron-openvswi-ocleef4250-c。




向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI