这是我的设置:

  • 我在us-east-1a中有3个实例
  • instanceA位于带有publicIP
  • 的公共(public)子网中
  • instanceB在没有publicIP的私有(private)子网中
  • instanceC位于带有publicIP
  • 的公共(public)子网中
  • 我将instanceC放在NLB后面。 NLB位于公共(public)子网us-east-1a和us-east-1b上
  • instanceC的安全组为:
  • 允许来自instanceA的公共(public)IP的SSH
  • 允许来自instanceB的专用IP的SSH

  • 我可以直接从instanceA和B SSH到instanceC,没有任何问题。
    但是每当我通过SSH进入NLB的DNS时,我只能从instanceA连接。
    每当我从instanceB SSH到NLB时,连接就会超时。

    我检查了NLB的网络接口(interface),发现每个NLB的可用区都有一对公用和专用IP。

    我可以从instanceA SSH到NLB的公用IP地址,但不能SSH到NLB的privateIP。
    我可以从instanceB SSH到NLB的私有(private)IP地址,但不能SSH到NLB的publicIP。

    现在,我尝试使用ssh -vvv NLB,可以看到我正在尝试连接到NLB的公共(public)IP。这可能就是为什么我无法从instanceB连接到NLB的原因,因为如上所述,instanceB只能连接到NLB的privateIP。

    我试图修改InstanceC的sg,并允许从0.0.0.0/0开始使用ssh,我可以从instanceB成功访问NLB。但这不是我想要的。我不想让所有人都通过NLB访问instanceC。

    我也希望instanceB能够像实例A一样通过NLB切换到instanceC。我该怎么做?我需要在sg,nlb,az等中进行哪些修改?

    谢谢!

    最佳答案

    为了解决您的问题中的一个方面...

    您应避免将Amazon EC2实例的IP地址放入安全组。如果希望允许两个实例进行通信(例如,实例A与实例C对话),则应配置:

  • 实例A上的安全组(SG-A),允许(大概)来自Internet的传入流量
  • 实例C上的安全组(SG-C),它允许来自SG-A的入站流量

  • 也就是说,SG-C应该专门引用SG-A。该引用将自动转换为安全组ID(例如sg-xxx)。这意味着SG-A关联的任何实例都将被允许在给定端口上进行与SG-C 关联的任何实例的入站连接。

    这种方法的好处是可以替换实例或更改IP地址,而不会影响安全组。您还可以将其他实例添加到这些安全组中,它们将被自动授予相同的权限。

    底线:避免引用安全组中的特定专用IP地址。

    08-08 01:28