2016-12-15 63 views
1

我正試圖在Amazon EC2上實現基本的洋蔥路由服務。 我的網絡背後的基本概念如下:我有一個目錄節點,鏈節點和發起者(客戶端)。鏈節點向目錄節點註冊,從而確定流量的路由。AWS傳入請求的來源(IP)

當我在本地機器上運行它時,一切正常。當我從單獨的EC2實例運行每個組件時,它不起作用。這是因爲目錄節點沒有看到鏈節點的「真實」位置,所以當它們註冊時,它認爲它們有其他IP。當註冊我的機器上運行的鏈節點時,我注意到這種行爲,目錄節點在EC2實例上運行。目錄節點將註冊請求視爲來自亞馬遜網絡。節點彼此通信的方式是通過REST。目錄節點從請求頭中獲取鏈節點的地址,這似乎始終指向AWS網絡中的某個位置,而不是指向請求的真正來源。

我是新來的雲計算,這是我與AWS的第一次互動。爲了盡我所能,我無法在網上找到我的問題的答案,所以我決定在這裏問。也許值得一提的是,我的確瞭解了彈性IP,但據我瞭解,它們是一種「靜態」IP,用於實現這些實例。這不會對我有所幫助,因爲鏈節點最終應該根據活動節點的數量最終在其自己的VM中動態生成。在這種情況下,目錄節點將不知道新鏈節點的IP,無論它是否彈性。

對我有什麼建議嗎? 在此先感謝!

+0

爲什麼你不能在請求頭中使用IP來進行通信? – helloV

+1

由於以下情形:目錄節點位於EC2上。鏈節點在我的PC上並嘗試註冊。目錄節點會看到以下內容:收到的註冊請求來自:,而不是<我的本地計算機的IP>。然後,當它試圖告訴該節點必須路由一段流量時,它會嘗試與對話,並且鏈節點不知道它必須執行任何操作,因爲它位於本地計算機的 。 – Syn

+0

PC上的軟件如何到達EC2上的目錄節點?什麼是您的網絡配置? –

回答

0

除非您自己創建一個代理(例如使用Elastic Load Balancer),否則沒有代理與AWS流量內聯。

我懷疑混淆如下解釋。

每個在EC2中具有公共IP地址的實例都有一個自動DNS主機名。例如,如果你在美國西2區的情況下,與公網IP地址203.0.113.254,該機器會也有一個類似的主機名:

ec2-203-0-113-254.us-west-2.compute.amazonaws.com 

AWS之外,此主機名的作品如預期。

在一個VPC中,它是不同的。

所有EC2實例都有私有IP地址。如果實例也有有一個公共地址,它不會直接知道它。公共IP由VPC Internet網關轉換爲專用IP。

當VPC內的一個實例訪問採用與上述所示的一個主機名VPC 內的另一個實例,VPC內部的DNS解析器將默認在您的默認VPC每個區域,返回的私人 IP目標實例,而不是公共IP。因此,目標機器將看到客戶端的IP,而不是公共IP。

這很有用,因爲VPC內部的計算機使用其公共IP地址與VPC內的其他實例通話時會產生額外的數據傳輸費用,但使用專用IP時附加費用不適用。

如果你使用一個不同的主機名,而不是由AWS提供的一個,訪問實例,不會發生此重新映射。例如...

my-chain-node-zero.203.0.113.254.xip.io 

...也將解析爲203.0.113.254,但不會顯示此重新映射行爲。 (請閱讀http://xip.io的工作原理,我不屬於該服務的提供者)。

或者如果您有自己的域名,請創建A記錄指向有問題的公有IP地址。請勿創建引用Amazon提供的主機名的CNAME - 當遵循CNAME鏈時,那些將會重新映射

Using DNS with your VPC見。

+0

謝謝你的回答。然而,我仍然不清楚如何使用xip.io來獲取鏈節點的真實IP。唯一已知的地址是目錄節點之一。然後鏈節點向它發出請求,目錄節點必須找出並存儲它們的位置。根據我的理解,目錄節點會看到鏈節點的私有IP,而不是公有節點。可以在不知道發出請求的節點位置的情況下使用xip.io(在本例中是鏈節點)? – Syn

+0

還是你的意思是我應該使用xip.io來訪問目錄節點?像my-directory-node.203.0.113.254.xip.io而不是my-chain-node-zero.203.0.113.254.xip.io? – Syn

+0

由於您沒有提供問題中的具體示例,我假定您的節點正在使用其ec2主機名連接到其他節點。這裏的想法並不是在相反的方向上,而是在向前的方向上。您可能想要提供具體的例子,說明什麼與什麼相關,以及如何(按名稱或IP)以及實際與預期結果。看到我對這個問題的評論,關於ec2metadata。 –