传入请求的AWS Origin(IP)

时间:2016-12-15 00:22:02

标签: rest amazon-web-services amazon-ec2

我正在尝试在Amazon EC2上实现基本的洋葱路由服务。 我的网络背后的基本概念如下:我有一个目录节点,链节点和一个发起者(客户端)。链节点向目录节点注册,目标节点又确定流量的路由。

当我在我的机器上本地运行时,一切运行正常。当我从单个EC2实例运行每个组件时,它不起作用。这是因为目录节点没有看到链节点的“真实”位置,因此当它们向它注册时,它认为它们有其他IP。注册在我的机器上运行的链节点时,我注意到了这种行为,目录节点在EC2实例上运行。目录节点看到寄存器请求来自亚马逊网络。节点之间相互通信的方式是通过REST。目录节点从请求标头获取链节点的地址,该标头似乎始终指向AWS网络中的某个位置,而不是指向请求的真实来源。

我是云计算的新手,这是我与AWS的第一次互动。尽我所能,我找不到在线问题的答案,所以我决定在这里问一下。也许值得一提的是我读过有关弹性IP的内容,但就我所知,它们是一种用于实现实例的“静态”IP。这对我没有帮助,因为链节点最终应该在它自己的VM中动态生成,具体取决于活动的节点数。在这种情况下,目录节点将不知道新链节点的IP,无论是否为弹性。

你对我有什么建议吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

除非您自己创建一个代理(例如,使用Elastic Load Balancer),否则没有与AWS流量内联的代理。

我怀疑这种混淆被解释如下。

EC2中具有公共IP地址的每个实例都具有自动DNS主机名。例如,如果在us-west-2区域中有一个实例,公共IP地址为203.0.113.254,那么该机器也将具有与此类似的主机名:

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

在AWS之外,此主机名按预期工作。

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

所有EC2实例都有私有IP地址。如果实例具有公共地址,则不会直接了解它。公共IP由VPC Internet Gateway转换为专用IP。

当VPC中的一个实例使用如上所示的主机名访问VPC 内的另一个实例时,VPC的内部DNS解析器默认情况下会在每个区域的默认VPC上返回< em>私有目标实例的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的工作原理。我不隶属于该服务的提供者。)

或者,如果您拥有自己的域,请创建指向相关公共IP地址的A条记录。不要创建引用亚马逊提供的主机名的CNAME - 当遵循CNAME链时,重新映射。

另见Using DNS with your VPC