我一直在尝试找到一种方法来允许某个子网中的服务器通过多个子网发送 UDP 广播。场景如下:
在网络 A(192.168.1.0/24)中我们有一个备份服务器(使用 urbackup),该服务器使用 UDP 广播自动发现 LAN 主机,每 50 秒发送一次广播,这在网络 A 中运行良好。
但是我们也有一个远程站点(192.168.5.0/24)也需要使用这个备份服务器,但由于自动发现在那里不起作用,我们必须手动添加所有服务器。
urbackup 服务器将在每个指定的网络接口上发送 UDP 广播,因此我可以添加另一个 IP 为 192.168.5.X 的接口,但我需要一种方法将广播传送到远程站点。
我尝试设置 GRE 隧道并使用网桥连接两个网络,但没有成功(要么是我操作不正确,要么是我漏掉了什么)。我设置了两个虚拟机并尝试了以下操作:
gre1:
ip link set dev ens192 down
ip link add gretap1 type gretap local 192.168.1.X remote 192.168.5.X
ip link set dev gretap1 up
ip link set dev ens192 up
brctl addbr br1
brctl addif br1 gretap1
brctl addif br1 ens192
ip addr add 10.0.0.1/24 dev br1
ip link set br1 up
gre5:
ip link set dev ens192 down
ip link add gretap1 type gretap local 192.168.5.X remote 192.168.1.X
ip link set dev gretap1 up
ip link set dev ens192 up
brctl addbr br1
brctl addif br1 gretap1
brctl addif br1 ens192
ip addr add 10.0.0.2/24 dev br1
ip link set br1 up
在摆弄了 GRE 两天之后,现在如果我尝试上述配置,它会导致托管 gre1 的 ESX 崩溃(不知道为什么)。
这是我们的网络图(我们在两个站点上都使用 pfSense 2.4)
我也考虑过在站点 B 上建立 L2TP VPN,但是它能提供与 DHCP 同一子网的 IP 吗?
答案1
UDP 广播流量通常不会通过您的 pfSense VPN 转发。
有一个很短的 c 程序(来源这里) 称为 udp-proxy 应该可以解决您的问题。
您可能需要运行两个 udp-proxy 副本,一个在 192.168.5.0/24 的服务器上,另一个在 192.168.1.0/24 的服务器上。
假设您的备份软件广播到端口 5000,那么您将执行以下操作:
udp-proxy 5000 $IP_OF_SERVER_ON_OTHER_SIDE_OF_VPN
然后在该远程服务器上执行以下操作:
udp-proxy 5000 192.168.1.255 # to forward to the broadcast address