4,638 瀏覽數

Linux – Bridge

老實說是用過虛擬化-Xen 之後才發現有 Linux 下網路的模式有一個東西叫做 Bridge mode,有點像將多個 NIC Adapter ports 透過一個虛擬出來的 Bridge(Switch) 全部串在一起,再透過一個虛擬出來的網路裝置出去,這簡直就像是把 Linux 當成一個 switch 來使用了.除了虛擬化 Xen 的環境預設已經使用一個 Bridge 外,在一般的 Linux 環境下的方法也很簡單:我們也可以透過下面幾個簡單的指令來產生自己所需要的 Bridge 裝置出來.下面的圖示你可以很清楚的看出來虛擬 NIC 和實體 NIC 是如何透過 bridge 模式串接在一起.
bridge_mode

  1. 目標是用 eth0/eth1/eth2 來產生一個 bridge(bri0)

    [root@benjr ~]# ifconfig eth0 0.0.0.0
    [root@benjr ~]# ifconfig eth1 0.0.0.0
    [root@benjr ~]# ifconfig eth2 0.0.0.0
    [root@benjr ~]# brctl addbr bri0
    [root@benjr ~]# brctl addif bri0 eth0 eth1 eth2
    
  2. 看這一些 eth 是在哪一個 bridge 上.

    [root@benjr ~]# brctl show
    bridge name     bridge id               STP enabled     interfaces
    bri0            8000.001517785dd6       no              eth2
                                                                                     eth1
                                                                                     eth0
    virbr0          8000.000000000000       yes
    

    virbr0 是 RedHat 5 預設的 bridge 而 bri0 是剛剛透過 brctl 工具所建立出來的. 

  3. 設定一組 IP ,方便遠端管理使用.

    [root@benjr ~]# ifconfig bri0 192.8.1.3
    [root@benjr ~]# ifconfig bri0
    bri0      Link encap:Ethernet  HWaddr 00:15:17:78:5D:D6 
              inet addr:192.8.1.3  Bcast:192.8.1.255  Mask:255.255.255.0
              inet6 addr: fe80::215:17ff:fe78:5dd6/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:14767 errors:0 dropped:0 overruns:0 frame:0
              TX packets:34 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:679328 (663.4 KiB)  TX bytes:9626 (9.4 KiB)
    
  4. 最後 Allow IP forwarding
    要讓 IP Forwarding 生效最快的方式就是直接更改 /proc/sys/net/ipv4/ip_forward 的值,但這方式在下次開機後會失效.

    [root@benjr ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
    

    還是要更改設定檔,這樣下次開機一樣有效,並使用指令 sysctl -p 讓他立即生效.

    [root@benjr ~]# vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1
    [root@benjr ~]# sysctl –p
    

     之後所有插在 eth0 / eth1 /eth2 的 Hosts 都可以互通了!!可以將剛剛的步驟寫在 /etc/rc.local,讓他在開機時候就會生效.

    一開始你可能會對於 Bridge 和 Bonding 這兩東西有所困惑,感覺功能都是將多個 NIC ports 綁在一起來使用,但是最後功能上又不是很像.其實Bridge mode 的功能是將 linux 模擬成一個 Bridge(switch)來使用.凡是 Bridge 上的 NIC ports 實體網路埠都會透過一個虛擬的網路裝置出去,這就相當於是一個交換機(switch) 一樣,每個實體網路埠都有專屬的 MAC.不像是 Bonding 外面看來所有的 NIC 的 MAC 都是一樣.
    還有一點要注意的 bridge 是不能實現 bonding 的負載平衡(load-balancing),容錯(fault-tolerance)的功能.如果你把 Brctl (Bridge) 的 NIC ports 實體網路埠都接到同一交換機(Switch),那麼就會出現 Loop 環路(預設都是沒有將 STP 開啟).接下來大概你的 switch 因為廣播風暴就掛了.

4 個網友的想法 “Linux – Bridge

  1. 太好了,正好解决了一直困扰我的问题:bridge实现不了bonding的負載平衡、容錯
    也就是说如果不开启STP会出现环路,启动STP就会阻断其它的通路,总之是没有办法让bond的网卡同时工作,对吧?

  2. 自動參照通知: 硬體裝置 | Benjr.tw

  3. 自動參照通知: Linux – brctl & bonding | Benjr.tw

發表迴響