Proxy
如何設置持久的 TCP 性別轉換器代理?
我有一個提供者 (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 系統上做類似的事情。