公司的上網行為管理產品在串接網關模式下支持有線以太LAN以及無線以太LAN,但目前的實現是有線LAN和無線LAN的子網地址不能重疊,這樣使得有線LAN和無線LAN之間無法實現同一網段的通信。後來經過做系統內核的同事幫助,找到了一個方法將有線LAN和無線LAN劃在同一網段內而實現互相通信。
思路其實很簡單:就是講虛擬出一個bridge口,將對應的有線LAN和無線LAN都綁定在這個虛擬bridge口上,並給這個bridge口分配一個地址,其他子網微機配置網關為bridge口的地址便可以了。當然,因為是設備是網關模式,路由和nat也是必須的了。如果設備本身便是網橋模式,那麼路由和nat便可以省掉了。
brctl addbr bridge
brctl addif bridge eth0
brctl addif bridge ath0
ifconfig eth0 0.0.0.0
ifconfig bridge 10.0.0.1 netmask 255.255.255.0 up
添加iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.2.173
將有線和無線都設置為10.0.0.*網段,即可通過網上鄰居進行訪問
當然了,要是Linux可以工作在網橋模式,必須安裝網橋工具bridge-utils,運行命令:
yum install bridge-utils
或者下載bridge-utils-1.4.tar.gz進行安裝,步驟如下:
編譯安裝bridge-utils
(1)進入到/usr/src 目錄下,下載bridge-utils-1.4.tar.gz :
#cd /usr/src
#wget http://launchpad.net/bridgeutils/
main/1.4/+download/bridge-utils-
1.4.tar.gz
(2)解壓縮:
#tar zxvf bridge-utils-1.4.tar.gz
進入bridge-utils-1.4目錄:
#cd bridge-utils-1.4
(3)編譯安裝:
#autoconf
生成configure文件:
#./configure
#make
#make install
編譯安裝完成。最後將命令brctl復制到/sbin下:
#cp/usr/local/sbin/brctl/sbin
===================================================================================================================================
下面是參考的一片文章:
有五台主機。其中一台主機裝有linux ,安裝了網橋模塊,而且有四塊物理網卡,分別連接同一網段的其他主機。我們希望其成為一個網橋,為其他四台主機(IP分別為192.168.1.2 ,192.168.1.3,192.168.1.4,192.168.1.5) 之間轉發數據包。同時,為了方便管理,希望網橋能夠有一個IP(192.168.1.1),那樣管理員就可以在192.168.1.0/24網段內的主機上telnet到網橋,對其進行配置,實現遠程管理。
前一節中提到,網橋在同一個邏輯網段轉發數據包。針對上面的拓撲,這個邏輯網段就是192.168.1.0/24網段。我們為這個邏輯網段一個名稱,br0。首先需要配置這樣一個邏輯網段。
# brctl addbr br0 (建立一個邏輯網段,名稱為br0)
實際上,我們可以把邏輯網段192.168.1.0/24看作使一個VLAN ,而br0則是這個VLAN的名稱。
建立一個邏輯網段之後,我們還需要為這個網段分配特定的端口。在Linux中,一個端口實際上就是一個物理網卡。而每個物理網卡的名稱則分別為eth0,eth1,eth2,eth3。我們需要把每個網卡一一和br0這個網段聯系起來,作為br0中的一個端口。
# brctl addif br0 eth0 (讓eth0成為br0的一個端口)
# brctl addif br0 eth1 (讓eth1成為br0的一個端口)
# brctl addif br0 eth0 (讓eth2成為br0的一個端口)
# brctl addif br0 eth3 (讓eth3成為br0的一個端口)
網橋的每個物理網卡作為一個端口,運行於混雜模式,而且是在鏈路層工作,所以就不需要IP了。
# ifconfig eth0 0.0.0.0
# ifconfig eth1 0.0.0.0
# ifconfig eth2 0.0.0.0
# ifconfig eth3 0.0.0.0
然後給br0的虛擬網卡配置IP:192.168.1.1。那樣就能遠程管理網橋。
# ifconfig br0 192.168.1.1
給br0配置了IP之後,網橋就能夠工作了。192.168.1.0/24網段內的主機都可以telnet到網橋上對其進行配置。
以上配置的是一個邏輯網段,實際上Linux網橋也能配置成多個邏輯網段(相當於交換機中劃分多個VLAN)。
另外一篇有助理解的文章:http://www.2cto.com/os/201202/118320.html
===========================================================================================================
[root@xenserver ~]# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> add bridge
delbr <bridge> delete bridge
addif <bridge> <device> add interface to bridge
delif <bridge> <device> delete interface from bridge
setageing <bridge> <time> set ageing time
setbridgeprio <bridge> <prio> set bridge priority
setfd <bridge> <time> set bridge forward delay
sethello <bridge> <time> set hello time
setmaxage <bridge> <time> set max message age
setpathcost <bridge> <port> <cost> set path cost
setportprio <bridge> <port> <prio> set port priority
show show a list of bridges
showmacs <bridge> show a list of mac addrs
showstp <bridge> show bridge stp info
stp <bridge> {on|off} turn stp on/off
=======================================================================================
addbr bridge的名稱 #添加bridge;
delbr bridge的名稱 #刪除bridge;
addif bridge的名稱device的名稱#添加接口到bridge;
delif bridge的名稱device的名稱#從bridge中刪除接口
setageing bridge的名稱時間 #設置老化時間,即生存周期
setbridgeprio bridge的名稱 優先級#設置bridge的優先級
setfd bridge的名稱時間 #設置bridge轉發延遲時間
sethello bridge的名稱時間 #設置hello時間
setmaxage bridge的名稱時間 #設置消息的最大生命周期
setpathcost bridge的名稱 端口 權重#設置路徑的權值
setportprio bridge的名稱 端口 優先級#設置端口的優先級
show #顯示bridge列表
showmacs bridge的名稱 #顯示MAC地址
showstp bridge的名稱 #顯示bridge的stp信息
stp bridge的名稱{on|off} #開/關stp
設置linux讓網橋運行 配置網橋
我們需要讓linux知道網橋,首先告訴它,我們想要一個虛擬的以太網橋接口:(這將在主機bridge上執行,不清楚的看看測試場景)
root@bridge:~> brctl addbr br0
其次,我們不需要STP(生成樹協議)等。因為我們只有一個路由器,是絕對不可能形成一個環的。我們可以關閉這個功能。(這樣也可以減少網絡環境的數據包污染):
root@bridge:~> brctl stp br0 off
經過這些准備工作後,我們終於可以做一些立竿見影的事了。我們添加兩個(或更多)以太網物理接口,意思是:我們將他們附加到剛生成的邏輯(虛擬)網橋接口br0上。
root@bridge:~> brctl addif br0 eth0
root@bridge:~> brctl addif br0 eth1
現在,原來我們的兩個以太網物理接口變成了網橋上的兩個邏輯端口。那兩個物理接口過去存在,未來也不會消失。要不信的話,去看看好了。.現在他們成了邏輯網橋設備的一部分了,所以不再需要IP地址。下面我們將這些IP地址釋放掉
root@bridge:~> ifconfig eth0 down
root@bridge:~> ifconfig eth1 down
root@bridge:~> ifconfig eth0 0.0.0.0 up
root@bridge:~> ifconfig eth1 0.0.0.0 up
好了!我們現在有了一個任何IP地址都沒有的box w/o了。好了,這下如果你想通過TP配置你的防火牆或路由器的話,你就只能通過本地的控制端口了。你不會告訴我你的機器上連串行端口都沒有吧?
注:上面紅色部分其實是可選的,在試驗中,我發現,就算不把原有的網卡地址釋放掉,網橋也能工作!但是,為了更規范,或者說為了避免有什幺莫名其妙的問題,最好還是按要求做,執行這四步吧!
最後,啟用網橋root@bridge:~> ifconfig br0 up
可選: 我們給這個新的橋接口分配一個IP地址
root@bridge:~> ifconfig br0 10.0.3.129
或者把最後這兩步合成一步:
root@bridge:~> ifconfig br0 10.0.3.129 up
就是多一個up!
這下我們做完了 。
關閉網橋命令
brctl delif ena eth1;
brctl delif ena eth0;
ifconfig ena down;
brctl delbr ena;
摘自 zjl_1026_2001的專欄