您好,登錄后才能下訂單哦!
本篇內容介紹了“如何使用Linux Bridge”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Linux Bridge(網橋)是用純軟件實現的虛擬交換機,有著和物理交換機相同的功能,例如二層交換,MAC地址學習等。因此我們可以把tun/tap,veth pair等設備綁定到網橋上,就像是把設備連接到物理交換機上一樣。此外它和veth pair、tun/tap一樣,也是一種虛擬網絡設備,具有虛擬設備的所有特性,例如配置IP,MAC地址等。
Linux Bridge通常是搭配KVM、docker等虛擬化技術一起使用的,用于構建虛擬網絡,因為此教程不涉及虛擬化技術,我們就使用前面學習過的netns來模擬虛擬設備。
操作網橋有多種方式,在這里我們介紹一下通過bridge-utils來操作,由于它不是Linux系統自帶的工具,因此需要我們手動來安裝它。
# 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
常用命令如
新建一個網橋:
brctl addbr <bridge>
添加一個設備(例如eth0
)到網橋:
brctl addif <bridge> eth0
顯示當前存在的網橋及其所連接的網絡端口:
brctl show
啟動網橋:
ip link set <bridge> up
刪除網橋,需要先關閉它:
ip link set <bridge> down brctl delbr <bridge>
或者使用ip link del
命令直接刪除網橋
ip link del <bridge>
> 增加Linux Bridge時會自動增加一個同名虛擬網卡在宿主機器上,因此我們可以通過ip link
命令操作這個虛擬網卡,實際上也就是操作網橋,并且只有當這個虛擬網卡狀態處于up的時候,網橋才會轉發數據。
在上一節《Linux veth pair詳解》我們使用veth pair將兩個隔離的netns連接在了一起,在現實世界里等同于用一根網線把兩臺電腦連接在了一起,但是在現實世界里往往很少會有人這樣使用。因為一臺設備不僅僅只需要和另一臺設備通信,它需要和很多很多的網絡設備進行通信,如果還使用這樣的方式,需要十分復雜的網絡接線,并且現實世界中的普通網絡設備也沒有那么多網絡接口。
那么,想要讓某一臺設備和很多網絡設備都可以通信需要如何去做呢?在我們的日常生活中,除了手機和電腦,最常見的網絡設備就是路由器了,我們的手機連上WI-FI,電腦插到路由器上,等待從路由器的DHCP服務器上獲取到IP,他們就可以相互通信了,這便是路由器的二層交換功能在工作。Linux Bridge最主要的功能就是二層交換,是對現實世界二層交換機的模擬,我們稍微改動一下網絡拓撲,如下圖:
我們建立了一個網橋,三個netns,三對veth pair,分別一端在netns中,另一端連接在網橋上,為了簡化拓撲,我去除了netns中的tap設備,將IP直接配置在veth上。
> veth設備不僅僅可以可以充當“網線”,同時它也可以當作虛擬網卡來使用。
# 添加網橋 brctl addbr br0 # 啟動網橋 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中的本地環回和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的另一端啟動并掛載到網橋上 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
測試網絡連通性
使用ip netns exec ns0 ping 10.0.0.2
在命名空間ns0中測試與ns1的10.0.0.2的網絡連通性
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的網絡連通性
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的網絡連通性
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的網絡連通性
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的網絡連通性
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的網絡連通性
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
可以看到我們通過網橋的方式把三個隔離的netns連接在了一起,通過這種方式,我們還可以很方便的添加第四個netns,第五個netns...在這里我們就不展開了。
“如何使用Linux Bridge”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。