2016-10-19 2 views
2

compose une architecture de 3 services et un réseau virtuel ponté auquel les trois services sont rattachés. Je veux que l'un des conteneurs soit capable d'écouter tout le trafic dans le réseau virtuel (mode promiscuous). C'est possible? J'ai essayé presque tout mais rien ne semble fonctionner.L'interface réseau de Docker Container en mode promiscuité

Ce que j'ai essayé:

  • Donner les privilèges au conteneur
  • Paramétrage de l'interface conteneur eth0 promiscuous (ifconfig eth0 promisc)
  • redémarrer le gestionnaire de réseau à l'intérieur du conteneur
  • régler le veth relatif au conteneur en mode promiscuous à partir de la machine hôte
  • modifier le mode de "pont" à "passthru" dans la configuration macvlan à partir de la tuyauterie s Cript
  • mettre le conteneur en tant que passerelle dans les propriétés du réseau du fichier docker-Compose

beaucoup des résultats des tentatives ci-dessus dans l'interface eth0 du conteneur à « penser », il est en mode promiscuous, en fait à la fois ifconfig et syslog (de l'hôte) le disent, mais le conteneur ne voit toujours que son propre trafic.

J'utilise Docker 1.11 et l'image de base à l'intérieur du conteneur est Ubuntu 14.04: dernière

Ci-dessous figure mon fichier docker-Compose Merci à l'avance

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" 

Répondre

1

Un conteneur est effectivement attaché à un commutateur virtuel; il ne verra jamais autre chose que (a) le trafic monodiffusion vers le conteneur ou (b) le trafic de diffusion/multidiffusion sur le réseau docker. Si vous l'avez configuré en tant que passerelle réseau, le trafic provenant d'autres conteneurs serait également envoyé vers des destinations extérieures au réseau (mais ne verrait toujours pas la communication entre les autres conteneurs sur le même réseau). Si vous utilisiez des ponts Linux plutôt que macvlan, vous devriez pouvoir ajouter tcpdump au docker bridge et obtenir ce que vous voulez (soit en l'exécutant sur l'hôte, soit en l'exécutant dans un conteneur avec --net=host).