Сетевой интерфейс 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
).