我在防火牆後面的服務器上運行TURN服務器(http://tools.ietf.org/html/rfc5766)。該機器具有公用IP地址,用於將傳入和傳出網絡數據包發送到服務器的專用IP地址或從中傳送出去。基本上,服務器不能將套接字綁定到公共IP地址,只能是私有IP地址。運行ifconfig
顯示了具有私有IP地址的網絡設備。TURN服務器在防火牆之後 - 如何處理XOR-RELAYED-ADDRESS
當我運行TURN服務器時,必須綁定到私有IP地址(因爲服務器不認爲它連接到公共Internet)。所有對分配創建的響應都將使用私有IP地址發回XOR-RELAYED-ADDRESS。客戶端收到XOR-RELAYED-ADDRESS並將數據發送到服務器的私有IP地址,這明顯失敗。
有我正在考慮解決這個兩個選項:
- 有我的客戶端代碼忽略異或中繼-地址的IP地址,並只使用異或中繼-地址的端口。客戶端將所有中繼消息發送到TURN服務器的公共IP(因爲客戶端已經知道這個值)和XOR-RELAYED-ADDRESS端口。
- 修改我的服務器以瞭解其公有IP(即使它不能將套接字綁定到它),並始終在XOR-RELAYED-ADDRESS響應中發回公共IP。
我覺得第一種方法打破了TURN RFC ......儘管我無法想象TURN服務器將發送XOR-RELAYED-ADDRESS的IP作爲TURN服務器公共IP,RFC表示XOR-RELAYED-ADDRESS是客戶端應該發送數據的地址。
我覺得第二種方法打破了RFC 減去 ......如果這是有道理的。此外,這種方法不會強迫客戶做任何特殊的事情,而第一種方法需要所有客戶遵守上述規定。
您對此有何看法?有沒有人遇到過這種情況,並且/或者對哪種方法中斷的RFC更少有任何意見,或者RFC甚至被任何一種方法侵犯?
如果兩個客戶端在同一個防火牆後面,則始終使用外部地址應該仍然工作,但它可能會導致因爲客戶端和服務器之間的數據包(包括相同的防火牆後面)的性能下降了會到公共互聯網只能發送回防火牆。 – Chris 2012-07-23 15:19:54
發送內部地址將是更好的延遲,但是當兩個客戶端(一個服務器的防火牆後面,一個沒有)溝通彼此的異或中繼-地址給對方,會有不匹配。 – Chris 2012-07-23 15:20:46