Linux

linux上透明橋的arp問題

  • August 18, 2014

我一直在嘗試通過將虛擬機放在具有 2 個介面(一個在前面,一個在後面)的透明網橋後面來保護我的 esx 伺服器上的虛擬機。

我的意圖是將所有防火牆規則放在一個地方(而不是在每個虛擬伺服器上)。

我一直在使用基於 arch linux 的空白新虛擬機作為橋樑(但我懷疑它是哪個品牌的 linux 並不重要)。

我擁有的是 2 個虛擬交換機(因此是兩個虛擬網路,VN_front 和 VN_back),每個都有 2 種類型的埠(交換/分離或混雜/機器可以看到所有數據包)。

在我的橋接機器上,我設置了 2 個虛擬 NIC,一個在 VN_front,一個在 VN_back,兩者都處於混雜模式。

我創建了一個包含兩個 NIC 的網橋 br0:

brctl addbr br0
brctl stp br0 off
brctl addif br0 front_if
brctl addif br0 back_if

然後把它們帶上來:

ifconfig front_if 0.0.0.0 promisc
ifconfig back_if 0.0.0.0 promisc
ifconfig br0 0.0.0.0

(我使用 promisc 模式,因為我不確定我是否可以不用,認為數據包可能沒有到達 NIC)

然後我將我的一個虛擬伺服器放在 VN_front 上,並將其插入到 VN_back(這是我正在考慮的漂亮案例,只需更改它們插入的 VN 就可以移動我的伺服器,而無需更改任何內容在配置中)。

然後我查看了我的無地址網橋“看到”的macs brctl showmacs br0,它確實從兩邊顯示了我的伺服器:

我得到的東西看起來像這樣:

port no mac addr                is local?       ageing timer
 2     00:0c:29:e1:54:75       no                 9.27
 1     00:0c:29:fd:86:0c       no                 9.27
 2     00:50:56:90:05:86       no                73.38
 1     00:50:56:90:05:88       no                 0.10
 2     00:50:56:90:05:8b       yes                0.00  << FRONT VN
 1     00:50:56:90:05:8c       yes                0.00  << BACK  VN
 2     00:50:56:90:19:18       no                13.55
 2     00:50:56:90:3c:cf       no                13.57

問題是插入前/後的伺服器未顯示在正確的埠上。

我懷疑 ARP 世界中發生了一些可怕的事情…… :-/

如果我從前端虛擬伺服器 ping 到後端虛擬伺服器,則只有後端機器在前端 ping 某些東西時,我才能看到後端機器。一旦我停止來自後面機器的 ping,來自前面機器的 ping 就停止通過……

我注意到,如果後端機器 ping,那麼它在網橋上的埠是正確的……

我嘗試使用 /proc/sys 的 arp_ 開關,但對最終結果沒有明顯影響… /proc/sys/net/ipv4/ip_forward 在使用時似乎沒有任何用處橋(似乎這一切都由 brctl 處理)/proc/sys/net/ipv4/conf// *arp_*似乎也沒有太大變化……(嘗試將 arp_announce 設置為 2 或 8 - 就像其他地方建議的那樣 - 和 arp_ignore 到0 或 1)

我見過的所有範例在兩側都有不同的子網,例如 10.0.1.0/24 和 10.0.2.0/24 …在我的情況下,我希望兩側都有 10.0.1.0/24(就像透明開關一樣 - 除了這是一個隱藏的韌體)。

打開/關閉 stp 似乎對我的問題沒有任何影響。

就好像 arp 數據包通過網橋,用虛假數據破壞另一端……我試圖-arp在每個介面上使用 br0,前,後……它完全破壞了這件事……我懷疑這與雙方在同一子網中有關…

我曾考慮將我的所有機器放在 fw 後面,以便在後面有所有相同的子網……但我被我的提供商的網關卡在前面,我的子網的一部分(實際上是 3 個設備)路由整個子網),所以無論我做什麼,我總是有來自同一子網的 ips ……(我在我的委派子網上使用固定的前端 IPs)。

我很茫然…… -_-’’ 謝謝你的幫助。

(有人嘗試過這樣的事情嗎?在 ESXi 中?)

(這不僅僅是一個噱頭,其想法是在某些伺服器上執行類似 fail2ban 的東西,將他們被禁止的 IP 發送到網橋/防火牆,以便它也可以禁止它們 - 一次性從同一個攻擊者手中拯救所有其他伺服器,允許一些honeypot從任何合適的響應中觸發 fw,以及類似的東西……

我知道我可以使用像 snort 這樣的東西,但它以完全不同的方式解決了一些完全不同類型的問題……)

如果我理解正確,您所需的網路是:

        +----------+  +-----+  +---------+
<--inet--+ VN_front +--+ br0 +--+ VN_back |
        +--+-------+  +-----+  +------+--+
           |                          |       
           |                          |       
        +--+----------+    +----------+--+
        | VM          |    | VM          |
        | 10.0.1.2/24 |    | 10.0.1.3/24 |
        +-------------+    +-------------+

通過左側箭頭使用 Internet 網關?

您在網橋上使用 ebtables 或 iptables 來防火牆網路“後端”部分的內容?

我確信這可以工作,但我不會這樣做。這是一個複雜且不常見的設置。就像程序員說的那樣,總有兩個人會調試你創建的任何東西——你,以及六個月後你忘記這一切的你。

您在兩個子網中看到的所有範例(可能更簡單的防火牆)都是常見的做法,這是有原因的——它們第一次工作,配置、更改、維護和故障排除都很明顯。

簡單就是網路中的一切。避免建構複雜的網路。為訓練有素的猴子(甚至 MCSE)可以執行的簡單而穩定的網路感到自豪。讓你的老闆給你關於你沒有產生的票數的 KPI,以證明並為這種穩定性提供激勵。

(如果您的 MAC 出現在錯誤的網橋埠後面,那是因為您創建了一個網路環路,並且 ARP 請求正在廣播到網橋的兩個介面,並且收到的最後一個介面了解 MAC 的位置。從您的後來的評論,聽起來你已經這樣做了。)

引用自:https://serverfault.com/questions/600960