如何在同一子网

时间:2016-09-02 18:44:31

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

当我在可用区us-east-1a中启动Amazon EC2 CentOS 7服务器时,会自动为服务器分配eth0上的主私有IP地址,例如172.31.8.244/20和172.31的网关。 .0.1。如果我然后在eth1上附加第二个接口,我可以指定地址,该地址需要在172.31.0.0/20子网内(或者一个子网将在该子网内自动分配给我)。 Eth1将与eth0具有相同的网关。让我们说我被分配了172.31.12.121/20。我在eth0和eth1上使用相同的安全组,它只允许SSH和一切。

问题是,当我尝试从不同的服务器SSH到eth0时,它工作正常。但是当我尝试SSH到eth1时,我得到了超时。 ip addrip route表明两个接口都已启动且路由正确。我甚至可以本地SSH到eth1,/ var / log / secure日志显示正确的条目,就像我连接到eth1的eth0一样。我需要做什么才能从不同的服务器连接到任一接口?

1 个答案:

答案 0 :(得分:5)

问题是不对称路由。对eth1的请求出现在eth1中,并且出去了eth0。在eth0上发出的回复具有与请求中不同的IP地址,因此它在客户端被删除。解决方案是设置允许响应通过eth1路由的规则。

首先,确保您已经创建了服务器的AMI,因为如果您在以下步骤中输入错误的内容,您可能会丢失与服务器的所有连接,并且无法执行任何操作,只能从Amazon控制台网页重新启动它。

首先在单独的表中为每个接口设置默认路由:

ip route add default via 172.31.0.1 dev eth0 tab 1
ip route add default via 172.31.0.1 dev eth1 tab 2

要检查这些是否已正确添加,请使用:

ip route show table 1
ip route show table 2

现在,您需要添加规则,根据源IP地址使用不同的表:

ip rule add from 172.31.8.244/32 tab 1
ip rule add from 172.31.12.121/32 tab 2

您可以使用以下方法检查所有规则:

ip rule

您现在应该可以从客户端计算机连接到任一IP地址。您还可以使用SSH的bind选项从此服务器上的任一接口连接到客户端计算机:

ssh centos@client_ip_address -i mykey.pem  (uses the default, eth0)
ssh -b 172.31.12.121 centos@client_ip_address -i mykey.pem  (uses eth1)
ssh -b 172.31.8.244 centos@client_ip_address -i mykey.pem  (uses eth0)

您可以使用两个接口连接到同一可用区中的其他EC2服务器,并且对于分配了公共IP的任何接口,您可以连接到外部世界或同一VPC中的其他EC2服务器,甚至如果他们在不同的可用区域。

但是,如果要连接到同一VPC但不同可用区域的其他EC2服务器,该怎么办?换句话说,服务器位于同一数据中心。问题是私有IP地址被屏蔽为20位,这限制了您到一个可用区。因此,对于数据中心us-east-1,您有:

us-east-1a:  172.31.0.0/20
us-east-1b:  172.31.16.0/20
us-east-1d:  172.31.48.0/20
us-east-1e:  172.31.32.0/20

要跨一个VPC和一个数据中心的可用区域进行连接,您需要一个16位掩码。 ip addr会显示:

inet 172.31.12.121/20 brd 172.31.31.255 scope dynamic eth1

如果losf -n | egrep 172.31.12.121显示该地址未被使用,您可以添加新掩码并删除旧掩码。请注意,广播地址必须在掩码更改的同时更改:

ip addr add 172.31.12.121/16 dev eth1 brd 172.31.255.255
ip addr del 172.31.12.121/20 dev eth1

现在,您应该能够从可用区A中的EC2服务器连接到可用区B中的另一台主机,只要它们位于同一个VPC中,即使它们没有公共IP地址。

<强>疑难解答:

如果您遇到问题,请尝试重置这两个界面,这将删除您所做的任何手动操作。首先将/etc/sysconfig/network-scripts/ifcfg-eth0复制到/etc/sysconfig/network-scripts/ifcfg-eth1,然后修改第二个文件,将DEVICEeth0更改为eth1。然后在/etc/sysconfig/network添加一行代表GATEWAYDEV=eth0。最后,运行/etc/init.d/network restart(不,它不应该断开你)。然后从上面的命令开始。