这里我有一些问题(可能略有不同),但彼此相关,因此我更喜欢在一个问题中提出它们。
我一直在尝试允许我的 OpenVPN 客户端(OpenVPN 设置为桥接模式)连接到 Docker 容器。
众所周知,Docker 容器都是通过桥接(docker0
桥接或其他方式)相互连接的。
br0
我以前总是在家用服务器上使用自己的网桥 ( ),我设置 Docker 以使用该网桥 ( br0
),并tap0
在该网桥上桥接 OpenVPN 接口 ( ) 和我的物理接口 ( eth0
),该接口通过 LAN 连接到我的家用路由器。这对我来说总是有效的,并且所有 OpenVPN 客户端始终能够访问桥接的每个 Docker 容器br0
(OpenVPN 客户端和 Docker 容器的 IP 都在我的 LAN 范围内)。
几天前,我租了一个 VPS,我的物理接口直接连接到互联网(它有唯一的公共 IP)。
我做了和以前一样的事情(设置 Docker 以使用我的 IP 来处理所有容器),并在 上br0
桥接了 OpenVPN 。tap0
br0
我遇到的问题是,我的 OpenVPN 客户端无法 ping 通或访问任何 Docker 容器(容器可以 ping 通并访问其他 Docker 容器,但不能访问 OpenVPN 客户端),而且客户端之间也无法互相 ping 通。
这是否与我没有桥接物理接口有关?如果是,我想知道为什么除了 OpenVPN TAP 接口之外,我还要桥接服务器的接口(可能通过 LAN 连接到任何路由器)才能在桥接模式下使用 OpenVPN?
这个问题在我脑海中引发了另一个相关问题:只要客户端是tap0
接口的一部分,为什么它们不能简单地相互访问,而无需出于某种原因离开 TAP 接口。我的物理接口扮演什么角色?
如果我的问题确实是因为没有桥接的物理接口,那么如何才能让 OpenVPN 在没有该物理接口的情况下在桥接模式下完全发挥作用(或者至少只要我的物理接口直接连接到互联网而没有任何 LAN,也许有任何解决方案)?
我希望有人能帮助我让 OpenVPN 正常工作
添加:
看了一些视频后,我仍然有疑问,如果我有两个TAP
接口,每个接口都映射到一个virtualbox
系统。tap0 -> vb0
,,tap1 -> vb1
并且两者都tap0 and tap1
连接到一个桥接器br0
(不连接到任何物理接口),只有tap0
和tap1
桥接在一起,才能vb0 and vb1
互相ping通吗?(我现在对任何类型的外部连接都不感兴趣)。根据@shodanshok答案是,不会,对吧?到现在我还不能确切地理解为什么他们不能,你能详细解释一下这一点吗?
答案1
OpenVPNtap
接口在 ISO/OSI 模型的第 2 层运行,因此需求与主要真实接口的第 2 层(读取:桥接器/交换机)连接。
我强烈建议您重新配置您的 OpenVPN 连接以使用tun
在堆栈的更高级别(级别 3)上运行的接口,这些接口不需要与主接口的桥接连接(而是,它们按照路由表中指定的方式路由数据包)。
请查看“服务器桥”部分openvpn 手册页了解更多信息。
答案2
好的,经过大量实验后,现在我可以回答我的问题并分享我的经验:
我是否需要一个桥接器(例如br0
在 Linux 上)才能OpenVPN
在桥接模式下运行?
不!我一直认为相反,但现在我可以确认,只要您OpenVPN
正确配置,您就可以OpenVPN
直接连接所有客户端,它们将处于自己的隔离网络中。即tap0
接口不是任何桥接的一部分。因此,也不需要任何与桥接的物理接口tap0
,只需tap0
正确配置OpenVPN
即可完成工作!
为什么它最初对我不起作用?(现在起作用了!)
问题其实出在客户端!我一直认为,OpenVPN
客户端都是我的 LAN IP 范围,因此无需额外防火墙设置是必要的,但是现在,IP 范围不同了(网络是一个新的隔离网络),因此所有客户端的 Windows 防火墙只是丢弃了来自其他客户端的所有 ping,当我禁用它(或允许我的OpenVPN
IP 池范围)连接时,一切都完美无缺!
Docker 怎么样?您是否能够桥接容器tap0
并连接到客户端的容器OpenVPN
?
是的!我只是使用了一个非常简单的配置(网络掩码和 IP 范围相同),网络掩码/24
,一切都非常基础,只是为了确保一切正常,一切真的正常!