AWS - 使用EIP访问私有子网中的实例

tux*_*oti 11 subnet amazon-web-services amazon-vpc

我想使用EIP访问我的私有子网中的几个实例.有办法吗?我知道这没有多大意义.但让我详细解释一下.

我有一个带有2个子网的VPC.

1)192.168.0.0/24(公共子网)附加了EIP

2)192.168.1.0/24(私有子网)

这些之间有一个NAT实例,允许私有实例具有对Internet的出站访问权限.如下所述,一切正常:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

但是现在,我暂时需要使用EIP直接从互联网上解决私有子网上的实例.这可以通过单独为该特定实例设置新的路由表来实现吗?或其他什么?以下是限制:

1)私有子网上的任何实例都不能有任何停机时间

2)因此不言而喻,我无法创建新的子网并在那里移动这些实例.

它应该像 - >附加一样简单.使用 .去掉.我现在唯一的另一种方式是在iptables上从公共子网(有EIP)的实例到私有子网上的任何实例上的某种端口...但这看起来很混乱.

还有其他办法吗?

Mic*_*bot 19

当然,私有子网中的东西在私有子网中,因为它不应该从Internet访问.:)

但是......我相信你有理由,所以这里有:

首先,不,你不能通过简单的附件→使用→删除方式来做到这一点,因为每个子网只有一个默认路由,并且指向igw对象(公共子网)或NAT实例(私有子网).如果将弹性IP绑定到私有子网中的计算机,则入站流量将到达实例,但出站回复流量将通过NAT实例路由回来,这将丢弃或破坏它,因为您不能通过NAT不对称地路由,这就是这里会发生的事情.

如果您的服务是TCP服务(http,远程桌面,yadda yadda),那么这是一个短暂的hackery,可以很好地工作,避免iptables的麻烦,只暴露您需要的特定服务:

在公有子网中使用ubuntu 12.04 LTS启动一个新的微实例,使用EIP和相应的安全组,允许入站Internet流量到达所需的端口.允许自己ssh访问新实例.允许从该计算机访问内部计算机.然后:

$ sudo apt-get update
$ sudo apt-get upgrade 
$ sudo apt-get install redir
Run Code Online (Sandbox Code Playgroud)

假设您要将传入端口80流量发送到私有实例上的端口80:

$ sudo redir --lport=80 --cport=80 --caddr=[private instance ip] --syslog &
Run Code Online (Sandbox Code Playgroud)

完成.您将拥有每个连接的日志,并断开与syslog中传输的端口号和字节的连接.缺点是如果您的私人主机正在查看连接机器的IP,它将始终看到专用网络实例的内部IP.

如果绑定到1024以下的端口,则只需使用sudo运行它,因为只有root可以绑定到较低的端口号.要阻止它,找到pid并杀死它,或者sudo killall redir.

这个漂亮的小redir实用程序在用户空间中发挥其魔力,使其比iptables更简单(imho).它在指定--lport端口上设置一个侦听套接字.对于每个入站连接,它会自行分配,建立与--caddron 的出站连接--cport并将两个数据流绑定在一起.它没有意识到流内部发生了什么,所以它应该适用于任何TCP.这也意味着你应该能够通过相当多的流量,尽管使用Micro.

完成后,丢弃微实例,您的网络恢复正常.