OpenVPN不会在docker中创build路由

我正在尝试在Docker容器中运行OpenVPN客户端,并使用--up/--down参数来运行应用程序。 连接正在build立,但应用程序的所有stream量仍然通过默认网关。

OpenVPN服务器在build立连接时正在推送“redirect-gateway def1”,但OpenVPN客户端不会创build其他路由来覆盖默认网关。

我试图让我的应用程序通过隧道设备拨号,这是超时。 当我从主机尝试时,这是工作。

因此,我试图手动build立路由(1个到openvpn服务器的静态路由,以及其他所有stream量的两个路由0.0.0.0/1和128.0.0.0/1,就像在主机上尝试时创build的那样),以及恢复应用程序遵循默认路线,它仍然超时。

当我使用相同的ovpnconfiguration文件从主机连接时,会build立附加路由。 所有的stream量正在通过VPN隧道,没有任何超时。

我尝试了相同的dockerconfiguration在Fedora上:最新的,Ubuntu的:最新的,阿尔派:最新的。

我怎样才能让隧道在Docker里面工作?

更新:我意识到缺less的路线是因为我运行openvpn --up/--down参数。 删除它们并以openvpn作为守护进程运行,并将我的程序作为阻塞进程运行后,路由即将创build,但请求仍然超时。 我已经在vm中testing过相同的东西,它在那里工作。

与虚拟机不同,容器共享相同的内核。 因为这个原因,容器内部的根不能像容器外的根一样访问。 否则,root用户可能会转义容器,装载设备,更改其名称空间等。容器networking是从根用户中删除的function之一。 要删除所有这些限制,你可以使用docker run --privileged ...选项来testing你的代码。 如果这样的话,你可以用各种选项来调整--cap-add 。 无论您是否获得最低限度的权限,您的主机将无法安全使用这些设置运行在容器中的stream氓应用程序。