網橋的概念
? 在生活中,橋是一種結構,用于連接兩個地方,允許行人、車輛等安全地跨越障礙物(如河流或高速公路)
? 在計算機網絡技術中,網橋是一種工作在數據鏈路層的物理或邏輯設備,可以用于連接兩個或多個局域網段。它基于MAC地址來轉發或過濾幀,從而有效地劃分廣播域。
? 在Linux中,網橋是一個邏輯設備,用于鏈接兩個或更多的網絡接口(例如,eth0, eth1),使它們在邏輯上工作如同一個接口。在虛擬化技術中,就使用到了網橋技術,鏈接物理主機和虛擬機或不同的虛擬機。
網橋工作原理
1、網絡接口的作用
? 在Linux中,udev 是負責動態管理設備節點的守護進程。當硬件設備被插入或移除時,udev 會根據 /lib/udev/rules.d/ 目錄中定義的規則來生成或移除對應的設備節點,并進行相應的命名和管理。
? 網絡接口名稱(例如eth0、ens33)是由udev的規則指定的,這只是一個邏輯名稱,用于在用戶空間中引用特定的網絡設備。這個名稱本身并不直接指向物理設備,而是與內核中的網絡設備數據結構關聯。
? 所以用戶空間的相關工具(例如ifconfig、nmcli等)可以通過這個網絡接口的名稱作為標識符來與內核的網絡協議棧交互,這個接口名稱為工具和內核提供了一個明確的引用點,以便指定它們希望配置或查詢哪個特定的網絡設備
虛擬網卡是一個邏輯上的網絡接口(vnetX),它在Linux內核中表示為網絡設備,但沒有與之對應的物理硬件。
2、網橋的成員接口
創建一個網橋設備時,這個網橋設備和虛擬網卡一樣,沒有對應的物理硬件,屬于邏輯上的設備。將物理網卡和虛擬網卡進行橋接,都會成為了橋的成員接口,此時eth0和vnetX直接通信的不再是內核,而是橋br0。但vnetX和eth0仍然可以在數據鏈路層上發送和接收幀。(不能直接向內核網絡協議棧發送消息,而是只能接收來自網絡協議棧的消息),一旦進行了橋接,vnetX和eth0就會共享相同的網絡段。從邏輯上講,它們都連接到了同一個數據鏈路層子網。
可以簡單理解為,進行橋接后,物理網卡變成了一根網線,連接外部硬件設備。
說明:兩個網絡接口(無論是物理的還是虛擬的)之間的橋接,通常需要一個橋接設備。不能直接將兩個網絡接口橋接在一起而不創建一個橋接設備。
橋接說明:
?橋接后的數據流:當物理網卡(例如,eth0)被添加到橋(例如,br0)時,它不再直接與網絡協議棧進行通信。所有的數據鏈路層通信都通過橋接口來管理和轉發。此時,橋接口充當了一個虛擬交換機的角色,負責在其成員接口之間進行數據鏈路層的幀轉發。
?IP地址分配:當橋接配置完畢后,橋接口(如br0)成為與網絡協議棧交互的主要接口,因此應當為其分配IP地址。這就解釋了為什么將eth0橋接后,其原來的IP地址會被移除。同時,橋接成員接口(如vnetX)通常不需要IP地址,因為它們不再直接與網絡協議棧交互,而是通過橋接口br0來進行數據傳輸。
?物理網卡的作用:在橋接配置中,物理網卡可以被看作是一段傳輸介質或“電纜”,連接計算機硬件與外部網絡。它確保橋接口及其成員可以與外部設備進行數據鏈路層的通信。
Linux 網橋管理
通過工具管理網橋
1、通過 brctl 創建網橋
brctl 是由 bridge-utils 軟件包提供的一個工具,可以通過這個工具來輕松創建網橋。但是隨著iproute2 套件的發展和普及,ip 命令開始提供了類似的功能,使得對網橋的管理brctl不再是首選的工具。
使用 brctl 創建的網橋在默認情況下是臨時的,重啟系統就失效了。
創建網橋:
# br0是創建的網橋接口名稱 $ sudobrctladdbrbr0
給網橋添加成員接口:
# ens33和37是物理網卡 $brctladdifens33 $brctladdifens37
啟動網橋:默認網橋是down狀態的
ifconfig br_nameup或 iplink set br_nameup
刪除網橋:
brctldelbrbr_name
移除子接口:
brctldelifbr_namedevice_name
開啟stp功能
brctlstpbr_nameon
2、通過NetworkManager 配置網橋
一般是通過 NetworkManager 提供的命令行工具nmcli來管理網橋。因為現在的Linux發行版系統中,大多數是使用NetworkManager來作為網絡管理工具,當使用nmcli進行配置時,NetworkManager會將這些配置寫入其配置文件,以便在系統重啟后仍然有效。這些配置文件通常位于/etc/NetworkManager/system-connections/目錄下。
創建網橋:
nmcli conaddtypebridgecon-namebr0ifnamebr0
添加成員接口到網橋:
# con-name 物理網卡在橋接中的連接名稱 nmcli conaddtypebridge-slavecon-namebr0-eth1ifname eth1 masterbr0 # 刪除成員接口 nmcli con delete 物理網卡的連接名稱
啟動或停止網橋:
nmcliconup br0 nmclicondown br0
刪除網橋:
nmcli condeletebr0
查看網橋的配置:
nmcli con show |grepbridge
說明:
連接名稱是 NetworkManager 的一個核心概念,實現更方便地管理各種網絡設置,而不僅僅是通過網絡接口名稱。在 NetworkManager 中,每一個網絡配置(無論是有線、橋接等)都被視為一個“連接”(connection)。這個連接有一個名字,通常被稱為“連接名稱”(connection name),名稱任意,用于后續識別和管理該特定的連接。
啟動stp功能:
nmcli con modifybr_namebridge.stpyes
3、通過ip命令管理網橋
ip命令是由iproute2 套件來提供的,提供了ip、ss等命令。使用ip命令來配置網橋也是臨時生效的哦。要使這些配置在重啟后依然生效,需要將這些命令添加到系統的啟動腳本或使用專門的網絡配置文件來持久化設置。
創建網橋;
ip linkaddnamebr0typebridge
添加成員接口:
iplinksetdev eth1 master br0
啟動或停止網橋;
# up iplinksetdev br0 up # down iplinksetdev br0 down
刪除網橋:
iplinkdelete dev br0typebridge
刪除成員接口;
iplinksetdev eth1 nomaster
查看網橋的配置:
iplinkshowtypebridge
啟動stp功能:
sudoiplinksetbr_nametypebridge stp_state 1
網橋配置IP地址
創建一個網橋并將一個或多個網絡接口添加為其成員時,成員接口上的IP地址配置通常會失效。此時,所以要為網橋接口本身配置IP地址,以便它可以參與網絡通信。
這個時候直接將網橋設備當成一個普通的網絡接口(例如eth0)進行配置就行了,記得還需要配置路由
例如;
# 網絡接口配置 ip addradd192.168.1.10/24dev br0 # 路由配置 ip routeadddefaultvia192.168.1.1dev br0
通過配置文件管理網橋
1、centos7:
前提:檢查bridge模塊是否加載,如果沒有加載需要手動進行加載并設置持久生效
lsmod | grep bridge bridge 151336 0 stp 12976 1 bridge llc 14552 2 stp,bridge # 加載模塊 modeprobe bridge # 持久生效 vim /etc
1、創建網橋配置文件
配置文件位于:創建網橋配置文件 /etc/sysconfig/network-scripts/ifcfg-br_name
vim /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=10.0.0.20 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 DNS1=180.76.76.76 DNS2=223.6.6.6 STP=on # 開啟stp功能
2、修改物理網卡接口的配置文件
例如將eth0和eth1這兩個物理接口作為網橋br0的子接口
vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" NAME="eth0" DEVICE="eth0" ONBOOT="yes" BRIDGE=br0 vim /etc/sysconfig/network-scripts/ifcfg-eth1 TYPE="Ethernet" NAME="eth1" DEVICE="eth1" ONBOOT="yes" BRIDGE=br0 # 表示當前網絡接口(如 eth0)應該被添加到名為 br0 的網橋作為一個成員接口eth0:
eth1:
3、重啟服務
centos7是默認使用NetworkManager作為網絡管理服務。通過使用傳統的 network 腳本配置的網絡,你仍然可以利用 NetworkManager 來管理和應用這些配置。
systemctl restart NetworkManager
2、ubuntu1604:
前提:
需要加載bridge模塊
sudomodeprobe bridge sudovim /etc/modules bridges
需要安裝bridge-utils這個工具包,比較舊的一些版本bridge-utils 包是必要的
sudo aptinstallbridge-utils
1、修改配置文件
sudovim /etc/network/interfaces auto lo iface lo inet loopback auto br0 iface br0 inet static address 192.168.14.108 netmask 255.255.248.0 gateway 192.168.12.1 dns-nameserver 180.76.76.76 bridge_ports ens33 ens37 bridge_stp on auto ens33 iface ens33 inet manual up iplinkset$IFACEup down iplinkset$IFACEdown auto ens37 iface ens37 inet manual up iplinkset$IFACEup down iplinkset$IFACEdown
說明:
1. 在配置文件中添加auto ens33和auto ens37目的是為了保證網絡接口開機自啟動
2. 給ens33和ens37配置 up 和down的命令是為了確保接口能正確上下線(系統啟動或重新啟動網絡服務時)
3. 物理網絡接口使用手動(manual)模式是為了確保系統知道這些接口存在,并且不會嘗試自動為它們分配IP地址
4. bridge_stp需要設置為on,特別是網橋的成員接口位于同一個交換機,不開啟會發生環路的問題;
5. $IFACE是一個特殊的變量,它自動引用當前被配置的網絡接口的名稱
2、重啟服務
sudo systemctl restart networking
3、ubuntu2004
前提:需要加載bridge模塊
# 檢查模塊是否加載 lsmod | grep bridge # 加載模塊 sudomodprobe bridge # 持久化配置 sudovim /etc/modules bridge
1、編輯配置文件
network: version:2 renderer:networkd ethernets: ens33: dhcp4:no ens34: dhcp4:no bridges: br0: interfaces:[ens33,ens34] dhcp4:yes parameters: stp:true forward-delay:4
2、配置生效
編輯了 netplan 的配置文件后,這些更改并不會立即生效。為了使這些更改生效,需要運行 sudo netplan apply。這樣,netplan 會讀取修改后的配置文件并調用底層的網絡管理工具(例如 networkd 或 NetworkManager)來應用這些配置更改。
sudo netplan apply
3、檢查是否生效
bridgelinkshowbr0
stp功能介紹
stp是Spanning Tree Protocol(生成樹協議)的縮寫,作用就是用來防止二層環路的,用在二層交換機上面。網橋就相當于是一個交換機,所以在網橋將成員接口(物理網卡)加入時,需要開啟stp協議才行。不然如果兩個物理網卡是連接在一個交換機上面,就會產生廣播風暴。導致整個局域網出現網絡不穩定的問題。
當配置一個網橋并啟用STP協議后,為了避免可能的網絡環路,每個加入到該網橋的端口(一個端口就是一個物理網卡)會經歷幾個狀態變遷,以確定網絡的拓撲結構,并確定哪些端口應該被放入轉發狀態,哪些端口應該被阻塞。首先進入阻塞狀態。從阻塞狀態轉移到轉發狀態前,端口需要經歷兩個中間狀態:
? 監聽 (Listening):在此狀態中,端口會監聽可能的沖突的橋接數據包,但不會學習MAC地址。此狀態默認持續15秒(這是Forward Delay的一半)。
? 學習 (Learning):在此狀態中,端口開始學習MAC地址,從而構建其轉發數據庫,但仍然不轉發楨。此狀態同樣持續15秒(這是Forward Delay的另一半)。
鏈接:https://www.cnblogs.com/heyongshen/p/16417712.html
-
Linux
+關注
關注
87文章
11496瀏覽量
213244 -
計算機
+關注
關注
19文章
7643瀏覽量
90478 -
網橋
+關注
關注
0文章
140瀏覽量
17320
原文標題:運維必看!Linux網橋配置參數與性能調優速查表
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論