Dan*_*art 4 ssh amazon-ec2 amazon-web-services
当我在可用区域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 addr并ip route显示两个接口都已启动并具有正确的路由.我甚至可以本地SSH到eth1,/ var/log/secure日志显示正确的条目,就像我连接到eth1的eth0一样.我需要做什么才能从其他服务器连接到任一接口?
问题是不对称路由.对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
Run Code Online (Sandbox Code Playgroud)
要检查那些是否正确添加使用:
ip route show table 1
ip route show table 2
Run Code Online (Sandbox Code Playgroud)
现在,您需要添加规则,根据源IP地址使用不同的表:
ip rule add from 172.31.8.244/32 tab 1
ip rule add from 172.31.12.121/32 tab 2
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法检查所有规则:
ip rule
Run Code Online (Sandbox Code Playgroud)
您现在应该能够从客户端计算机连接到任一IP地址.您还可以使用bindSSH选项从此服务器上的任一接口连接到客户端计算机:
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)
Run Code Online (Sandbox Code Playgroud)
您可以使用这两个接口连接到同一可用区中的其他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
Run Code Online (Sandbox Code Playgroud)
要跨一个VPC和一个数据中心的可用区域进行连接,您需要一个16位掩码. ip addr将会呈现:
inet 172.31.12.121/20 brd 172.31.31.255 scope dynamic eth1
Run Code Online (Sandbox Code Playgroud)
如果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
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够从可用区A中的EC2服务器连接到可用区B中的另一台主机,只要它们位于同一个VPC中,即使它们没有公共IP地址也是如此.
故障排除:
如果您遇到问题,请尝试重置两个界面,这将删除您已完成的任何手动操作.首先复制/etc/sysconfig/network-scripts/ifcfg-eth0到/etc/sysconfig/network-scripts/ifcfg-eth1,编辑第二个文件以将DEVICEfrom 更改eth0为eth1.然后添加一行/etc/sysconfig/network说明GATEWAYDEV=eth0.最后,运行/etc/init.d/network restart(不,它不应该断开你).然后重新开始上面的命令.
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |