Linux

連接到集線器時轉發所有流量

  • February 17, 2016

我有一個帶有兩個 NIC 的 Ubuntu。eth0 連接到集線器,eth1 連接到 Internet。eth1 用於使用 openVPN 做點對點 VPN。所以我有一個tun0介面。VPN 隧道端點是 10.9.0.1(綁定在 eth1)和 10.9.0.2(遠​​程對等點)。我想將 eth0(集線器端)收到的所有流量轉發/鏡像到 VPN 對等體 10.9.0.2。為此,我創建了以下 iptables 規則。

sudo iptables -t mangle -A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2

當然,我將 eth0 設置為混雜模式。

sudo ifconfig eth0 promisc

我什至啟動了IP轉發

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

當我在 eth0(集線器端)上嗅探時,我看到了所有流量,但是當我在 10.9.0.2(遠​​程 VPN 對等方)上嗅探時,我只看到在 eth0 上接收到的多播流量。我的問題是:為什麼非多播或專用單播流量沒有被鏡像/轉發?

注意:如果我在我的 Ubuntu 伺服器上嗅探 tun0,我只會看到多播流量和專用單播流量。所以我得出的結論是,問題不在 iptables 規則上,而是在之前……

感謝你並致以真誠的問候。

我終於找到了解決方案。@MrMajestyk 給出的想法幫助了我。這是我的解決方案。

首先,需要使用ebtables修改接收數據包的目標 MAC 地址,以便 IP 堆棧的程式碼接收數據包。如果我不在乙太網層這樣做,網路層永遠不會收到幀,除了多播、廣播和專用單播。如果網路層從不接收所有數據包,則無法使用iptables處理它們。但是為了使這個 ebtables 規則起作用,有必要創建一個帶有傳入(集線器端)介面的橋接介面。

sudo ifconfig eth0 10.9.0.5
sudo brctl addbr br0 
sudo brctl addif br0 eth0 
sudo ifconfig br0 up

然後我們可以創建ebtables規則。

sudo ebtables -t broute -A BROUTING -i eth0 -j redirect --redirect-target DROP

然後,我可以使用 iptables 將收到的流量鏡像到我的 VPN 遠端對等點 (10.9.0.2)。

sudo iptables -t raw -A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2

請注意,我使用隧道介面 (tun) 而不是乙太網橋 (tap)。之後,我可以在遠端對等點 10.9.0.2 上嗅探,並且可以看到所有流量(例如 ARP 除外)。

我什至可以過濾我的流量,但必須在原始表中 進行,在 -j TEE –gateway 規則*之前進行預路由鏈。*例如,查看我的 iptables 原始、預路由條目。

-A PREROUTING -p vrrp -j DROP
-A PREROUTING -p ospf -j DROP
-A PREROUTING -d 255.255.255.255/32 -j DROP
-A PREROUTING -p udp --sport 53 -j DROP
-A PREROUTING -p tcp --sport 53 -j DROP
-A PREROUTING -i eth0 -j TEE --gateway 10.9.0.2

感謝您的幫助

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