網路 Bridge 和 NAT 差異
之前架設 KVM 網路是用預設 NAT
架構,在連線上外面是連不到 VM的。但我都需要在預設閘道
路由表多設定 192.168.122.x/24
指定到 VM
路由上面。這個做法感覺不是很方便,然後還要特別設定路由去連,前正子剛好在找 KVM 可以直接讓電腦網路方法,剛好看到用 Bridge
可以解決我這個問題。但是 Bridge
和 NAT
他們架構圖分不是很清楚,這邊就先做個簡單整理。
一般常見虛擬網路三種模式
常見模式有三種:
- Bridge(橋接)
一般可以把它當作Hub
,設備連接就能連線。 - NAT 網路地址轉換 (Network Address Translation)
出去流量都會做SNAT
,出去IP 都會被做置換。外面 IP 是進不來的。通常會要有人做 DHCP 分配 IP,但大多 VM 都幫你做好了。
Warning其實還是有方法可以進來的,VM Host 通常有轉發功能,只要在路由表
設定 VM IP 路由區段導向 VM Host主機,簡單來說就是把安裝 VM 那台主機當作路由器,但通常不會這樣做,可能管理上也不好管理,我家一開始用這個方法,但被我懂網路朋友吐槽這個不是很優的方案。 - Host-only
主機跟 VM 相連,這個有點跟之前做veth pair
差不多原理。每建一台 VM 用這個模式,你電腦都會多一個網路卡。
這邊不打算深入介紹,簡單說明我了解部分。建議可以看虛擬機的網路模式(Host-only,Bridged,NAT) - HackMD。 備份圖
Bridge
和NAT
就了解了是用什麼原理讓網路連線。Host-only
每次建立完,怎麼控制台會多個介面卡??一直都不是很懂,現在都了解了。三種模式差異
其實之前介紹就能看出差異,從虛擬機的網路模式(Host-only,Bridged,NAT) - HackMD這篇裡面可以看到簡單理解這三種模式差異。
Bridged NAT Host-only 是否可以連到外網 可以 可以 不行 主機與虛擬機是否在同一網段 相同 不同 不同 IP設置 手動 DHCP自動配發 DHCP自動配發
我一開始看這篇 bridge 和 NAT 不知差異在哪邊。
|
|
上面圖我跟你說這是Bridge
圖。
本來我還覺得我可以在 br0
上面的 eth0
加上IP,再設定 iptable
做 NAT 大錯特錯想法。NAT
圖是不是長這樣的
下面有NAT 圖樣子
之前說 bridge 不能設定 IP,但是br0
可以設定 IP,有點推翻之前說的。雖然我沒有爬到原因,但我猜測 host 看到的 br0
是指 host 的孔,我原本以為還要自己建 veth去跟 br0 做連接,看來是不用的。
我目前在想 br0
能設定 IP,其實這算是 bridge
的 wlan孔?假如是這個概念,那所有bridge
設定 gateway到那邊去也是很合理,然後送出封包照 host 路由表做派送。
我後來又仔細想想 bridge
孔,br0
應該是指 Bridge 網卡,後來爬到一篇文章,說網路恐有設定 IP 的話,會跟Newwork Protocol Stack
最連結。
當然這篇 裡面也有 NAT
架構圖。這邊我們看 br0
設定一個 IP,eth0
不是接到br
上面,這邊看 VM 和 docker0 橋接器都是這樣做的。
下面這個就是 NAT 圖示。
|
|
網路孔不是每個孔都能設定 IP
之前跟我朋友討論網路東西,有時會提醒網路設備不是每個孔都能設定 IP,都是 bridge
也是一樣道理,所以 eth0
放在 bridge 不能加上 IP。WAN
孔才能加上 IP。LAN
孔沒辦法設定 IP。
AI問答區
公司有買免費 ChatGPT,免費白不問?😆但能確定我思考是一致的。
Linux bridge和 Nat差異?
Linux bridge(Linux 橋接)和 NAT(Network Address Translation,網絡地址轉換)是在 Linux 系統中常見的兩種網絡技術,它們有以下主要差異:
-
功能:
- Linux bridge:Linux 橋接可以實現局域網(LAN)上的兩個或多個網絡介面卡(NIC)之間的互聯。它將它們視為一個虛擬的交換機,並轉發數據包在這些網絡介面之間。
- NAT:NAT 是一種網絡地址轉換技術,常用於連接兩個網絡,將源 IP 地址和/或端口號轉換為目標 IP 地址和/或端口號。這通常用於在私有網絡中共享一個公有 IP 地址,或在防火牆上實現基於 IP 地址的安全限制。
-
網絡層:
- Linux bridge:Linux 橋接工作在 OSI 模型的第二層(數據鏈路層),基於 MAC 地址來轉發數據包。
- NAT:NAT 工作在 OSI 模型的第三層(網絡層),基於 IP 地址和端口號進行地址轉換。
-
網絡拓撲:
- Linux bridge:Linux 橋接可以在同一個 LAN 上互聯多個網絡介面,形成一個擴展的局域網。它可以實現雙向通信,並允許數據包在 LAN 中進行轉發。
- NAT:NAT 主要用於連接兩個網絡,通常是在連接內部私有網絡和外部公有網絡之間進行轉換。它只在數據包從內部網絡進入外部網絡或相反方向時進行轉換。
總結來說,Linux bridge 是一種用於虛擬交換機的技術,可以在同一個 LAN 上互聯不同的網絡介面;而 NAT 是一種將 IP 地址和端口號進行轉換的技術,常用於連接兩個網絡,允許內部網絡共享一個公有 IP 地址。這些技術可以根據需要在 Linux 系統中彼此組合使用,以實現特定的網絡配置。
所以是bridge上面的eth都不能設定IP?
在 Linux 橋接上的網絡介面(如 eth0)通常不需要配置 IP 地址,因為橋接是運作在第二層(數據鏈路層),基於 MAC 地址轉發數據包,而不涉及 IP 層。
對於 Linux 橋接,IP 地址通常是配置在橋接器(如 br0)上的。橋接器是一個虛擬網絡介面,用於管理和連接不同的網絡介面。你可以在橋接器上配置 IP 地址,作為它與其他網絡的入口。當數據包在橋接器和其他網絡介面之間轉發時,IP 層的訊息是根據目的地 MAC 地址來查找的,而不是根據 IP 地址。
因此,通常情況下,在 Linux 橋接上的網絡介面不需要配置 IP 地址。只需要在橋接器上配置 IP 地址,以使它能夠作為網絡的連接點。需要注意的是,具體的設置可能因系統和網絡配置而有所不同,因此在進行設定時,最好參考相關的文檔或參考指南。
可以在linux橋接器設定ip嗎?
感謝你的指正,我之前的回答有一點錯誤。在 Linux 橋接器(如 br0)上是可以配置 IP 地址的。
在 Linux 系統中,你可以在橋接器上配置 IP 地址,以便它可以作為網絡的連接點。這對於某些場景非常有用,例如當你希望橋接器本身可以通過網絡來訪問,或者需要在橋接器上運行一些具有 IP 依賴性的服務。
要在 Linux 橋接器上配置 IP 地址,你可以通過以下步驟進行:
-
停止橋接器:
1
sudo ip link set dev br0 down
-
配置 IP 地址:
1
sudo ip addr add <IP_address>/<subnet_mask> dev br0
例如:
1
sudo ip addr add 192.168.1.10/24 dev br0
這將在橋接器上配置 IP 地址為 192.168.1.10,子網掩碼為 24(即 255.255.255.0)。
-
啟動橋接器:
1
sudo ip link set dev br0 up
現在,你已經在 Linux 橋接器上成功配置了 IP 地址。你可以使用 ip addr show
或 ifconfig
命令來檢查 IP 配置是否成功。
請注意,在配置 IP 地址時,請確保 IP 地址在你的網絡環境中是唯一的,並遵循正確的子網掩碼。同時,確保橋接器正確地連接到相應的網絡介面,例如 eth0。
希望這能幫助到你,如果你還有其他問題,請隨時提問。
Bridge 相關文章
下次實作 Bridge 文章參考用。
- (239) qemu/kvm bridge and NAT networking - YouTube
- Linux 虛擬網絡設備之 bridge - 閱坊
- Linux Bridge 详解 - 知乎
- Linux – Bridge – Benjr.tw
- Linux Bridge | 深入架构原理与落地实践
- 聊聊 Linux 上软件实现的“交换机” - Bridge!_51CTO博客_Linux 交换机
- Linux Network Namespace and five of its use cases | by Ramesh Sahoo | Medium
彩蛋
- [Linux] 內核虛擬Bridge, veth原理與實作 | Hands on Linux Kernel: bridge, veth | 黃大仙的雲端修行室
- An introduction to Linux bridging commands and features | Red Hat Developer
- isno/theByteBook: 深入讲解网络、应用网络、ServiceMesh、容器等云原生相关技术。别光Star,好多错误的,给我提PR啊