Сетевой интерфейс Docker Container в случайном режиме

Создать архитектуру с 3 сервисами и виртуальную мостовую сеть, к которой подключены три сервиса. Я хочу, чтобы один из контейнеров мог прослушивать весь трафик в виртуальной сети (беспорядочный режим). Является ли это возможным? Я перепробовал почти все, но, похоже, ничего не работает.

Что я пробовал:

  • Предоставление полных привилегий контейнеру
  • Настройка интерфейса eth0 контейнера на разнородный (ifconfig eth0 promisc)
  • перезапустите сетевой менеджер внутри контейнера
  • установка ветки относительно контейнера в случайном режиме с хост-машины
  • измените режим с "bridge" на "passthru" в конфигурации macvlan из сценария конвейера
  • установка контейнера в качестве шлюза в сетевых свойствах файла docker-compose

многие из приведенных выше попыток приводят к тому, что интерфейс eth0 контейнера "думает", что он находится в смешанном режиме, фактически, как говорят ifconfig и syslog (от хоста), но контейнер все еще видит только свой собственный трафик.

Я использую Docker 1.11, а базовый образ внутри контейнера - Ubuntu 14.04: последняя

Ниже указан мой docker-compose файл Заранее спасибо

докер-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 ответа

Я могу заставить его работать с нижеприведенной командой при создании контейнера, так как я решил выключить, чтобы прослушивать весь трафик

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

Контейнер эффективно подключен к виртуальному коммутатору; он никогда не увидит ничего, кроме (а) одноадресного трафика в контейнере или (б) широковещательного / многоадресного трафика в докерной сети. Если он настроен как сетевой шлюз, он также будет видеть любой трафик, отправляемый из других контейнеров в пункты назначения за пределами сети (но все равно не будет видеть связь между другими контейнерами в той же сети).

Если вы использовали мосты Linux, а не Macvlan, вы должны иметь возможность подключить tcpdump на докерский мост и получите то, что вы хотите (либо запустив его на хосте, либо запустив его внутри контейнера с --net=host).

Другие вопросы по тегам