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

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

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

Например, очень подробная инструкция от stackoverflow: Docker на CentOS с мостом к Сеть LAN у меня тоже не работает.


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

Маквлан:

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

Трубопровод:

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

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

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

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

который показывает 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.

Затем я пытался изменить IP-адрес eth0 на статический IP, отредактировав /etc/network/interface.d/eth0, после перезапуска сетевой службы IP-адрес eth0 был изменен на статический 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

person Timmy Lin    schedule 31.05.2018    source источник


Ответы (2)


Я все еще работаю над этим, но ваше утверждение, что 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, что это хостинг).

person subpixel    schedule 16.07.2020

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

Решение опубликовано на DOCKER: контейнер Linux в Windows 10, как использовать nmap для сканирования mac-адреса устройства

person Timmy Lin    schedule 06.06.2018