2015-06-21 24 views
4

我打算向客戶發送「家庭服務器」類型的設備,與他們的(Android或iPhone)智能手機進行通信。問題在於,根據他們的互聯網服務提供商,客戶沒有外部可達的IPv4地址(DS-lite隧道),因此智能手機不能僅使用IPv4 DNS記錄來查找服務器。使家庭服務器可達(IPv4,IPv6,DS-Lite)

替代我能想到的:

  • 讓服務器使用IPv6 DynDNS的服務,讓IPv6的需要優先於IPv4的智能手機上。由於該解決方案應該可以在客戶無需註冊DynDNS服務的情況下運行,所以我還沒有找到任何允許我這樣做的服務。

  • 建立我自己的「目錄服務器」,這樣家庭服務器就會間隔地註冊它的序列號 - 與DynDNS類似,但通過HTTPS在應用層上。客戶可以簡單地將序列號輸入到應用程序中以查找服務器。由於認證/加密要求,這個解決方案比我喜歡的更難以實現。

有關如何使主服務器可達的任何其他想法?我真的很想避免運行我自己的「雲服務」。某種類型的點對點網絡發現,也許?

[更新:]這是什麼,我基本上是在尋找:

Home server       Relay   DynDNS  Client 
|          |    |    | 
|-------- open tunnel to port 80 ----->|    |    | 
|<-success, listening on 192.0.2.1:80 -|    |    | 
|          |    |    | 
|----- Register "my.ddns.net" ---------------------->|    | 
|<------------ "my.ddns.net" is now 192.0.2.1 -------|    | 
|          |    |    | 
|          |<- GET http://my.ddns.net -| 
|<------- GET http://my.ddns.net ----|    |    | 
|--- HTTP response ------------------->|    |    | 
|          |----- HTTP response ------>| 
+1

我不完全清楚你想要解決哪個問題。查找具有IPv6地址的設備的IPv6地址是DNS旨在執行的操作。爲用戶創建您自己的動態DNS服務並不難,尤其是如果要解決的設備正在運行您的代碼,那就更是如此。獲取可能只有IPv4連接到僅具有IPv6的服務器的客戶端可能會非常棘手。爲了回答以後,您需要提供更多關於您需求的信息。隨時在聊天消息中通知我,因爲它可能需要幾次往返才能澄清。 – kasperd

+0

謝謝,我更新了我的問題,希望能更好地解釋它。這個問題還不清楚,因爲我不知道我在尋找什麼 - 我只知道我希望客戶端能夠與家庭服務器交談,而不管家庭服務器是否位於防火牆/ NAT/DS lite之後隧道。 – knipknap

+1

該圖中的「Relay」是什麼?這是一個現有的服務還是你想要實現的東西? – kasperd

回答

2

製作在一個家庭從互聯網到服務器的連接是困難的。 IPv6在任何地方都不可用,並且IPv4並不總是有可用的公共地址(有多個NAT層或DS-Lite)。

今天唯一可靠的解決方案是擁有一個公共可達的服務器作爲集合點,讓歸屬盒永久保存到該服務器。移動設備(也可能位於NAT後面)可以通過服務器到達主機箱或設置STUN/TURN樣式的連接。

+0

IPv6(可能與PCP)將使這一切變得如此簡單.. –

+0

我想你是對的。如果家庭服務器維持連接,則也可以解決路由器/防火牆的問題。當然,必須有一個現有的服務來做到這一點? – knipknap

+1

在NAT中打孔最好用STUN和TURN –

1

多虧了其他答覆,我有出發點找到了一些現有的解決方案:ngroklocaltunnel由專門的子域映射到每個家庭服務器,以及基於HTTP請求分派(S)GET請求解決問題。

後者是一個開源項目,並且server以及javascript client在Github上。