我正在尝试通过 tx.py 程序进行通信,以便将数据包 (UDP) 发送到图中所示的设备 1 和设备 2。目前,我们在 2 个虚拟机上运行着 OpenVPN 客户端,如果我在这些虚拟机上运行 tx.py,我就可以与连接到该 VPN 隧道的每个设备顺利通信(因此,从虚拟机 2 可以到达设备 1,但不能到达设备 2)。
我希望能够从 vm1 路由,以便我可以从这个中心位置发送到设备 1 或设备 2。我尝试在 vm1 上添加到设备 1 的路由(通过 VM 2),route add -net 100.64.226.0 netmask 255.255.255.0 gw 10.2.6.20 dev eth0
但仍然无法在设备 1 上接收数据包。还尝试为 vm1 和 vm2 切换 IP 转发,但这并没有解决问题。
有什么办法可以做到这一点?
请注意,我不需要从设备与 vm1 进行备份通信。
注意:我无法控制 openVPN 服务器,也无法更改那里的配置。
答案1
您需要使用连接到 10.2.6.0 子网的路由表来设置用户定义路由,以便 Azure 知道通过 10.2.6.20 路由到 10.64.226.0,对于设备 2 也类似。您仍然需要确保在 Azure 网络适配器、OS 网络适配器和 OS 路由表(双向)中启用了路由(IP 转发)功能。
https://docs.microsoft.com/en-us/azure/virtual-network/manage-route-table
Azure 会自动在 Azure 子网、虚拟网络和本地网络之间路由流量。如果要更改 Azure 的任何默认路由,可以通过创建路由表来实现。
https://petri.com/implementing-azure-user-defined-routing
如果您使用 Azure 网关进行 VPN 连接,本地网络设置将为您的子网提供到本地网络的路由。但是,当您在虚拟机中部署自己的 VPN 解决方案(这就是虚拟设备)时,默认情况下,没有任何内容可以告诉 Azure 如何将子网流量路由到本地网络。
网上有很多例子,大多与下一代防火墙(即强制 Azure 通过防火墙设备路由)和 Hyper-V(即设置 Azure 通过虚拟 Hyper-V 主机路由到内部 Hyper-V 网络)有关。
答案2
据我所知,如果不更改 Openvpn 服务器配置,这是不可能的。
我已经使用基于证书的身份验证实现了类似的场景,并且它正在工作。我假设这是一个 road-warriro 设置,而不是站点到站点的连接。这意味着,VPN 服务器只知道一个客户端,而不知道试图通过同一客户端连接的其他机器。从安全角度来看,这对我来说也是有意义的。
现在,如果更多机器需要通过客户端计算机连接,它将充当网关,这可以在 Openvpn 服务器上配置。有关设置的详细说明可以在此处找到:
请参阅:使用路由 VPN (dev tun) 时在客户端包含多台机器