我想使用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)的实例向私有子网上的任何实例提供某种端口...但这看起来很麻烦。
还有其他办法吗?
答案 0 :(得分:17)
当然,私有子网中的东西在私有子网中,因为它不应该从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
假设您要将传入端口80流量发送到私有实例上的端口80:
$ sudo redir --lport=80 --cport=80 --caddr=[private instance ip] --syslog &
完成。您将拥有每个连接的日志,并断开与syslog中传输的端口号和字节的连接。缺点是,如果您的私人主机正在查看连接机器的IP,它将始终看到专用网络实例的内部IP。
如果绑定到1024以下的端口,则只需使用sudo运行它,因为只有root可以绑定到较低的端口号。要停止它,找到pid并将其杀死,或sudo killall redir
。
漂亮的小redir
实用程序在用户空间中发挥其魔力,使其比iptables更简单(imho)。它在指定的--lport
端口上设置一个侦听套接字。对于每个入站连接,它会自行分配,在--caddr
上建立与--cport
的出站连接,并将两个数据流绑定在一起。它没有意识到流内部发生了什么,所以它应该适用于任何TCP。这也意味着你应该能够通过相当多的流量,尽管使用Micro。
完成后,丢弃微实例,网络恢复正常。
答案 1 :(得分:2)
我建议你设置一个VPN服务器。此脚本创建VPN服务器而无需做太多工作:https://github.com/viljoviitanen/setup-simple-openvpn
根据需要停下来开始。
答案 2 :(得分:2)
根据您的要求,您最终可能会直接向igw投入静态路线。
例如,如果您知道要在其上允许流量的互联网上的来源,则可以输入路线x.x.x.x / 32 - > igw进入您的私人路由表。因为您的实例附加了EIP,所以它将能够到达igw,并且流向该目的地的流量将转到它应该的位置而不是NAT。
我几次使用这个技巧进行短期访问。显然,这是一个短期的解决方法,并不适用于prod环境,只有在你知道你的互联网流量来自哪里时才有效。
答案 3 :(得分:0)
1-使用Redir实用程序从临时EC2实例到NAT专用子网。 对于此选项,请考虑最少的介入。可以通过创建系统服务使其持久化,以便在重新启动的情况下再次创建套接字。 2静态路由表 这需要对AWS VPC有中级或高级的知识,并且根据您可能需要处理AWS Route 53的情况而定 3-VPN: 这可能意味着要处理Amazon IGW以及一些额外的步骤。
对我而言,最好的解决方案是1加上不同的端口映射,从而在AWS 53,安全组限制中创建DNS记录。要求相反:将连接保持不变,以使某些用户每天可以访问,并在某些时候可以停止EC2实例。