帶有複製數據包的 UDP 代理
定期從動態公共 IP 向公共 IP X:20000 發送 UDP 消息。
需要一個在 IP X:20000 中偵聽的代理,然後將複製/複製數據包轉發到 X:20001 和位於 IP Y:20000 的另一台機器。現在,當應用程序在 X:20001 上偵聽時,響應到 X:20001 的消息,我希望將該消息從 X:20000 轉發回 PC A。
如何在 Linux 中實現此功能?(試圖避免自定義腳本)
試圖讓一個無頭伺服器中的一個應用程序響應消息,並讓一台帶有監視器的電腦在需要時實時調試消息。
如果您使用足夠新的核心來支持該表,我認為您可以使用
iptables
該工具完成此操作。samplicator
raw
首先,為什麼
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:20001
和Y.Y.Y.Y:20000
。但是,這對您沒有幫助,因為在 XXXX:20001 上偵聽的服務將“看到” 127.0.0.1 作為源地址。那是
samplicator
可以提供幫助的地方。引用samplicator
Google 程式碼頁:這個簡單的程序在網路埠上偵聽 UDP 數據報,並將這些數據報的副本發送到一組目的地。…另一種選擇是它可以“欺騙”IP源地址,以便副本看起來來自原始來源,而不是中繼。
這聽起來正是我們需要的:源地址。(話雖如此,我還沒有真正測試過這個工具。我正在測試的盒子沒有安裝編譯器,我現在不會為了伺服器故障而啟動一些東西。>微笑<)
您需要做的最後一件事是處理來自 的流量
X.X.X.X:20001
,使其看起來像是來自X.X.X.X:20000
。
X.X.X.X:20001
然後,對來自“來自”的回復進行 NATX.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
。