在Linux虛擬化、容器化及網(wǎng)絡(luò)管理中,虛擬網(wǎng)絡(luò)設(shè)備扮演著至關(guān)重要的角色。其中,Bridge(網(wǎng)橋) 是最核心、最常用的虛擬網(wǎng)絡(luò)設(shè)備之一,它模擬了物理網(wǎng)絡(luò)中的二層交換機(jī),實(shí)現(xiàn)了數(shù)據(jù)鏈路層的連接與轉(zhuǎn)發(fā)。
1. Bridge的基本概念與工作原理
Bridge是一個(gè)工作在數(shù)據(jù)鏈路層(OSI第二層)的虛擬設(shè)備,其主要功能是將多個(gè)網(wǎng)絡(luò)接口(可以是物理網(wǎng)卡,如eth0,也可以是虛擬接口,如veth pair的一端)連接在一起,形成一個(gè)共享的廣播域。在邏輯上,它就像一個(gè)物理交換機(jī):
- 學(xué)習(xí):Bridge維護(hù)一個(gè)MAC地址表,記錄每個(gè)接口連接的設(shè)備的MAC地址。
- 轉(zhuǎn)發(fā):當(dāng)數(shù)據(jù)幀到達(dá)Bridge時(shí),它會(huì)根據(jù)目標(biāo)MAC地址查詢(xún)自己的MAC地址表,并將幀轉(zhuǎn)發(fā)到對(duì)應(yīng)的接口(如果表中沒(méi)有記錄,則進(jìn)行洪泛,轉(zhuǎn)發(fā)到除來(lái)源接口外的所有接口)。
- 過(guò)濾:在同一接口上收到和發(fā)送的幀會(huì)被丟棄,避免不必要的環(huán)路。
通過(guò)Bridge,連接到它的各個(gè)接口可以像連接在同一臺(tái)交換機(jī)上一樣相互通信。
2. Bridge的典型應(yīng)用場(chǎng)景
2.1 虛擬機(jī)和容器網(wǎng)絡(luò)
這是Bridge最經(jīng)典的應(yīng)用。例如,在KVM虛擬化中,經(jīng)常創(chuàng)建一個(gè)名為br0的Bridge,將物理網(wǎng)卡eth0綁定到br0上,同時(shí)將虛擬機(jī)的虛擬網(wǎng)卡(通過(guò)TAP設(shè)備)也連接到br0。這樣,虛擬機(jī)就能通過(guò)宿主機(jī)的物理網(wǎng)絡(luò)與外界通信,并且虛擬機(jī)之間也能直接進(jìn)行二層通信。
Docker默認(rèn)的bridge網(wǎng)絡(luò)驅(qū)動(dòng)、LXC/LXD容器也大量使用了Bridge設(shè)備來(lái)構(gòu)建容器網(wǎng)絡(luò)。
2.2 物理網(wǎng)絡(luò)分段與隔離
即使在沒(méi)有虛擬化的場(chǎng)景下,也可以用Bridge將多塊物理網(wǎng)卡捆綁成一個(gè)邏輯設(shè)備,實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)聚合或隔離。
2.3 軟件定義網(wǎng)絡(luò)(SDN)的基礎(chǔ)
許多更復(fù)雜的虛擬網(wǎng)絡(luò)方案(如Open vSwitch)在底層也借鑒或使用了Bridge的概念和功能。
3. 在Linux中操作Bridge
Linux內(nèi)核原生支持Bridge功能,可以通過(guò)bridge-utils軟件包(舊版)或更現(xiàn)代的iproute2工具集進(jìn)行管理。
使用ip命令(推薦):`bash
# 創(chuàng)建一個(gè)名為mybr0的bridge
sudo ip link add name mybr0 type bridge
啟動(dòng)bridge設(shè)備
sudo ip link set dev mybr0 up
為bridge分配IP地址(使其具有三層功能,作為網(wǎng)關(guān))
sudo ip addr add 192.168.1.1/24 dev mybr0
將物理接口eth0添加到bridge中(eth0將變成純二層端口,不再需要IP)
sudo ip link set dev eth0 master mybr0
創(chuàng)建一個(gè)veth pair,并將其一端連接到bridge
sudo ip link add veth0 type veth peer name veth1
sudo ip link set dev veth0 master mybr0
sudo ip link set dev veth0 up
sudo ip link set dev veth1 up
查看bridge信息及連接的接口
sudo bridge link show # 或 ip link show master mybr0`
關(guān)鍵點(diǎn):
- 將物理網(wǎng)卡(如eth0)加入Bridge后,該網(wǎng)卡通常不再配置IP地址,IP地址配置在Bridge設(shè)備mybr0上。此時(shí),宿主機(jī)通過(guò)Bridge這個(gè)“虛擬網(wǎng)卡”與網(wǎng)絡(luò)交互。
- Bridge本身可以配置IP地址,使其成為所在子網(wǎng)的網(wǎng)關(guān)(例如,為容器或虛擬機(jī)提供DHCP和NAT服務(wù))。
- Bridge的MAC地址通常是其包含的接口中第一個(gè)被激活的接口的MAC地址。
4. Bridge與路由、防火墻的交互
Bridge工作在二層,但它所在的主機(jī)(Linux系統(tǒng))是一個(gè)三層設(shè)備。因此,Bridge與系統(tǒng)的IP路由表和防火墻(iptables/nftables)有著緊密的交互:
- 路由:發(fā)往Bridge設(shè)備IP地址(如果配置了)的流量,或者從連接到Bridge的接口發(fā)出、目標(biāo)為外部IP的流量,都會(huì)經(jīng)過(guò)主機(jī)的路由表進(jìn)行決策。
- 防火墻:Linux的Netfilter框架為Bridge流量提供了專(zhuān)門(mén)的
br<em>netfilter內(nèi)核模塊和ebtables工具。例如,Docker和KVM會(huì)利用br</em>netfilter使Bridge流量也能經(jīng)過(guò)iptables的FORWARD鏈,從而實(shí)現(xiàn)NAT和容器間隔離。
5.
Linux Bridge是一個(gè)強(qiáng)大而靈活的二層虛擬網(wǎng)絡(luò)設(shè)備,它通過(guò)軟件完美模擬了物理交換機(jī)的功能,是構(gòu)建虛擬網(wǎng)絡(luò)、容器網(wǎng)絡(luò)以及復(fù)雜網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境的基石。理解其工作原理和操作方法,對(duì)于進(jìn)行系統(tǒng)運(yùn)維、云計(jì)算和網(wǎng)絡(luò)虛擬化相關(guān)的工作至關(guān)重要。從簡(jiǎn)單的虛擬機(jī)聯(lián)網(wǎng)到復(fù)雜的云網(wǎng)絡(luò)架構(gòu),Bridge的身影無(wú)處不在,掌握它是深入Linux網(wǎng)絡(luò)世界的必經(jīng)之路。