组成一个3个服务的体系结构和一个虚拟桥接网络,这3个服务连接在这个网络上。我希望其中一个容器能够侦听虚拟网络中的所有流量(混杂模式)。这可能吗?我几乎什么都试过了,但似乎都不管用。
我试过了:
- 赋予容器完全权限
- 设置容器eth0接口为混杂(ifconfig eth0 promisc)
- 重新启动容器内的网络管理器
- 设置相对于容器在混杂模式下从主机
- 将macvlan配置中的"bridge"模式修改为"passthru"模式。
- 在docker-compose文件的网络属性中将容器设置为网关
上面的许多尝试导致容器的eth0接口"认为"它处于混杂模式,实际上ifconfig和(来自主机的)syslog都说它是,但是容器仍然只看到它自己的流量。
我使用Docker 1.11和容器内的基本映像是Ubuntu 14.04:最新
下面是我的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"
我能够在创建容器时使用下面的命令使其工作,因为我决定关闭以侦听所有流量
administrator@gitlabrunner-prod01:~$ docker run --rm --privileged -t -d -p 23:22 --name ubuntu ubuntu
容器有效地连接到虚拟交换机;除了(a)到容器的单播流量或(b) docker网络上的广播/多播流量之外,它永远不会看到任何其他内容。如果您将它设置为网络网关,它也将看到从其他容器发送到网络外目的地的任何流量(但仍然看不到同一网络上其他容器之间的通信)。
如果您使用的是Linux桥接而不是macvlan,那么您应该能够将tcpdump
连接到docker桥接并获得您想要的结果(通过在主机上运行它,或者通过在与--net=host
一起在容器中运行它)。