Linux

帶有複製數據包的 UDP 代理

  • October 15, 2014

定期從動態公共 IP 向公共 IP X:20000 發送 UDP 消息。

需要一個在 IP X:20000 中偵聽的代理,然後將複製/複製數據包轉發到 X:20001 和位於 IP Y:20000 的另一台機器。現在,當應用程序在 X:20001 上偵聽時,響應到 X:20001 的消息,我希望將該消息從 X:20000 轉發回 PC A。

如何在 Linux 中實現此功能?(試圖避免自定義腳本)


試圖讓一個無頭伺服器中的一個應用程序響應消息,並讓一台帶有監視器的電腦在需要時實時調試消息。

如果您使用足夠新的核心來支持該表,我認為您可以使用iptables該工具完成此操作。samplicatorraw

首先,為什麼socat行不通:處理數據包流socat相當容易。你只需這樣做:

socat - udp4-listen:20000,fork | tee >(socat - udp-sendto:X.X.X.X:20001) >(socat - udp-sendto:Y.Y.Y.Y:20000)

這將流量複製到X.X.X.X:20001Y.Y.Y.Y:20000

但是,這對您沒有幫助,因為在 XXXX:20001 上偵聽的服務將“看到” 127.0.0.1 作為源地址。那是samplicator可以提供幫助的地方。引用samplicatorGoogle 程式碼頁:

這個簡單的程序在網路埠上偵聽 UDP 數據報,並將這些數據報的副本發送到一組目的地。…另一種選擇是它可以“欺騙”IP源地址,以便副本看起來來自原始來源,而不是中繼。

這聽起來正是我們需要的:源地址。(話雖如此,我還沒有真正測試過這個工具。我正在測試的盒子沒有安裝編譯器,我現在不會為了伺服器故障而啟動一些東西。>微笑<)

您需要做的最後一件事是處理來自 的流量X.X.X.X:20001,使其看起來像是來自X.X.X.X:20000

X.X.X.X:20001然後,對來自“來自”的回復進行 NAT X.X.X.X:20000

iptables -t raw -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j NOTRACK
iptables -t nat -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j SNAT --to-source :20000

當心:我還沒有一起測試所有這些。我用它模擬了它socat,它工作正常減去提供的源地址“欺騙” samplicator

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