Способ назначить контейнер Linux для той же локальной сети, что и хост?

Моя цель - сделать так, чтобы мой контейнер Linux работал на той же локальной сети, что и хост и другие устройства. Потому что мне нужно часто использовать nmap для сканирования MAC-адресов устройств по локальной сети. К сожалению, сканирование nmap работает только тогда, когда все эти машины находятся в одной подсети.

Я пробовал несколько способов сделать это, но все не удалось. Хотя есть много инструкций о том, как это сделать, похоже, что они все для Docker для Linux.

Например, очень подробные инструкции от stackru: Docker на CentOS с мостом к локальной сети также не работает для меня.


Вещи, которые я пробовал:

Macvlan:

похоже, что Docker для Windows 10 не поддерживает Macvlan из-за того, что у меня нет возможности сделать сетевой адаптер Windows родительским.

Разводка трубопроводов:

который работает только в системе Linux, но я использую Windows 10..

Измените bip из daemon.json:

Я попытался, который установит docker0 в статический IP, тогда контейнер все еще не в состоянии пропинговать устройства в локальной сети. Я предполагаю, что это потому, что контейнер размещен в NAT, а изменение моста docker0 ip не сможет достичь моей цели.

Запустите образ с хостом --net:

который ifconfig показывает:

docker0   Link encap:Ethernet  HWaddr 02:42:2d:b8:0b:7c
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:2dff:feb8:b7c/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:540 (540.0 B)

eth0      Link encap:Ethernet  HWaddr 02:50:00:00:00:01
          inet addr:192.168.65.3  Bcast:192.168.65.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:111 errors:0 dropped:0 overruns:0 frame:0
          TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9701 (9.7 KB)  TX bytes:10384 (10.3 KB)

hvint0    Link encap:Ethernet  HWaddr 00:15:5d:0d:52:27
          inet addr:10.0.75.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::215:5dff:fe0d:5227/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:359819 errors:0 dropped:1303 overruns:0 frame:0
          TX packets:1157 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:54740692 (54.7 MB)  TX bytes:103676 (103.6 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:5732 (5.7 KB)  TX bytes:5732 (5.7 KB)

Он может пропинговать все в моей подсети, но IP все еще не из моей подсети, а 192.168.65.3.

Затем я пытался изменить eth0 ip на статический IP, отредактировав /etc/network/interface.d/eth0, после перезапуска сетевой службы, eth0 ip из моей подсети изменится на static ip, но сеть больше не работает.

ПОЖАЛУЙСТА, если кто-нибудь здесь знает, как разместить Linux-контейнер Windows 10 в локальной сети так же, как хост.


Моя версия докера

Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:48 2018
 OS/Arch:      windows/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: false

1 ответ

Решение

Я разместил еще один вопрос по аналогичной проблеме здесь: (РАЗРЕШЕНО) DOCKER: Контейнер Linux в Windows 10, как использовать nmap для сканирования MAC-адреса устройства

И на самом деле их цели абсолютно одинаковы - подключить Docker для Windows к вашей локальной сети (физической сети).

Чтобы достичь этой цели, я прочитал сотни и сотни страниц, и, наконец, я понял, как это сделать, подробную информацию см. На следующих страницах.

Пользователь Windows 10 HOME, вы можете обратиться к этой странице для настройки виртуального ящика / Пользователь Windows 10 PROFESSIONAL/ENTERPRISE, вы можете обратиться к этой странице для hyperV https://hub.docker.com/r/qtimmylin/evt_platform/

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

Надеюсь, что это достаточно полезно, поэтому вам не нужно тратить целую неделю на это, как я.

Я все еще работаю над этим, но ваше утверждение, что macvlanне работает в Windows 10 неверно. Используя некоторые инструкции из связанного вами вопроса, я получил довольно функциональныйmacvlan сеть, настроенная на Windows 10. Я все еще пытаюсь получить хосты в моей сети, чтобы иметь возможность пинговать хосты на macvlan сеть.

Вот что я сделал:

  1. В окне административной оболочки PowerShell: Set-NetIPInterface -ifindex <interface_index> -Forwarding Enabled установка (используйте Get-NetAdapter получить список сетевых адаптеров и их ifindex числа)
  2. docker network create routed0 --subnet 192.168.2.0/24 заменив 192.168.2.0/24 правильным сетевым номером и битами сетевой маски для сети, которую вы хотите назначить routed0 сеть

Для меня это дало сеть докеров, через которую подключенные контейнеры могли успешно общаться с интернет-хостами через маршрутизатор для 192.168.1.0/24. Однако мне еще предстоит выяснить, как настроить окно Windows 10, выступающее в качестве шлюза для 192.168.2.0/24, чтобы фактически действовать как шлюз (и делать такие вещи, как маршрутизация запросов ICMP от хостов на 1.0 / 24 в сеть докеров 2.0. / 24, что это хостинг).

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