На сервере Ubuntu 20.04 я запускаю Debian 10 в качестве гостя KVM, подключенного через мост macvtap. Внутри этого гостя у меня есть macvlan-bridge, соединяющий контейнер docker.
По какой-то причине у этого контейнера нет сетевого подключения, и я не вижу ошибку.
edit2
Поскольку я еще не получил никакого ответа и поскольку я также продолжал исследовать весь topi c, у меня возникают некоторые сомнения, действительно ли моя идея работает вообще!
Поэтому я хотел бы спросить в общих чертах заранее: возможно ли иметь гостевую KVM-систему, которая запускает docker с каким-то контейнером, и все они будут подключены через «publi c мост»? Таким образом, хост, KVM-гость и контейнер docker появляются в локальной сети, как отдельные машины (и, конечно, могут взаимодействовать друг с другом). Этот тип настройки называется «вложенной виртуализацией». Но мне не удалось найти некоторые ссылки, объясняющие, как «опубликовать c мост» между обоими уровнями вложенных виртуальных машин.
Так что было бы неплохо, если бы кто-то мог сначала прояснить этот вопрос, в лучшем случае включая документацию / объяснение, как это сделать.
/ edit2
edit1
Чтобы дать немного больше информации, я в основном пытаюсь добиться такой настройки:
+-------------------------------+
| +---+---+---+ +-----------+ |
| |Cn1|Cn2|CnX| |Cn1|Cn2|CnX| |
| +---+---+---+ +---+---+---+ |
| | Docker | | Docker | |
| +-----------+ +-----------+ |
| | macvlan | | macvlan | |
| |VM1 eth0 | |VM2 eth0 | |
| +-----------+ +-----------+ |
| macvtap macvtap |
| +----+ +----+ |
| |eth0| |eth1| |
| +----+ Host +----+ |
+-------------------------------+
|
LAN
Итак, Хост, VM1, VM2 а контейнер docker должен быть подключен напрямую к локальной сети, как это были физические машины. Так что, если кто-нибудь может указать мне другой подход к достижению этого, я тоже буду счастлив ...
/ edit1
Вот подробности конфигурации:
хост Ubuntu (банан)
/ etc / network / interfaces:
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search *****.local
dns-nameserver 192.168.3.1
# USB-ethernet adapter
auto eth1
iface eth1 inet static
address 192.168.2.12
netmask 255.255.255.0
broadcast 255.255.255.255
dns-nameservers 192.168.2.250
dns-search *****.local
IP-адрес:
root@banana:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether dc:fe:07:e1:80:e6 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.3/24 brd 192.168.3.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::b0d2:f660:df88:856f/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e0:4c:68:13:97 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.12/24 brd 255.255.255.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.2.104/24 brd 192.168.2.255 scope global secondary noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fdc3:1fe4:1492::eb8/128 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fdc3:1fe4:1492:0:942c:ded8:d9ee:2862/64 scope global temporary dynamic
valid_lft 600505sec preferred_lft 81850sec
inet6 fdc3:1fe4:1492:0:1b46:b4f9:692c:2f10/64 scope global mngtmpaddr noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::63b7:ce64:c7d1:73da/64 scope link
valid_lft forever preferred_lft forever
4: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:02:0c:0d brd ff:ff:ff:ff:ff:ff
inet 192.168.254.1/24 brd 192.168.254.255 scope global virbr1
valid_lft forever preferred_lft forever
inet 169.254.70.129/16 brd 169.254.255.255 scope global noprefixroute virbr1
valid_lft forever preferred_lft forever
5: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr1 state DOWN group default qlen 1000
link/ether 52:54:00:02:0c:0d brd ff:ff:ff:ff:ff:ff
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:44:21:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
7: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:44:21:01 brd ff:ff:ff:ff:ff:ff
8: macvtap0@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 500
link/ether 52:54:00:be:09:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.2.63/24 brd 192.168.2.255 scope global noprefixroute macvtap0
valid_lft forever preferred_lft forever
inet6 fe80::b4bb:1ac3:ab06:b569/64 scope link
valid_lft forever preferred_lft forever
9: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr1 state UNKNOWN group default qlen 1000
link/ether fe:54:00:1f:e8:10 brd ff:ff:ff:ff:ff:ff
inet 169.254.134.94/16 brd 169.254.255.255 scope global noprefixroute vnet0
valid_lft forever preferred_lft forever
inet6 fe80::ea3:8aaf:a558:b1b6/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::fc54:ff:fe1f:e810/64 scope link
valid_lft forever preferred_lft forever
Libvirt XML -part сети для Debian-гостя:
<interface type='direct'>
<mac address='52:54:00:be:09:bc'/>
<source dev='eth1' mode='bridge'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<interface type='network'>
<mac address='52:54:00:1f:e8:10'/>
<source network='isolated'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</interface>
Debian guest (bananaLAN)
/ etc / network / interfaces:
# The primary network interface
auto enp1s0
iface enp1s0 inet static
address 192.168.2.3
netmask 255.255.255.0
gateway 192.168.2.1
# for host communication
auto enp9s0
iface enp9s0 inet static
address 192.168.254.3
netmask 255.255.255.0
ip addr
root@bananaLAN:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:be:09:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.2.3/24 brd 192.168.2.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 fdc3:1fe4:1492:0:5054:ff:febe:9bc/64 scope global dynamic mngtmpaddr
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:febe:9bc/64 scope link
valid_lft forever preferred_lft forever
3: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:1f:e8:10 brd ff:ff:ff:ff:ff:ff
inet 192.168.254.3/24 brd 192.168.254.255 scope global enp9s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe1f:e810/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:0d:e8:3a:25 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Docker (routix)
создание сети
docker network create \
--driver=macvlan \
--subnet=192.168.2.0/24 \
--gateway 192.168.2.1 \
--ip-range=192.168.2.224/27 \
-o parent=enp1s0 \
pub_net
создание контейнера
docker run -d \
--name routix \
--network=pub_net \
--ip 192.168.2.250 \
-p 53:53/tcp -p 53:53/udp \
-p 80:80 \
-p 443:443 \
-e TZ="Europe/Berlin" \
-v "$(pwd)/etc-pihole/:/etc/pihole/" \
-v "$(pwd)/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
--dns=127.0.0.1 --dns=192.168.3.1 \
--restart=unless-stopped \
pihole/pihole:latest
IP-адрес:
root@3c59f964891c:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
5: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:02:fa brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.2.250/24 brd 192.168.2.255 scope global eth0
valid_lft forever preferred_lft forever
Результаты пинга
Хост Ubuntu (банан) к шлюзу:
root@banana:~# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) Bytes Daten.
64 Bytes von 192.168.2.1: icmp_seq=1 ttl=64 Zeit=0.585 ms
64 Bytes von 192.168.2.1: icmp_seq=2 ttl=64 Zeit=0.572 ms
Хост Ubuntu (банан) к хосту LAN:
root@banana:~# ping 192.168.2.20
PING 192.168.2.20 (192.168.2.20) 56(84) Bytes Daten.
64 Bytes von 192.168.2.20: icmp_seq=1 ttl=64 Zeit=0.810 ms
64 Bytes von 192.168.2.20: icmp_seq=2 ttl=64 Zeit=0.545 ms
Хост Ubuntu (банан) гостю Debian: (это ожидается)
root@banana:~# ping 192.168.2.3
PING 192.168.2.3 (192.168.2.3) 56(84) Bytes Daten.
Von 192.168.2.12 icmp_seq=1 Zielhost nicht erreichbar
Von 192.168.2.12 icmp_seq=2 Zielhost nicht erreichbar
хост Ubuntu (банан) к гостю Debian через изолированную сеть:
root@banana:~# ping 192.168.254.1
PING 192.168.254.1 (192.168.254.1) 56(84) Bytes Daten.
64 Bytes von 192.168.254.1: icmp_seq=1 ttl=64 Zeit=0.222 ms
64 Bytes von 192.168.254.1: icmp_seq=2 ttl=64 Zeit=0.065 ms
гостевой Debian (bananaLAN) на шлюз:
root@bananaLAN:/# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.709 ms
64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.701 ms
гостевой Debian (bananaLAN) на LAN-хост:
root@bananaLAN:/# ping 192.168.2.20
PING 192.168.2.20 (192.168.2.20) 56(84) bytes of data.
64 bytes from 192.168.2.20: icmp_seq=1 ttl=64 time=0.938 ms
64 bytes from 192.168.2.20: icmp_seq=2 ttl=64 time=0.872 ms
Debian гостевой (bananaLAN) на хост Ubuntu: (это ожидается)
root@bananaLAN:/# ping 192.168.2.12
PING 192.168.2.12 (192.168.2.12) 56(84) bytes of data.
From 192.168.2.3 icmp_seq=1 Destination Host Unreachable
From 192.168.2.3 icmp_seq=2 Destination Host Unreachable
гостевой Debian (bananaLAN) на хост Ubuntu через изолированную сеть:
root@bananaLAN:/# ping 192.168.254.3
PING 192.168.254.3 (192.168.254.3) 56(84) bytes of data.
64 bytes from 192.168.254.3: icmp_seq=1 ttl=64 time=0.098 ms
64 bytes from 192.168.254.3: icmp_seq=2 ttl=64 time=0.039 ms
Docker контейнер (routix) на шлюз: (вот в чем проблема!)
root@bananaLAN:/# docker exec -it routix bash
root@3c59f964891c:/# ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data.
From 192.168.2.250 icmp_seq=1 Destination Host Unreachable
From 192.168.2.250 icmp_seq=2 Destination Host Unreachable
Docker контейнер (routix) на LAN-хост: (вот в чем проблема!)
root@3c59f964891c:/# ping 192.168.2.20
PING 192.168.2.20 (192.168.2.20) 56(84) bytes of data.
From 192.168.2.250 icmp_seq=1 Destination Host Unreachable
From 192.168.2.250 icmp_seq=2 Destination Host Unreachable
Docker контейнер ( routix) на хост Ubuntu:
root@3c59f964891c:/# ping 192.168.2.12
PING 192.168.2.12 (192.168.2.12) 56(84) bytes of data.
From 192.168.2.250 icmp_seq=1 Destination Host Unreachable
From 192.168.2.250 icmp_seq=2 Destination Host Unreachable
Docker контейнер (routix) на хост Debian:
root@3c59f964891c:/# ping 192.168.2.3
PING 192.168.2.3 (192.168.2.3) 56(84) bytes of data.
From 192.168.2.250 icmp_seq=1 Destination Host Unreachable
From 192.168.2.250 icmp_seq=2 Destination Host Unreachable
LAN-хост на шлюз:
~ % ping 192.168.2.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
64 bytes from 192.168.2.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.406 ms
От LAN-хоста к Ubuntu-host (банан):
~ % ping 192.168.2.12
PING 192.168.2.12 (192.168.2.12): 56 data bytes
64 bytes from 192.168.2.12: icmp_seq=0 ttl=64 time=0.593 ms
64 bytes from 192.168.2.12: icmp_seq=1 ttl=64 time=0.652 ms
LAN-host к Debian-host (bananaLAN):
~ % ping 192.168.2.3
PING 192.168.2.3 (192.168.2.3): 56 data bytes
64 bytes from 192.168.2.3: icmp_seq=0 ttl=64 time=0.927 ms
64 bytes from 192.168.2.3: icmp_seq=1 ttl=64 time=1.025 ms
LAN-host к Docker - контейнер (routix): (вот в чем проблема!)
~ % ping 192.168.2.250
PING 192.168.2.250 (192.168.2.250): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Таблицы маршрутизации
Шлюз (192.168.2.1)
root@OpenWrt:~# ip route
default via 192.168.3.1 dev eth0.10
192.168.2.0/24 dev br-lan scope link src 192.168.2.1
192.168.3.0/24 dev eth0.10 scope link src 192.168.3.2
Хост Ubuntu (банан)
root@banana:~# ip route
default via 192.168.3.1 dev eth0 src 192.168.3.3 metric 202
default via 192.168.2.1 dev eth1 proto dhcp src 192.168.2.104 metric 203
default via 192.168.2.1 dev macvtap0 proto dhcp src 192.168.2.63 metric 208
169.254.0.0/16 dev virbr1 scope link src 169.254.70.129 metric 204
169.254.0.0/16 dev vnet0 scope link src 169.254.134.94 metric 209
192.168.2.0/24 dev eth1 proto dhcp scope link src 192.168.2.104 metric 203
192.168.2.0/24 dev macvtap0 proto dhcp scope link src 192.168.2.63 metric 208
192.168.3.0/24 dev eth0 proto dhcp scope link src 192.168.3.3 metric 202
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
192.168.254.0/24 dev virbr1 proto kernel scope link src 192.168.254.1
гость Debian (bananaLAN)
root@bananaLAN:/# ip route
default via 192.168.2.1 dev enp1s0 onlink
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.2.0/24 dev enp1s0 proto kernel scope link src 192.168.2.3
192.168.254.0/24 dev enp9s0 proto kernel scope link src 192.168.254.3
Docker контейнер (routix)
root@3c59f964891c:/# ip route
default via 192.168.2.1 dev eth0
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.250
Вероятно, это какая-то проблема с маршрутизацией, и я должен признать , что это не одна из моих сильных сторон. Я также трижды проверил, следовал ли я в точности нескольким документам по qemu / libvirt и docker / macvlan, но, очевидно, что-то мне не хватает.
Я благодарен за любую помощь! Большое спасибо!