溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Linux Bridge

發(fā)布時間:2021-09-18 09:34:50 來源:億速云 閱讀:178 作者:chen 欄目:云計算

本篇內(nèi)容介紹了“如何使用Linux Bridge”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

Linux Bridge 詳解

Linux Bridge(網(wǎng)橋)是用純軟件實現(xiàn)的虛擬交換機,有著和物理交換機相同的功能,例如二層交換,MAC地址學習等。因此我們可以把tun/tap,veth pair等設(shè)備綁定到網(wǎng)橋上,就像是把設(shè)備連接到物理交換機上一樣。此外它和veth pair、tun/tap一樣,也是一種虛擬網(wǎng)絡設(shè)備,具有虛擬設(shè)備的所有特性,例如配置IP,MAC地址等。

Linux Bridge通常是搭配KVM、docker等虛擬化技術(shù)一起使用的,用于構(gòu)建虛擬網(wǎng)絡,因為此教程不涉及虛擬化技術(shù),我們就使用前面學習過的netns來模擬虛擬設(shè)備。

如何使用Linux Bridge?

操作網(wǎng)橋有多種方式,在這里我們介紹一下通過bridge-utils來操作,由于它不是Linux系統(tǒng)自帶的工具,因此需要我們手動來安裝它。

# centos
yum install -y bridge-utils
# ubuntu
apt-get install -y bridge-utils

使用brctl help查看使用幫助

never heard of command [help]
Usage: brctl [commands]
commands:
	addbr     	<bridge>		add bridge
	delbr     	<bridge>		delete bridge
	addif     	<bridge> <device>	add interface to bridge
	delif     	<bridge> <device>	delete interface from bridge
	hairpin   	<bridge> <port> {on|off}	turn hairpin on/off
	setageing 	<bridge> <time>		set ageing time
	setbridgeprio	<bridge> <prio>		set bridge priority
	setfd     	<bridge> <time>		set bridge forward delay
	sethello  	<bridge> <time>		set hello time
	setmaxage 	<bridge> <time>		set max message age
	setpathcost	<bridge> <port> <cost>	set path cost
	setportprio	<bridge> <port> <prio>	set port priority
	show      	[ <bridge> ]		show a list of bridges
	showmacs  	<bridge>		show a list of mac addrs
	showstp   	<bridge>		show bridge stp info
	stp       	<bridge> {on|off}	turn stp on/off

常用命令如

新建一個網(wǎng)橋:

brctl addbr <bridge>

添加一個設(shè)備(例如eth0)到網(wǎng)橋:

brctl addif <bridge> eth0

顯示當前存在的網(wǎng)橋及其所連接的網(wǎng)絡端口:

brctl show

啟動網(wǎng)橋:

ip link set <bridge> up

刪除網(wǎng)橋,需要先關(guān)閉它:

ip link set <bridge> down
brctl delbr <bridge>

或者使用ip link del 命令直接刪除網(wǎng)橋

ip link del <bridge>

> 增加Linux Bridge時會自動增加一個同名虛擬網(wǎng)卡在宿主機器上,因此我們可以通過ip link命令操作這個虛擬網(wǎng)卡,實際上也就是操作網(wǎng)橋,并且只有當這個虛擬網(wǎng)卡狀態(tài)處于up的時候,網(wǎng)橋才會轉(zhuǎn)發(fā)數(shù)據(jù)。

實驗

在上一節(jié)《Linux veth pair詳解》我們使用veth pair將兩個隔離的netns連接在了一起,在現(xiàn)實世界里等同于用一根網(wǎng)線把兩臺電腦連接在了一起,但是在現(xiàn)實世界里往往很少會有人這樣使用。因為一臺設(shè)備不僅僅只需要和另一臺設(shè)備通信,它需要和很多很多的網(wǎng)絡設(shè)備進行通信,如果還使用這樣的方式,需要十分復雜的網(wǎng)絡接線,并且現(xiàn)實世界中的普通網(wǎng)絡設(shè)備也沒有那么多網(wǎng)絡接口。

那么,想要讓某一臺設(shè)備和很多網(wǎng)絡設(shè)備都可以通信需要如何去做呢?在我們的日常生活中,除了手機和電腦,最常見的網(wǎng)絡設(shè)備就是路由器了,我們的手機連上WI-FI,電腦插到路由器上,等待從路由器的DHCP服務器上獲取到IP,他們就可以相互通信了,這便是路由器的二層交換功能在工作。Linux Bridge最主要的功能就是二層交換,是對現(xiàn)實世界二層交換機的模擬,我們稍微改動一下網(wǎng)絡拓撲,如下圖:

如何使用Linux Bridge

我們建立了一個網(wǎng)橋,三個netns,三對veth pair,分別一端在netns中,另一端連接在網(wǎng)橋上,為了簡化拓撲,我去除了netns中的tap設(shè)備,將IP直接配置在veth上。

> veth設(shè)備不僅僅可以可以充當“網(wǎng)線”,同時它也可以當作虛擬網(wǎng)卡來使用。

# 添加網(wǎng)橋
brctl addbr br0
# 啟動網(wǎng)橋
ip link set br0 up

# 新增三個netns
ip netns add ns0
ip netns add ns1
ip netns add ns2

# 新增兩對veth
ip link add veth0-ns type veth peer name veth0-br
ip link add veth2-ns type veth peer name veth2-br
ip link add veth3-ns type veth peer name veth3-br

# 將veth的一端移動到netns中
ip link set veth0-ns netns ns0
ip link set veth2-ns netns ns1
ip link set veth3-ns netns ns2

# 將netns中的本地環(huán)回和veth啟動并配置IP
ip netns exec ns0 ip link set lo up
ip netns exec ns0 ip link set veth0-ns up
ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0-ns

ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set veth2-ns up
ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth2-ns

ip netns exec ns2 ip link set lo up
ip netns exec ns2 ip link set veth3-ns up
ip netns exec ns2 ip addr add 10.0.0.3/24 dev veth3-ns

# 將veth的另一端啟動并掛載到網(wǎng)橋上
ip link set veth0-br up
ip link set veth2-br up
ip link set veth3-br up
brctl addif br0 veth0-br
brctl addif br0 veth2-br
brctl addif br0 veth3-br

測試網(wǎng)絡連通性

使用ip netns exec ns0 ping 10.0.0.2在命名空間ns0中測試與ns1的10.0.0.2的網(wǎng)絡連通性

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.058 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.044 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 54ms
rtt min/avg/max/mdev = 0.032/0.046/0.058/0.011 ms

使用ip netns exec ns0 ping 10.0.0.3在命名空間ns0中測試與ns2的10.0.0.3的網(wǎng)絡連通性

PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.058 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.064 ms
^C
--- 10.0.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 81ms
rtt min/avg/max/mdev = 0.045/0.055/0.064/0.008 ms

使用ip netns exec ns1 ping 10.0.0.1在命名空間ns1中測試與ns0的10.0.0.1的網(wǎng)絡連通性

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.038 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.041 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 81ms
rtt min/avg/max/mdev = 0.031/0.039/0.046/0.005 ms

使用ip netns exec ns1 ping 10.0.0.3在命名空間ns1中測試與ns2的10.0.0.3的網(wǎng)絡連通性

PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.044 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.065 ms
^C
--- 10.0.0.3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 65ms
rtt min/avg/max/mdev = 0.044/0.057/0.065/0.007 ms

使用ip netns exec ns2 ping 10.0.0.1在命名空間ns2中測試與ns0的10.0.0.1的網(wǎng)絡連通性

PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.043 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.060 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 69ms
rtt min/avg/max/mdev = 0.032/0.047/0.060/0.013 ms

使用ip netns exec ns2 ping 10.0.0.2在命名空間ns2中測試與ns1的10.0.0.2的網(wǎng)絡連通性

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.055 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.044 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.042 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 114ms
rtt min/avg/max/mdev = 0.030/0.042/0.055/0.011 ms

可以看到我們通過網(wǎng)橋的方式把三個隔離的netns連接在了一起,通過這種方式,我們還可以很方便的添加第四個netns,第五個netns...在這里我們就不展開了。

“如何使用Linux Bridge”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

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

AI