在 AWS OpenVPN 多 VPC + ClassicLink 上路由

在 AWS OpenVPN 多 VPC + ClassicLink 上路由

我在 AWS 中设置的多区域网络中的服务器之间进行连接时遇到了问题,因为并非所有服务器都可以从网络中的任何点访问。

我通过 openvpn 隧道将 eu-central-1 中的一个 VPC (A) 连接到 eu-southeast-1 中的另一个 VPC (B),第二个 VPC 通过 ClassicLink 连接到 EC2-Classic (EC2) 节点。此连接通过几个对等服务器建立,VPC A 中的 peering-a 和 VPC B 中的 peering-b。用户通过 openvpn 服务器 vpnserver-a 通过 openvpn 连接到 VPC A。

网络图是这样的:

+---------+   +---------+   +---------+   +----+
|user     |   |VPC A    |   |VPC B    |   |EC2 |
|172.20/16+---+172.29/16+---+172.31/16+---+10/8|
+---------+   +---------+   +---------+   +----+
           VPN           VPN       ClassicLink

问题是我无法建立任何这些联系:

  • 用户到 EC2 中的任何节点
  • VPC A 中的任意节点到 EC2 中的任意节点
  • EC2 中的任意节点到 VPC A 中的任意节点

从用户到 VPC A 和 B 以及 VPC A 和 B 之间的连接运行正常。

我怀疑路由存在问题,但我无法解决。

路由设置如下:

  • vpnserver-a 向用户发布路由 172.29/16、172.31/16 和 10/8(openvpn 配置文件)
  • peering-a 将路由 172.31/16 和 10/8 发布到 VPC A(openvpn 配置文件)
  • peering-b 将路由 172.29/16 和 172.20/16 发布到 VPC B(openvpn 配置文件)
  • VPC A 中的路由表将 172.31/16 和 10/8 路由到 peering-a(AWS VPC 子网路由表)
  • VPC B 中的路由表将 172.29/16 和 172.20/16 路由到 peering-b(AWS VPC 子网路由表)

网络 ACL 对这些子网之间的所有流量开放。安全组也设置为接受连接。

我使用 tcpdump 进行了一些(基本)数据包检查,试图了解路由是否正常工作,结果如下: - 尝试从 VPC A 中的 node-a 连接到 EC2 中的 node-ec2,我可以看到数据包经过 peering-a 和 peering-b,但无法到达 node-ec2 - 尝试从 node-ec2 连接到 node-a,我甚至看不到数据包到达 peering-b

因此我怀疑 ClassicLink 中的路由涉及我不知道的额外配置。

我该如何设置缺失的路线?这可能吗?

谢谢!

答案1

ClassicLink 不支持访问 VPC 之外的任何内容。

您注意到没有适用于流量的路由表ClassicLink——从那里回到此 VPC 中的实例的路由是隐式的,因此无法将外部流量传送回您的“peering-b”实例。

严格来说,下文并没有具体说不行,因为他们指的VPN连接都是VPC的硬件VPN服务提供的VPN连接,而不是你用自己的实例设计的连接……

ClassicLink 不支持 VPC 外的传递关系。您链接的 EC2-Classic 实例将无法访问与 VPC 关联的任何 VPN 连接、VPC 终端节点或 Internet 网关。同样,VPN 连接或 Internet 网关另一端的资源也无法访问链接的 EC2-Classic 实例。

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html#classiclink-limitations

...然而,影响是存在的,而且 ClassicLink 机器没有可配置的 VPC 路由表来处理流向 VPC 的流量,这意味着从技术上讲,你甚至没有办法试图配置您的 VPC 按照此场景要求的方式工作。

相关内容