Я перевожу виртуальную машину kvm со старого хоста (как аппаратного, так и операционного) на новый.
Для работы в сети virt-manager предложил мне новую опцию: macvtap . Это выглядело хорошей альтернативой настройке моста на eth0.
Так что теперь гость загружается просто отлично, получает IP-адрес от моего локального сетевого DHCP-сервера, может выйти в Интернет. Гость также видит другие машины в локальной сети, я могу ssh их и т. Д.
Проблема в том, что хост и гость не видят друг друга. Я не могу связаться с гостем с хоста, используя гостевой IP, и при этом я не могу связаться с хостом с гостя, используя хост-IP. Нет пинг, сш, http, ничего.
Вот route -n
команда с хоста:
$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
(тот же вывод от гостя).
Я мог бы, вероятно, настроить новый интерфейс tun / tap, предназначенный для связи между хостом и гостем, но это выглядит немного излишним. Есть ли способ заставить хозяина и гостя общаться?
источник
Ответы:
Я задал этот вопрос на IRC, и кажется, что Macvtap
Решение состоит в том, чтобы добавить сетевой интерфейс для связи между гостем и хостом или остаться со старым мостовым решением ...
источник
virt-manager прямо говорит, что при настройке macvtap не работает связь между хостом и гостевой сетью. Я просто добавил второй интерфейс на основе nat, настроил его в гостевой системе и использовал его для связи с моим хостом.
источник
Решение состоит в том, чтобы настроить интерфейс macvlan на гипервизоре с тем же IP-адресом, что и реальный аппаратный интерфейс (очень важно), и настроить маршрутизацию на хосте для его использования. В Qemu / KVM используйте интерфейс macvtap на аппаратном интерфейсе как обычно.
Для моей конфигурации (сеть 192.168.1.0/24, аппаратный интерфейс p10p1 и шлюз 192.168.1.1) это дает (на гипервизоре):
источник
Как уже упоминалось в предыдущих ответах, решение этой проблемы заключается в добавлении сетевого адаптера macvlan на хост. Тем не менее, я чувствовал, что ручная переподключение маршрутов к адаптеру macvlan было довольно хакерским, тем более что я хотел, чтобы поддержка IPv6 и ручная настройка маршрутов могли стать проблемой при изменении префикса. Итак, вот моя конфигурация, которая оставляет ядро под контролем таблицы маршрутизации:
(Конкретная конфигурация здесь специфична для Debian и Upstart, но основные шаги должны работать на любом GNU / Linux.)
Создание адаптера macvlan при загрузке
Сначала вам нужно выбрать MAC-адрес для вашего адаптера. Вы можете использовать случайный, но я предлагаю вам вручную создать адаптер macvlan и использовать его MAC. Таким образом, MAC обязуется любые соглашения, которые могут быть там.
Рекомендуется установить фиксированный MAC-адрес, поскольку в противном случае, например, DHCP-сервер не сможет распознать ваш компьютер после перезагрузки и назначить ему тот же IP-адрес, что и раньше.
Итак, создайте адаптер и найдите MAC:
Выделенное шестнадцатеричное число - ваш MAC-адрес.
Теперь вы создаете сценарий инициализации - который должен быть запущен до инициализации сети - для создания адаптера macvlan при каждом запуске. Команда для этого:
Пример сценария инициализации Upstart для этой цели:
Просто вставьте это, например
/etc/init/macvlan.conf
.Настройка конфигурации сети
В
/etc/network/interfaces
настройте физический сетевой адаптер на ручной (но оставьте его автоматическим) и перенесите его предыдущую конфигурацию (обычно DHCP или статический IP-адрес) на ваш адаптер macvlan. Например:Отключение IPv6 для физического адаптера
Наконец, вы не хотите, чтобы физический адаптер получал IP-адрес. Для IPv4 установка адаптера на ручной режим не позволяет ему получить адрес. Однако я не нашел конфигурацию, которая мешает ядру получить / назначить IPv6-адрес для / адаптеру. Когда это происходит, он также добавляет маршруты для них, что может вызвать проблемы. Таким образом, лучший способ - отключить IPv6 для физического адаптера. Вы можете сделать это, добавив строку
чтобы
/etc/sysctl.conf
, создав файл/etc/sysctl.d/
с этой строкой, или добавивна ваш сценарий инициализации.
Когда вы сейчас перезагружаете свою машину, связь между хостом и гостем должна работать как с IPv4, так и с IPv6.
Имейте в виду, что если вы допустите ошибку при настройке, ваш хост может стать недоступным через сеть даже после перезагрузки. Делайте это только в том случае, если у вас есть физический доступ к машине или другие меры безопасности, чтобы вы могли устранить потенциальные проблемы.
источник
Вы хотите получить что-то вроде этого:
Обратите внимание, что последний столбец содержит «macvlan0» вместо «eth0».
Для этого вы можете использовать эти команды, полагая 192.168.0.42 своим IP-адресом:
В основном аналогично решению npen. Если вы хотите более сложный сценарий, посмотрите мою веб-страницу на эту тему.
источник
macvlan
модуль:modprobe macvlan
Я использовал то, что Lazzaro написал для Debian, но я хочу добавить несколько заметок.
Прежде всего, гостевой интерфейс должен быть установлен на «Исходное устройство» -> «Хост-устройство eth0: macvtap»; «Режим источника» -> « Мост ».
Во-вторых, у вас не работал скрипт инициализации ( кажется, что интерфейс macvlan0 был создан слишком поздно во время запуска ), поэтому я использовал это:
Измените mac на тот, который был назначен при первом создании интерфейса:
Сохраните и установите бит выполнения:
и добавьте все ссылки для init:
источник