2014-02-07 45 views
2

我有一個關於與TEE選項iptables流量鏡像的問題。主要目標是將服務器A(端口1935)上的所有服務流量複製到同一端口(端口1935)上服務器B上運行的相同服務。 例如: 如果我開始流視頻192.168.0.200:1935 - 視頻應該是兩臺服務器上(上192.168.0.201:1935和192.168.0.200:1935)。 Google將我指向iptables -TEE選項。我嘗試使用它在Ubuntu: SERV一個-192.168.0.200 SERV乙-192.168.0.201如何處理TEE後的鏡像(重複)iptables流量?

在SERV A(192.168.0.200)我添加鏡像傳入流量的端口1935:

[email protected]_200:~# iptables -t mangle -A PREROUTING -p tcp --dport 1935 -d 192.168.0.200 -j TEE --gateway 192.168.0.201 

現在我已經在SERV B(192.168.0.201)界面上獲得了所有軟件包。

[email protected]_201:~# tcpdump 'tcp port 1935' 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 
18:14:47.503241 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:47.503258 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:47.752702 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:47.999309 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:48.008983 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:48.253066 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 
18:14:48.499660 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,nop,sackOK], length 0 
18:14:48.508964 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,nop,sackOK], length 0 
18:14:48.751863 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,nop,sackOK], length 0 

正如你看到我得到的第二個服務器的接口,但SERV A的目的地IP(192.168.0.200)的所有流量。現在我需要的路線這個流量到我的端口1935的服務我嘗試在SERV b。添加規則:

iptables -t nat -A PREROUTING -p tcp --dport 1935 -d 192.168.0.200 -j DNAT --to-destination 192.168.0.201:1935 

也試圖重定向和轉發 - 但並沒有使其正常工作...沒有SERV B端口視頻1935

可能有人點我到正確的方向? 正如我前面提到的:我需要在端口1935的兩臺服務器上看到視頻流。發佈只在SERV A上,但視頻應該在兩者上。 任何建議都會很高興。 謝謝。

回答

3

我認爲這樣做是不可能的。

看來您正在使用TEE進行TCP通信。

TCP是一個狀態協議(不像UDP),它要求用戶端計算機參與連接的每一個步驟,它不會與兩個單獨的客戶端試圖與一個服務器通信工作。

一些替代方案:

  1. 使用UDP流來代替(當然,你必須同時更改服務器,客戶端和iptable的規則)。
  2. 使用某種TCP代理,它從一側接受TCP視頻流(或透明地攔截它),並從另一側向多個客戶端打開2個(或更多)不同的TCP會話。 也許這可以幫到這裏: https://github.com/agnoster/duplicator