2016-12-03 95 views
0

我一直在閱讀關於WebRTC以及它如何使peer to peer溝通。所以,我做了一個針對NAT遍歷的實驗。NAT穿越實驗?

實驗目的是在NAT中測試打孔。我有兩個系統都在運行Ubuntu 16.04。我將把這些系統稱爲system Asystem B

這兩個系統都連接到託管在Amazon Web Services上的服務器。系統A使用的命令nc -p 1234 -u IP_ADDRESS_OF_SERVER PORT_NUMBER_OF_SERVER和系統B使用命令nc -p 1235 -u IP_ADDRESS_OF_SERVER PORT_NUMBER_OF_SERVER。系統A和系統B都連接到相同的WiFi路由器。

連接到服務器後,我們瞭解了兩個系統的public socket。之後,我嘗試使用我們在幾秒鐘內從服務器獲取的公共套接字的信息連接對方。

系統A從服務器斷開連接並通過使用命令nc -u -p 1234 PUBLIC_IP_OF_SYS_B PUBLIC_PORT_OF_SYS_B連接到系統B,並且系統B也通過使用命令nc -u -p 1235 PUBLIC_IP_OF_SYS_A PUBLIC_PORT_OF_SYS_A將服務器與服務器斷開連接並連接到系統A.

我這樣做是爲了在我們的NAT中打個洞。之後,系統A取消上述nc命令並使用nc -l -u -p 1234收聽它的端口。但不幸的是,我無法收到系統A中系統B中鍵入的任何消息。

任何人都可以幫助我完成這項工作嗎?

+0

不知道爲什麼要去所有這些麻煩,如果你只能運行一個WebRTC服務,看看會發生什麼。 嘗試https://appear.in或https://talky.io。如果他們工作,然後NAT穿越工作(或沒有NAT干擾你)。 –

+1

@abhiarora - 很好,更努力。 –

+0

@Am_I_Helpful - 你有沒有嘗試過嗎? 你能提出一些建議嗎? – abhiarora

回答

1

所以,我想出了自己。我試圖做的事情叫做Hairpin Translation,髮夾翻譯在現有的NAT之間仍然少得多(與打孔翻譯相比)。

這兩個系統恰好位於相同的NAT之後,因此位於相同的私有IP地址領域。 System A已經與服務器S建立了UDP會話,普通NAT已經爲其分配了其自己的公共端口號(例如x)。 System B已經類似地建立了與S的會話,NAT爲其分配了公共端口號(例如y)。

假設system A使用穿孔技術與B建立UDP會話,使用服務器S作爲引導者。 System A向S發送一條請求連接到B的消息.S用B的公共和私人端點響應A,並且將A的公共和私人端點轉發給B.兩個客戶端然後試圖直接在這些端點中的每一個處發送UDP數據報。由於我們的NAT不支持髮夾翻譯,因此指向公共端點的消息不會到達其目的地。

任何人都可以通過here閱讀關於髮夾的內容。