Proxy

如何設置持久的 TCP 性別轉換器代理?

  • August 18, 2018

我有一個提供者 (A) 想通過傳入的 TCP 連接向我們發送數據。不幸的是,消費服務 (B) 無法接收入站 TCP 連接。此外,它沒有靜態 IP,這是另一個要求。

解決此問題的一種方法是將傳入 TCP A 埠連接到另一個 TCP 埠 B 的服務,以便消費者可以與 B 建立出站連接。

這不是一個獨特的問題$$ 1 $$ $$ 2 $$,並且使用 socat 我可以做出非常接近我想要的東西:

socat -d -d -d -u TCP4-LISTEN:PORT-A,reuseaddr TCP4-LISTEN:PORT-B,reuseaddr

但是,這樣做存在以下問題:

  • 如果 B 斷開連接,則無法重新連接。使用TCP4-LISTEN:PORT-B,reuseaddr,fork,它可以連接但不接收數據。
  • 在 A 建立連接之前 B 無法連接(可克服)
  • 只能建立一個連接PORT-B(可克服)

有沒有辦法調整命令,使其成為“永久”並抵抗失敗?

重要的問題是,A 將如何應對失去連接或拒絕連接?任何假設單個 TCP 連接將永遠保持不變的東西都是脆弱的。這就是網際網路的本質。

設置即socat服務[x]inetd怎麼樣?

您將設置xinetd在 PORT-B 中偵聽,並socat -u TCP4-LISTEN:PORT-A,reuseaddr STDIO在 B 端連接後立即啟動。

xinetd將從 B 端傳入的流量傳遞到 的標準輸入socat,並擷取 的標準輸出socat並將其傳遞給 B 端。

如果B斷開,則socat可以允許該過程結束;xinetd一旦 B 再次連接,將啟動一個新的。當 B 斷開連接時,A 將收到“連接被拒絕”錯誤。

我曾經不得不在舊的 HP-UX 系統上做類似的事情。

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