來源:互聯網
上載者:User
關鍵字
Linux
流量控制
ARP代理
高級路由
構建橋接器
偽橋接器
橋接器是一種安裝在網路中,不需要任何後續配置的設備。 網路交換器基本上就是一個多口橋接器。 也就是說橋接器就是一個兩口的交換器。 而Linux能支援多個介面的橋接器,成為一個真正的交換器。
橋接器經常被用於改進那些HTTP://www.aliyun.com/zixun/aggregation/7317.html">工作狀態不佳但是又不能改造的網路。 因為橋接器是一個2層設備(IP下面的那一層),路由器和伺服器意識不到它的存在。 也就意味著你可以完全透明地阻擋或者修改資料包,甚至流量整形。
另一件好事是,假如一個橋接器崩潰了,可以使用一個HUB甚至一根交叉線來代替它。
壞消息是,如果它沒有在工程文檔中明確備案,橋接器就會導致混亂。 它不會在traceroute中出現,但是卻導致資料包從A點到B點過程中消失或者變樣(「網上鬧鬼! 」)。 你應該也想知道一個「不想改變任何事」的組織是否在做應該做的事情。
Linux 2.4/2.5橋接器的文檔在這個網頁裡.
1. 橋接與iptables的關係
截止到Linux 2.4.20,橋接和iptables在不借助其他條件的時候無法互相看到。 如果你把資料包從eth0橋接到eth1,它不會通過iptables。 這意味著你無法進行包過濾、NAT、mangle等等操作。 從Linux 2.5.45開始,這個問題已被解決。
你也可能聽說過另一個叫做「ebtables」計畫,它可以實現MACNAT和「brouting」等等瘋狂的功能。 這確實令人振奮!
2. 橋接與流量整形
做個廣告:沒問題!
只是要明確哪塊網卡在哪一邊,否則你可能會在內部網卡上配置外網流量整形,那當然不能工作。 必要的話使用嗅探器確認。
3. 用ARP代理實現偽橋接器
如果你只是想實現一個偽橋接器,請直接閱讀「實現」一節,但是看看它是如何工作的不是壞事。
偽橋接器的工作有些特別。 缺省情況下,橋接器不加改變地把資料幀從一個埠發送到另一個埠。 它只是看看資料幀的硬體位址來決定這個幀應該送到哪裡去。 也就是說,只要資料幀有合適的硬體位址,你可以讓Linux轉發它並不認識的資料幀。
而偽橋接器的工作有些區別,它看上去更像是一個隱形的路由器,而不是一個橋接器。 但類似于橋接器的是,對網路的設計沒有太大影響。
因為它不是一個橋接器,就具有了一個優勢:資料幀(包)會通過內核,所以你可以進行過濾、修改、重定向或者重路由。
一個真的橋接器也可以實現上述技巧,但那需要特定的代碼,象乙太幀分流器或者上面提到的那個補丁。
偽橋接器的另一個好處是它不會轉發它不認識的資料包,這樣可以防止一些cruft充斥網路,從而淨化你的網路環境。 如果你確實需要這些cruft(比如SAP包或者NETBEUI),就應該使用真橋接器。