通过 OpenVPN 和广播流量桥接远程站点

通过 OpenVPN 和广播流量桥接远程站点

我正在尝试在两个站点之间建立 VPN 连接。

  • 远程站点正在运行一个摄像头,它使用 TCP 广播视频,另外还使用 mDNS/Bonjour 在网络上宣传自己。
  • 中间是一台在云提供商上运行的 Linux 服务器,托管着一个 OpenVPN 服务器
  • 远程站点的路由器(ASUS ROG Rapture GT-AX11000)通过 OpenVPN 连接到服务器
  • 当地站点有一台笔记本电脑,可以连接到摄像机并接收广播。

以下是该架构的示意图:

到目前为止我已经使用过这个脚本设置 OpenVPN 和客户端配置。但我看不到广播(这是预期的)。

我必须做什么才能确保在笔记本电脑上本地看到广播流量?

我已将我的 OpenVPN 配置更改为使用(选定部分):

port 1194
proto udp6
dev tap
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 94.140.14.14"
push "dhcp-option DNS 94.140.15.15"
push "redirect-gateway def1 bypass-dhcp"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key
crl-verify crl.pem
ca ca.crt
cert server_rgpYVq742Cz4eLEj.crt
key server_rgpYVq742Cz4eLEj.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
client-config-dir /etc/openvpn/ccd
verb 4
client-to-client
log-append /var/log/openvpn.log

这有效并允许笔记本电脑和路由器连接,尽管我只能访问路由器,而不能访问摄像头及其广播。

我现在也明白我需要的不是典型的服务器桥,它假设 OpenVPN 服务器位于外部客户端连接的路由器后面。

相反,我需要利用华硕路由器的功能将来自 LAN(带有摄像头)的流量桥接到 VPN 网络。

这是可能的吗?如果可以,怎么做?

答案1

从我的角度来看,将 VPN 更改为 TAP 设置是解决您的问题的唯一方法。让我深入了解一下细节:

您当前设置的路由 VPN 设置在网络层 3 上工作。您已经注意到,您需要通过 来通告任何应该通过 VPN 的网络iroute。但广播的工作方式不同,并且有许多广播位于网络层 2 - 您将无法通过路由 VPN 使它们工作。(而且我还没有谈到多播......)

这就是 TAP-VPN 发挥作用的地方:它不是在网络层工作,而是在第 2 层工作:这种 VPN 包装以太网帧。这意味着任何广播都可以正常工作 - 代价是更高的开销(任何 IP 数据包上的以太网报头)。但到目前为止,您只是将您的位置与以太网连接起来 - 您仍然需要在此基础上设置您的 IP 配置。有许多可能的配置:

  • 在服务器端,您可以在 eth 和 tap 网络适配器之间建立桥接,并将 ip 配置留给该站点上运行的 DHCP 服务器
  • 你可以为你的 VPN 创建一个专用网络,并让你的 VPN 服务器分配 IP

读完您的问题,最适合您的设置可能是桥接 - 本地客户端和 VPN 客户端位于同一网络上。这部分与 vpn 无关;openvpn 只提供以太网数据包,由运行 openvpn 的 linux 负责将该以太网帧“填充”到正确的网络中。

这就是您提到的脚本的目的。关于这些值,您需要考虑一个合适的网络布局,并实现它。

让我举个例子:文件/etc/network/interfaces

auto br0
iface br0 inet static
    address 192.168.100.10/24
    gateway 192.168.100.1
    bridge_ports eth0
    bridge_stp   off
    bridge_fd    0
    bridge_maxwait 0

启动openvpn,并执行以下操作:

ifconfig tap0 up
brctl addif br0 tap0

这是我在启动时设置网络桥的配置 - 允许 openvpn 服务器稍后启动(并在启动后添加到桥中)。

如果您想使用提供的脚本进行此设置,您需要了解正在发生的事情:脚本正在尝试创建桥接,并且需要将“真实”以太网接口添加到桥接中。为了做到这一点,它需要从 eth0 接口中删除任何 ip 配置,创建桥接,将 eth0 添加到其中,并将之前在 eth0 上的 ip 配置提供给桥接接口。由于连接丢失,我在启动时设置了桥接 - 这样,我就可以启动和关闭 openvpn 而不会丢失与本地网络的连接。

这样,每当 vpn 客户端发送 DHCP 请求时,该请求将被转发(在我的示例中)到本地网络,并由用于本地客户端的同一 DHCP 服务器进行应答。我强烈建议您阅读有关 linux 桥接的内容 - 如果您想知道自己在做什么,这方面的知识至关重要。

[编辑]
关于我示例中的 IP 地址 - 正确的值取决于您的 openvpn-server 的位置!对于我的示例,openvpn-server 在路由器后面的设备上运行 - 这就是我将 .1 指定为网关的原因。如果您的 openvpn 在您的网关上运行,则需要相应地修改这些值!根据您的设置,您甚至可以通过 dhcp 分配 br0 接口的 IP...

说到server-bridge配置选项,让我们看看这个选项是做什么用的。免于这里

例如server-bridge 10.8.0.4 255.255.255.0 10.8.0.128 10.8.0.254扩展如下:

模式服务器 tls-server

ifconfig-pool 10.8.0.128 10.8.0.254 255.255.255.0 推“路由网关 10.8.0.4”

注意ifconfig-pool指令!此选项只是那些希望将配置文件尽可能简短的人的捷径。但是,如果您希望 VPN 客户端通过 DHCP 获取 IP,则此指令在您的设置中是错误的!它将配置您的客户端的 IP 配置,而不是将其留给 DHCP 服务器...

[编辑2]
在回复评论时,需要进行一些澄清。桥接是什么意思?这意味着您在连接的适配器之间创建以太网连接,就像网络交换机一样。在您的设置中,您在两个 openvpn 客户端和服务器的 eth 接口之间创建了一个链接。该接口通向哪里?按照您的图片,它会进入公共互联网 - 这不是您想要实现的!您需要创建一个到相机的桥梁......

创建桥接器意味着将虚拟网络连接到真实网络。为了能够从“本地站点”的笔记本电脑访问摄像头,您需要将数据包从 VPN 网络传输到远程站点的真实网络 - 并且只有在 VPN 和远程站点的真实网络之间有桥接器时才有可能。

相关内容