Dockernetworking和VLAN

(主机)VLAN接口上的Dockernetworking,我有一个问题。

我尝试通过VLANnetworking将docker容器ssh移出到服务器,但无法build立连接(超时)。

设置:

我有两台机器(让我们称之为服务器和笔记本电脑)连接

  • 一个networking使用vlan(让我们称之为“私人”)
  • 一个“正常”的networking(让我们称之为“公共”)

我尝试使用专用networking从笔记本电脑上的容器通过SSH连接到服务器

诊断步骤:

  • 一个“原生”的SSH连接工作正常,使用私人公共networking。
  • 从笔记本电脑上的容器到使用公共networking的服务器的SSH连接是可能的。
  • wireshark(在笔记本电脑vlan接口上监听)告诉我发送了一个[SRV]软件包,服务器用[SRV,ACK]响应。 但是,容器似乎没有收到这个信息,导致服务器的[SRV,ACK]重新传输,也导致容器中新的[SRV]包。

  • 我开始了一个监听0.0.0.0 (在所有接口上)的nginx容器 – 它可以从公共networking访问,但不能从私有networking访问

  • 我在笔记本电脑上本地安装了nginx ,再次监听所有接口。 这是通过这两个networking, 私人公共

所以这个问题似乎与“docker和vLAN”有关:wireshark此外暗示“传出”是可能的,但“传入”不是。

有任何想法吗?

目前最好的select是使用(当前)实验性function“ Ipvlan Network ”。

Linux实现非常轻便,因为它们不是使用传统的Linux桥接进行隔离,而只是将其与Linux以太网接口或子接口相关联,以实现networking之间的分离以及与物理networking的连接。

这个文档是相当大的,不能在这里复制,但是,一旦安装实验版本,创buildipvlannetworking并运行一个附加的容器,你应该运行:

Ipvlan

 docker network create -d ipvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o ipvlan_mode=l2 \ -o parent=eth0 db_net 

在db_netnetworking上启动一个容器

 docker run --net=db_net -it --rm alpine /bin/sh 

在那个页面上还有很多东西需要阅读。

几个注意事项:

  1. -o ipvlan_mode=如果未指定,则默认为L2模式

  2. 这些容器不能 ping通底层的主机接口,因为它们被Linux有意地过滤以获得额外的隔离。

  3. 实验意味着它被认为没有准备好生产,并可能有一些错误。 该文档指出,它“提供了在沙箱环境中的testing和评估”。