跨平台管理TUN接口的方法

时间:2018-10-22 15:00:11

标签: macos docker networking vagrant tun

TL; DR

我想在分配给我主机的该接口的本地网络上创建一个虚拟网络接口(TUN接口?)和一个IP地址,然后运行一个侦听该接口上端口X的进程(例如HAProxy)。有没有解决这个问题的方法?

  • 可以在Linux和Mac上使用吗?
  • 依靠我可以依赖的标准CLI工具在Linux / Mac开发计算机上提供或易于安装吗?

上下文

我希望能解决Mac缺乏对桥接网络的支持的Docker。

目前,在我的应用程序上工作的开发人员可以通过Vagrant在VirtualBox VM中启动开发环境。 Virtualbox会建立一个虚拟接口vboxnet1,并在本地IP地址范围inet addr:172.16.0.1 Bcast:172.16.0.255中为其分配一个IP地址,然后 流浪的hostmanager插件,然后编辑/etc/hosts以添加指向的条目 myapplication.dev映射到IP地址172.16.0.1。现在,开发人员只需将他们的浏览器指向myapplication.dev,流量就会被定向到VM内的HTTP服务器,侦听端口80和443。这可以跨平台无缝地工作。

我希望重现这种体验,除了让应用程序在Docker容器中而不是在虚拟机中运行。在Linux上,这很简单。我可以在桥接模式下运行容器,我将获得一个docker0接口和将被路由到我的容器的本地ip。但这在Mac上根本不可能。每个Docker for Mac's documentation

  

macOS上没有docker0桥

     

由于在Docker for Mac中实现联网的方式,您无法在主机上看到docker0接口。该界面实际上是在虚拟机中...

     

适用于Mac的Docker无法将流量路由到容器。

建议:

  

我们当前的建议是发布端口,或从另一个容器连接。即使容器在覆盖网络而不是桥接网络上,这也是在Linux上也需要执行的操作,因为这些容器未路由。

这真是个无赖,但至少是一个起点。

最简单的方法是直接转发端口443和80,并将myapplication.dev映射到127.0.0.1;但是,不幸的是,这将阻止开发人员在其主机上运行其他应用程序以侦听443和80,许多人都这样做。

另一种方法是将主机上的端口20443和20080(不太可能使用)转发到容器内的443和80。然后,要求开发人员运行带有简单HAProxy的Vagrant VM,该HAProxy监听virtualbox1网络上的443和80,以某种方式将流量转发到主机上的20443和20080,并依靠Vagrant hostmanager插件来映射{{ 1}}。这会行得通,但是将整个虚拟机启动以运行HAProxy只是为了将TCP改组到不同的端口似乎并不令人满意。我宁愿直接管理TUN界面。

这实际上是我职业生涯中第二次遇到这个确切的问题。所以我想我会在公共场所写这篇文章,希望能得到一些建议或见解,并让其他任何参与其中的人迅速起步。

0 个答案:

没有答案
相关问题