Nat

經紀人直連

  • November 2, 2017

是否可以使用具有靜態 IP 地址的伺服器來代理 2 個客戶端之間的直接連接,每個客戶端都位於 NAT 後面?

我已經使用 autossh 和埠轉發來通過伺服器建立連接,但我認為這意味著客戶端之間的任何互動都會消耗伺服器資源(轉發數據包和頻寬的計算成本)。我無法為自己測試,因為我目前無法訪問其中一位客戶。

我想像中發生的事情(我擁有 A、B 和伺服器,所以無論哪個客戶端先連接,都可以等到另一個連接):

client A -----> server <----- client B

我認為反向隧道方法可以做到這一點:

A sends packet -----> server,
server receives packet,
server sends packet -----> B,
B receives packet

反之亦然。我想要的是:

A connects -----> server (connection stays open until B connects)
B connects -----> server (server tells B about A)
A and B can communicate bidirectionally while the connection stays open

(如果有斷開A和B可以重複連接步驟)

我認為這一定是可能的(這不是 P2P 協議的工作方式嗎?)但我不知道如何設置它。

我已經使用 autossh 和埠轉發來通過伺服器建立連接,但我認為這意味著客戶端之間的任何互動都會消耗伺服器資源(轉發數據包和頻寬的計算成本)。

你是對的

Samy Kamkar有兩個工具允許 NAT 後面的兩個主機相互通信,pwnatchownat。如果您想使用此方法實現您的解決方案,網站上有技巧/技術的描述,或者您可以使用 Samy 發布的工具。

廣義上講,chownat是用於 A<->B 通信,當雙方都同意他們想要通信時;並且pwnat用於 B 不期望的 A->B 通信。如果他們在伺服器上共享狀態以同意何時打開chownat隧道,則可以使用前者;或以其他方式使用pwnat並且根本不需要伺服器。

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