我已配置在 Azure 中运行的 OpenVPN 网络 10.8.0.0/24(网络 A)。Linux VM 的 IP 是 Azure 中 10.1.0.0/24 网络上的 10.1.0.4(网络 B)。我还配置了一个路由器作为 OpenVPN 客户端,它有自己的子网 192.168.1.0/24(网络 C)。
在 Azure 中,有一个 IP 为 10.1.0.5 的 Windows Server VM。远程路由器上有一个 IP 为 192.168.1.223 的设备。
总结一下,我有以下网络:
- 10.8.0.0/24(OpenVPN 网络)
- 10.1.0.0/24(Azure 虚拟网络)
- 192.168.1.0/24(远程路由器的 LAN)
这些设备:
- 10.1.0.5(Azure 中的 Windows Server VM)
- 10.1.0.4(Azure 中的 Linux VM/OpenVPN 服务器)
- 10.8.0.3(路由器作为 OpenVPN 网络上的客户端)
- 192.168.1.223(路由器局域网上的设备)
我已经设置了路由表,以便 IP 192.168.1.223 上的设备和 IP 10.1.0.5 上的 Windows Server VM 可以相互通信。一切正常。
当我想从设备向 Windows Server VM 发送 SNMP 陷阱 (UDP 162) 时,就会出现问题。数据包通过源 IP 10.8.0.3(OpenVPN 网络上的路由器 IP)接收。我希望 SNMP 数据包通过来自 192.168.1.223 上的设备的源 IP 到达,这是它们的实际来源。
是否可以使用远程路由器的 client.conf 文件中的某些 POSTROUTING 规则或配置来实现?
答案1
通过查看路由器配置,我能够解决这个问题。我使用的路由器是 Teltonika RT950,它基于 Linux,具有内置流量规则,允许进行源 NAT 配置,并提供出色的 OpenVPN 支持。
通过添加一条规则,为从 LAN 到 VPN 的端口 162 上的 UDP 数据包分配 SNAT IP 192.168.1.223(OpenVPN 客户端配置在路由器中显示为单独的区域),Windows Server 接收的数据包现在将源 IP 设置为 192.168.1.223。