Docker容器的网络接口处于混杂模式下

8
组建一个由三个服务构成的架构和一个虚拟桥接网络,将这三个服务连接到它上面。我想让其中一个容器能够听取虚拟网络中的所有流量(混杂模式)。这可能吗?我已经尝试了几乎所有方法,但似乎都没有起作用。
我尝试过以下方法:
- 给容器完全权限。 - 将容器的eth0接口设置为混杂模式(ifconfig eth0 promisc)。 - 重新启动容器内的网络管理器。 - 从主机机器上以混杂模式设置相对于容器的veth。 - 修改pipework脚本中macvlan配置中的模式从“bridge”改为“passthru”。 - 在docker-compose文件的网络属性中将容器设置为网关。
尽管许多尝试结果都导致容器的eth0接口处于“认为”自己在混杂模式下,实际上ifconfig和syslog(来自主机)都显示是这样,但容器仍然只看到自己的流量。
我正在使用Docker 1.11,容器内的基础镜像是Ubuntu 14.04:latest。
以下是我的docker-compose文件:
docker-compose.yml
提前感谢!
version: '2'

networks:

  snort_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.19.0.0/24
          gateway: 172.19.0.3

services:

   mysql:
     build:
       context: .
       dockerfile: MySql/MySqlFile
     environment:
       - MYSQL_ALLOW_EMPTY_PASSWORD=yes
     networks:
       snort_net:
         ipv4_address: 172.19.0.2

   snort:
     build:
       context: .
       dockerfile: Snort/SnortFile
     depends_on:
       - snorby
     env_file:
       - Snort/snort_variables.env
     networks:
       snort_net:
         ipv4_address: 172.19.0.3
     expose:
       - "80"
       - "21"
     ports:
       - "10100:80"
       - "10101:80/udp"
       - "21:21"
     cap_add:
       - NET_ADMIN
     privileged: true


   snorby:
     build:
       context: .
       dockerfile: Snorby/SnorbyFile
     depends_on:
       - mysql
     env_file:
       - Snorby/snorby_variables.env
     networks:
       snort_net:
         ipv4_address: 172.19.0.4
     ports:
       - "3000:3000"
2个回答

1

我能够通过以下命令让它工作,因为我决定关闭监听所有流量而创建容器。

administrator@gitlabrunner-prod01:~$ docker run --rm --privileged -t -d -p 23:22 --name ubuntu ubuntu

0

容器实际上连接到虚拟交换机;它永远不会看到除了(a)发送给容器的单播流量或者(b)Docker网络上的广播/组播流量之外的任何流量。如果您将其设置为网络网关,它还将看到从其他容器发送到网络外部目的地的任何流量(但仍然无法看到同一网络中其他容器之间的通信)。

如果您使用的是Linux桥接而不是macvlan,则应该能够将tcpdump附加到Docker桥接并获得所需内容(通过在主机上运行它或通过在带有--net=host的容器内运行它)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接