老實說是用過虛擬化-Xen 之後才發現有 Linux 下網路的模式有一個東西叫做 Bridge mode,有點像將多個 NIC Adapter ports 透過一個虛擬出來的 Bridge(Switch) 全部串在一起,再透過一個虛擬出來的網路裝置出去,這簡直就像是把 Linux 當成一個 switch 來使用了.
除了虛擬化 Xen 的環境預設已經使用一個 Bridge 外,在一般的 Linux 環境下的方法也很簡單,我們也可以透過下面幾個簡單的指令來產生自己所需要的 Bridge 裝置出來.
下面的圖示你可以很清楚的看出來虛擬 NIC 和實體 NIC 是如何透過 bridge 模式串接在一起.
- 目標是用 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
- 看這一些 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 工具所建立出來的.
- 設定一組 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)
- 最後 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 因為廣播風暴就掛了.關於 Linux – Bonding 請參考: https://benjr.tw/233
太好了,正好解决了一直困扰我的问题:bridge实现不了bonding的負載平衡、容錯
也就是说如果不开启STP会出现环路,启动STP就会阻断其它的通路,总之是没有办法让bond的网卡同时工作,对吧?
理解错了