在处理 IoT 类型的事情时,我想通过 EC2 实例上的 OpenVPN 将一些“野外”设备连接到 AWS 中的服务器。
到目前为止,我已经能够设置一个配置为 OpenVPN 服务器的 EC2 实例,并且我的客户端设备已成功连接到 VPN。这一切都是使用本指南设置的 -https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-6
OpenVPN 客户端获取 10.8.0.x IP,并可以通过这些 IP 相互通信。我还可以从 OpenVPN 服务器本身与这些 IP 通信。到目前为止一切顺利。
我在 AWS 上还有其他 EC2 实例,与 OpenVPN 服务器位于同一 VPC 和子网中。这些实例目前无法通过其 10.8.0.x IP 访问 OpenVPN 客户端。OpenVPN 客户端可以通过其私有子网 IP(10.101.xx)访问实例,但它们仅使用 OpenVPN 服务器的 IP 地址来表示自己。
我需要怎么做才能:
A. 启用 EC2 实例向各个 OpenVPN 客户端设备发送消息(可能通过其 OpenVPN 地址,但也欢迎其他选项)。
B. 当 EC2 实例向服务器发送消息时,让它们看到客户端的原始 IP 地址,而不仅仅是服务器的 IP。——这实际上是次要的,因为客户端会在他们的请求中识别自己。
编辑
设备位于不同的地理位置,不在一个共同的 LAN 上,每个设备都通过 3G/4G 连接。每个设备都需要向所有 EC2 实例发送消息,而每个 EC2 实例都需要向部分设备发送消息。
/- AWS VPC & public subnet ----------------\
| |
deviceA ----+-\ /-- ec2_A |
10.8.0.a | | | 10.101.0.a |
_______ | >- OpenVPN server ------< |
| | 10.8.0.1 / 10.101.0.x | |
deviceB ----+-/ \-- ec2_B |
10.8.0.b | 10.101.0.b |
\------------------------------------------/
答案1
A. 启用 EC2 实例向各个 OpenVPN 客户端设备发送消息(可能通过其 OpenVPN 地址,但也欢迎其他选项)。
我不太清楚你的想法。首先,你需要允许在 AWS 中在网络内进行通信。如果 10.101.x. 是实例的私有子网 IP,那么 10.10.0.x 是什么?
此外,您的 EC2 实例中配置了哪些路由?ip route
会告诉您。他们需要知道要联系谁(在本例中是您的 OpenVPN 服务器)才能到达客户端 (10.8.0.x):(ip route add 10.8.0.0/24 via $vpn_ip
其中 $vpn_ip 是 EC2 实例的 OpenVPN 服务器的“已知”IP,即 10.10.0.?)。
如果 EC2 实例需要能够发起与特定用户的连接,他们需要知道这些用户(例如谁拥有哪个 IP),否则用户需要启动连接。
B. 当 EC2 实例向服务器发送消息时,让它们看到客户端的原始 IP 地址,而不仅仅是服务器的 IP。——这实际上是次要的,因为客户端会在他们的请求中识别自己。
EC2 实例将看到您的用户内部 IP 地址(10.8.0.x),并通过 openVPN 服务器上的 ipp.txt(状态文件)或通过了解静态 IP 将它们与用户(证书)关联起来。
您可以client-config-dir
在 OpenVPN 的服务器配置中使用它来指定用户特定的指令(例如您的 EC2 实例知道的静态 IP),但如果您有许多客户端,这可能是一个糟糕的解决方案。