為什麼要給網橋分配IP地址

Auliegay發表於2020-11-07

[問題1] 為什麼要給網橋分配MAC和IP地址?

https://unix.stackexchange.com/questions/319979/why-assign-mac-and-ip-addresses-on-bridge-interface

我在Linux上建立了一個網橋介面br0, 然後給它新增了一些介面eth0,tap0等等. 我的理解是網橋介面就像帶著介面(埠)的虛擬交換機.

給網橋介面分配MAC和IP地址是什麼意思? 該介面是否充當交換機/網橋上的附加埠, 允許其他埠訪問主機?

我已經看了一些頁面在討論將IP地址分配給網橋, MAC地址的分配是自動的?

[答案1]

由於網橋是乙太網裝置, 因此需要MAC地址. Linux網橋能發起一些東西, 例如STP(生成樹協議)幀, 類似的流量需要源MAC.

網橋的IP地址不是必須的, 有許多情況下都不需要. 但是在某些情況下需要IP, 例如:

  • 網橋用作一組容器或虛擬機器的預設閘道器(因為路由發生在IP層)
  • 主網路卡是網橋的一個成員. 此時網橋是使用者與外界的連線, 此時無需將IP分配給主網路卡eth0, 而是分配給橋接裝置

如果網橋不需要IP路由, 那就不需要IP地址. 例如以下情況:

  • 網橋用來建立一個私有網路, 不與外界連線, 或通過網橋以外的裝置提供外部連線

[答案2]

網橋是軟體交換機, 每個從裝置和橋接器本身都是交換機的埠.

[答案3]

與其他網路裝置一起列出來的不代表虛擬網橋, 代表的是連線到網橋的虛擬網路卡. 如果你有一個物理裝置連線的物理網橋, 你也不會在網路裝置中看到物理網橋——但是你會看到連線到該網橋的網路卡, 既然是網路卡自然就有自己的IP地址.

為網橋裝置分配IP地址(實際上是連線到網橋的網路卡), 可以使你的主機上的裝置將網路包路由給網橋建立的子網和網橋連線的所有裝置.

儘管有iproute2之類的工具可以讓您看到網橋的虛擬網路卡, 但你也可以通過自帶的brctl程式檢視. brctl show命令會列出所有的網橋和網橋上面的介面. 下面是用iproutebrctl檢視Linux網橋和tun tap裝置的例子:

$ ip link add br0 type bridge
$ ip tuntap add dev tap0 mode tap
$ ip tuntap add dev tap1 mode tap
$ ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev br0
$ ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev tap0
$ ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev tap1
$ brctl addif br0 tap0
$ brctl addif br0 tap1
$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.2e22e593fe8c       no              tap0
                                                        tap1
$ ip addr show to 10.0.0.0/24
11: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 10.0.0.1/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
12: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    inet 10.0.0.2/24 brd 10.0.0.255 scope global tap0
       valid_lft forever preferred_lft forever
13: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    inet 10.0.0.3/24 brd 10.0.0.255 scope global tap1
       valid_lft forever preferred_lft forever

請注意, brctl show輸出的"interfaces"是依附於網橋的其它網路裝置, 介面br0在網橋建立的時候就加上去了. (答主)猜測可能是Linux系統不允許建立不連線裝置的虛擬網橋, 無裝置的網橋會被自動刪除.

[問題2] 為什麼網橋需要IP地址?

https://askubuntu.com/questions/407828/why-do-we-need-an-ip-address-for-a-bridge

網橋是第二層的網路裝置, 在物理網橋上只有用於操作和維護的IP地址. 我有點困惑, 為什麼在KVM中需要給網橋新增IP地址. 我知道VM的網路卡得到IP地址, 附加在網橋上的物理網路卡沒有IP地址. 這樣可以確保虛擬機器的IP地址對外可見. 在伺服器環境下, 我只會給虛擬機器分配靜態IP.

假設給虛擬機器分配靜態IP, 那為什麼網橋也需要IP地址呢?

[答案1]

你不需要給網橋配置IP, 同樣你也不需要給任何乙太網裝置配置IP, 無論實在虛擬機器還是物理機.

但是, 如果你的裝置/網橋沒有IP地址, 則你可能無法使用這個裝置.

例如, 如果安裝了KVM的主機有一個網橋叫做 br_vm 作為所有虛擬機器的網路介面(guest很有可能把這個介面叫做eth0), 如果br_vm在主機上沒有配置, 則虛擬機器無法通過eth0和宿主機通訊.

你問的是為什麼網橋需要IP地址, 答案是不需要. 但是, 你可能想知道哪些情況下宿主機上的網橋必須有IP, 我能想到一些例子:

  • 你想讓虛擬機器和主機通訊, 即使只是為了DHCP或者DNS
  • 你想關掉VM之前的通訊. 如果你的VM共享網橋, 那就需要仔細考慮了
  • 你想擁有主機級別的防火牆. 把所有防火牆規則聚集到主機上是明智的選擇.

順便說一下, 如果VM需要動態IP, 那就與主機是否有IP無關了(除非主機是DHCP伺服器)

[答案2]

我假設你的主機使用/etc/network/interfaces進行網路配置.

如果在網橋介面(本例是br0)中將地址指定為0.0.0.0, 你就知道答案了: 連線到網橋的VM仍然有自己的IP, 並且網路沒有中斷.

但是, 你隨後將丟失到網橋到主機的埠. 如果你在interfaces檔案中指定了IP地址, 則該地址就成為網橋上主機的IP, 正如傳統交換機的管理介面.

請記住, 網橋就像一個獨立的交換機, 但主機仍然在"管理"它, 因此新增IP只會新增一個定址的管理介面.

如果你的主機有兩個網路卡, 你可以為VM的網橋設定0.0.0.0, 然後用另一個網路卡進行管理.

相關文章