linux網橋的簡單理解和配置


linux網橋的簡單理解和配置

Linux網橋是linux虛擬網絡設備之一。網上很多分析linux網橋的文章,例如代碼層面的分析。這里不牽扯復雜的分析和配置,主要是面向虛擬機鏈接一個用途,小白我的備忘。

1.Linux的網橋是什么

最初的網橋就是一個兩口的交換機,經過網橋的數據包會原封不動的轉發。與hub不同的是網橋會檢查mac地址,不在當前端口的mac地址就過濾掉了。而hub是工作在物理層的設備,一個口收到的信號原封不動的發送到所有的接口。早期的交換機,可以看成是很多網橋的集成。簡單來說,橋接就是把一台機器上的若干個網絡接口“連接”起來。其結果是,其中一個網口收到的報文會被復制給其他網口並發送出去。以使得網口之間的報文能夠互相轉發。


現在的Linux 網橋可以看做是(三層的)虛擬交換機,功能和物理交換機一樣,最常用的功能是鏈接虛擬機和容器--為虛擬機和容器提供一個虛擬交換機。

 

創建一個bridge后(br0),可以把其他的網絡設備(比如eth0attachbr0上,eth0稱作br0的從設備。需要注意的是,eth0 attachbr0上,不是對應的將eth0插接到“交換機”br0上,而是eth0編程了br0的一個端口(網線插口)。那什么什么時候才是插入網線呢?

 

通常的網橋是二層設備,不需要有IP地址。但是linux網橋是虛擬網絡設備,是有ipmac的(br設備的MAC地址是它所有從設備中最小的MAC地址)。從設備(eth0)被attachbr上之后,它的IPMAC都不再可用了(退化為一個端口了)且它們被設置為接收任何包(工作在鏈路層,且是混雜模式,不需要ip),最終由bridge設備來決定數據包的去向:接收到本機、轉發、丟棄

 

2.生成樹

一般在講解交換機的文章里都會提到生成樹協議。網橋“類似”交換機,也會有這個問題。簡單來說,在復雜且有冗余的網絡配置中,可能會形成網絡風暴。生成樹協議就是為了避免這個問題。簡單的網橋或者交換機應用(例如只有一個交換機)沒這個問題,但是啟用生成樹也沒什么不好。

關於生成樹的具體內容見:https://www.cnblogs.com/morphling/p/3458546.html

 

3.主要作用:連接虛擬機

目前,虛擬網橋最主要的作用是為虛擬機提供一種網絡鏈接的方式。

 

 

 

如圖所示,是最常用的鏈接方式。主機上創建tap設備(理解為虛擬網卡),bridge1設備attach eth0tap0tap1,此時bridge1可以視作交換機,eth0\tap0\tap1都是這個交換機的網口。虛擬機通過tap網口鏈接,虛擬機和主機、外部局域網主機是同一個局域網內的機器,可以設置成同一個網段的IP

這里比較別扭的就是主機的eth0,退化成網口,bridge1接替它成為主機的上網設備。

linux的網橋實際上是個新設備,和網橋、交換機、三層交換機都是有所不同的。

 

4.配置

 

配置網橋可用工具挺多的,可以看后面的引用文章。命令工具個人建議iproute2。命令配置的重啟后就不起作用了。要保存修改,需要修改配置文件,最好是使用netplan

 

 

先安裝bridge-utils,bridge-utils也是iproute2的一部分

apt-get install bridge-utils

 

以下操作都需要管理權限。

 

Create a new bridge and change its state to up:

 

# ip link add name br1 type bridge

# ip link set br1 up

 

brctl show命令查看當前橋設備的狀態

 

 

To add an interface (e.g. eth0) into the bridge, its state must be up:

 

# ip link set eth0 up

 

Adding the interface into the bridge is done by setting its master to br1:

# ip link set eth0 master br1

 

這個時候就不能上網了。

 

To show the existing bridges and associated interfaces, use the bridge utility (also part of iproute2). See bridge(8) for details.

 通過bridge link命令可以看到br0上連接了哪些設備

 

# bridge link

 

如果查看br1mac,會發現就是eth0mac

 

然后給網橋設置ip

# ip addr add dev br1 192.168.31.66/24

 

設置ip可以ping網關了,但是不能ping 8.8.8.8這樣的公網ip

 

# route -n  或者 ip route show 都會發現這個網橋的網關沒設置。

 

添加一條默認路由:

#route add default gw 192.168.31.1 dev br1

注意 dev 參數是必須設置的。強制路由關聯到指定的設備接口,否則的話內核會其自身的相應規則決定選用那個設備接口。

linux 路由等參考:

https://ivanzz1001.github.io/records/post/linuxops/2018/11/14/linux-route

route是老舊的net-tools的命令,iproute2的路由操作是ip route系列,這里還是用用的route

 

也可以讓網橋自己獲得ip

dhclient br1    #將br0的網絡配置好

 

This is how to remove an interface from a bridge:

# ip link set eth0 nomaster

 

The interface will still be up, so you may also want to bring it down:

# ip link set eth0 down

 

To delete a bridge issue the following command:

# ip link delete br1 type bridge

This will automatically remove all interfaces from the bridge. The slave interfaces will still be up, though, so you may also want to bring them down after.

 

參考

 

https://segmentfault.com/a/1190000009491002

https://blog.csdn.net/CloudXli/article/details/78877253

https://www.cnblogs.com/clpszpp/p/linux_bridge.html

https://www.cnblogs.com/morphling/p/3458546.html

https://www.tecmint.com/create-network-bridge-in-ubuntu/

https://www.ubuntupit.com/how-to-configure-and-use-network-bridge-in-ubuntu-linux/

https://blog.51cto.com/13465487/2374960

https://wiki.archlinux.org/index.php/Network_bridge


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM