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