Я использую виртуальную машину на хосте, подключенном к моей локальной сети. Хост отображается в моей локальной сети (как и другие Хосты, подключенные через Wi-Fi), но Гость VM - нет. Первоначально это было связано с тем, что гостевая виртуальная машина была NAT от хоста. Гостевая виртуальная машина может подключаться к Интернету и другим серверам в моей локальной сети, но другие серверы не могут получить к ней доступ. Это имеет смысл. Я хочу, чтобы гостевая виртуальная машина отображалась в сети, как если бы они были подключены напрямую к ней, как хост. За свою жизнь я не могу понять, чего мне не хватает.
У меня есть базовая настройка домашней сети. Это выглядит как следующее изображение:
- Netgear Nighthawk Wi-Fi / маршрутизатор
- Хост Intel NUC подключен к маршрутизатору
- ОС Ubuntu Server
- Виртуализация KVM / QEMU
Сначала я настроил виртуальную машину с конфигурацией NAT, например, так (сеть по умолчанию - сеть с мостовым соединением NAT):
Вышеописанное работало отлично, но, опять же, я не мог подключиться к виртуальным машинам с других устройств в локальной сети (потому что они виртуальные машины были с NAT).
Затем я попытался настроить маршрутизируемую конфигурацию, чтобы каждая виртуальная машина получала свой собственный IP-адрес и могла:
- дойти до интернета
- быть доступным с других хостов в локальной сети
Я пытался сделать что-то похожее на это:
Я создал новую виртуальную сеть следующим образом:
Однако при вышеописанной настройке виртуальная машина не может подключиться к Интернету и недоступна с других хостов в сети. Это почти так, если я как-то настрою в DMZ позади Host.
Из всего, что я прочитал, настройка конфигурации Routed (через virbr3, как на изображении выше) должна создать виртуальную сеть на хосте типа "Routed", что приведет к тому, что хост просто пройдет через него. Я вижу на таблице ARP хоста, что он знает о гостевой виртуальной машине:
Когда я войду в свой маршрутизатор Netgear, я ожидаю увидеть гостевую виртуальную машину, указанную в качестве проводного соединения, но не в списке. Я попытался войти к маршрутизатору и вручную и добавить зарезервированный IP-адрес для IP-адреса гостевой виртуальной машины (и MAC-адрес гостевой виртуальной машины), полагая, что сетевые запросы для этого IP-адреса будут маршрутизироваться соответствующим образом, но это не так. Это почти так, как если бы Хост знал о ВМ, но не сообщает о маршрутах правильно, а маршрутизатор не знает о Гостевой ВМ, поэтому, когда я пытаюсь пропинговать IP-адрес Гостя с другого Хоста в локальной сети, маршрутизатор не ' не знаете куда его отправить? Любые предложения о том, как это исправить?
РЕДАКТИРОВАТЬ
Я понял, что одним из пропущенных шагов было добавление статического маршрута в мой маршрутизатор NetGear, чтобы он знал, куда перенаправлять запросы на IP-адреса, связанные с виртуальными машинами (через шлюз eth0). Теперь я могу пропинговать виртуальные машины с других хостов в сети, так что это огромный шаг вперед. Единственная проблема заключается в том, что теперь виртуальные машины не могут подключиться к Интернету (например, google.com).
РЕДАКТИРОВАТЬ 2
Вывод traceroute google.com
на гостевой виртуальной машине выглядит следующим образом:
192.168.100.1 - это локальный шлюз.
Я считаю, что 192.168.1.1 - это мой беспроводной шлюз. Я делаю этот вызов, потому что он отображается как шлюз по умолчанию на хосте и на моем Mac, который также подключен к локальной сети.