РЕДАКТИРОВАТЬ: WIP: Основная причина описанных ниже сбоев связана с тем, что я не запустил интерфейсы TAP хоста в нужное время, если я позволю QEMU обрабатывать создание устройств ответвления, все будет работать так, как ожидалось. Я рассмотрю сбой более подробно и предоставлю более четкое объяснение проблемы, когда она у меня появится. Спасибо @anx за советы!
Цель: запустить dnsmasq
внутри хоста QEMU VM, который обслуживает сетевую загрузку
с другой виртуальной машины QEMU, работающей на хосте.
Я хотел бы, чтобы виртуальная машина dnsmasq действовала как шлюз с одним сетевым адаптером в качестве
восходящий интерфейс WAN, с восходящим DHCP-сервером, а другой
interface частный интерфейс локальной сети, к которому будут подключены другие виртуальные машины.
"подключен" и будет загружаться по сети из dnsmasq, прослушивающего этот частный
интерфейс локальной сети.
Во-первых, чтобы позволить виртуальным машинам общаться друг с другом, я создаю свой собственный мост.
на хосте,
ip ссылка добавить имя vivianbr0 тип мост
ip link set vivianbr0 up
Чтобы виртуальные машины могли общаться друг с другом через хост-мост, мне понадобится два
коснитесь устройств, одно для интерфейса частной локальной сети на виртуальной машине шлюза и
другой для единого сетевого интерфейса частных виртуальных машин,
ip tuntap добавить режим tap tap0 user cturner
ip tuntap добавить режим tap tap1 user cturner
ip ссылка настроить tap0 up
ip link установить tap1 up
ip link set tap0 master vivianbr0
ip link set tap1 master vivianbr0
Для виртуальной машины шлюза я использую ISO-образ Arch Linux для целей тестирования,
виртуальная машина загружается с двумя сетевыми картами, таким образом,
qemu-система-x86_64 \
-drive file=arch-disk.qcow2,if=none,id=nvm \
-устройство nvme,serial=deadbeef,drive=nvm \
-cdrom archlinux-2021.09.01-x86_64.iso \
-загрузочный д\
-device virtio-net-pci,romfile=,netdev=net0,mac="DE:AD:BE:EF:00:11" \
-device virtio-net-pci,romfile=,netdev=net1,mac="DE:AD:BE:EF:00:12" \
`# Имитация подключенного «восходящего» кабеля в сети пользовательского режима` \
-netdev user,id=net0,hostfwd=tcp::60022-:22,hostfwd=tcp::8080-:80,hostfwd=tcp::8081-:8000,hostfwd=tcp::2375-:2375 \
`# А теперь неподключенный с, с сетями TAP` \
-netdev tap,id=net1,ifname=tap0,script=нет,downscript=нет \
-net bridge,br=vivianbr0 \
-м 4G \
-включить-квм
Как только эта машина загрузится, я вижу следующее в конфигурации моста:
brctl показать vivianbr0
имя моста идентификатор моста интерфейсы с поддержкой STP
vivianbr0 8000.46954a1ad851 без крана0
кран1
кран2
я предполагаю кран2
был создан QEMU...
Внутри этой виртуальной машины есть два интерфейса iFace. энс4
с МАК
DE:AD:BE:EF:00:11 и ens5
с MAC DE:AD:BE:EF:00:12. Внутри этого
ВМ, я начинаю dnsmasq
,
IP-адрес добавить 10.42.0.1/24 dev ens5
dnsmasq -d --dhcp-range=10.42.0.10,10.42.0.100 --dhcp-script=/bin/echo --enable-tftp=ens5 --interface=ens5
Это запускается без ошибок.
Теперь я пытаюсь загрузить по сети другую виртуальную машину, запущенную на хосте вот так,
qemu-система-x86_64 \
-машина pc-q35-6.0,accel=kvm\
-m 1024 -smp 2, сокеты = 2, ядра = 1, потоки = 1 \
-netdev tap,id=net0,ifname=tap1,script=нет,downscript=нет \
-device virtio-net-pci,netdev=net0,bootindex=1,mac=DE:AD:BE:EF:00:13 \
-net bridge,br=vivianbr0 \
-включить-квм \
-vga виртио
Но не получается загрузиться. я слежу за вивианбр0
с использованием tcpdump
и
DHCP-запросы вижу, но ответов нет, до dnsmasq, работающего внутри первой ВМ, ничего не доходит,
tcpdump -i vivianbr0 -nN
tcpdump: подробный вывод подавлен, используйте -v[v]... для полного декодирования протокола
прослушивание на vivianbr0, тип канала EN10MB (Ethernet), длина снимка 262144 байт
12:21:39.585229 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:13, длина 397
12:21:40.587741 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:13, длина 397
12:21:40.700038 IP6 fe80::6ce2:2aff:fe94:ba48.5353 > ff02::fb.5353: 0 [7q] PTR (QM)? _nfs._tcp.local. ПТР (QM)? _ftp._tcp.local. ПТР (QM)? _webdav._tcp.local. ПТР (QM)? _webdavs._tcp.local. ПТР (QM)? _sftp-ssh._tcp.local. ПТР (QM)? _smb._tcp.local. ПТР (QM)? _afpovertcp._tcp.local. (118)
12:21:42.619968 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:13, длина 397
12:21:46.684448 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:13, длина 397
12:22:30.609555 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:12, длина 289
12:23:33.796148 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:12, длина 289
12:24:38.673364 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, запрос от de:ad:be:ef:00:12, длина 289
Как ни странно, я вижу запросы BOOTP от де:объявление:быть:эф:00:13
(MAC-адрес виртуальной машины с сетевой загрузкой) и из де:объявление:быть:эф:00:12
(частный сетевой адаптер виртуальной машины шлюза), что указывает на то, что что-то неправильно настроено.
Как я могу заставить это работать?