Вопрос или проблема
Я создаю настройку KVM для POC.
Диапазон IP-хостов KVM: 172.21.158.0/24
Диапазон VM-гостей KVM: 172.21.183.0/24
стандартная виртуальная сеть с NAT переадресацией: 192.168.100.0/24
Ниже приведены настройки NIC виртуальных машин:
Теперь я хочу получить доступ к гостевой виртуальной машине KVM из внешней сети.
Какие изменения нужно внести, чтобы сделать гостевую виртуальную машину доступной?
Вы показываете две разные сети в первом блоке: 172.21.158.0/24
и 172.21.183.0/24
, поэтому они не смогут общаться друг с другом без некоторых правил iptables.
Вероятно, вы хотите запустить гостевую систему с “пользовательской сетью“. Вы можете сделать это, просто запустив гостевую систему без сетевых опций (пользовательская сеть используется по умолчанию):
qemu-system-x86_64 -hda /path/to/hda.img
Ответ или решение
Чтобы сделать виртуальную машину (VM) на KVM доступной из внешней сети, необходимо учесть несколько ключевых моментов, связанных с настройкой сети и безопасностью.
Шаг 1: Конфигурация сети KVM
В вашем случае выделены три диапазона IP-адресов:
- Диапазон хоста KVM:
172.21.158.0/24
- Диапазон гостевой виртуальной машины KVM:
172.21.183.0/24
- Виртуальная сеть с NAT:
192.168.100.0/24
Так как виртуальная машина находится в другом диапазоне (172.21.183.0/24
), необходимо настроить сеть, чтобы пакеты могли перемещаться между этими подсетями.
Шаг 2: Настройка NAT и перенаправления портов
-
Включение IP Forwarding: На хосте KVM разрешите пересылку пакетов между интерфейсами.
echo 1 > /proc/sys/net/ipv4/ip_forward
Добавьте эту строку в файл
/etc/sysctl.conf
для постоянного эффекта. -
Настройка iptables. Используйте команду для настройки правил
iptables
, которые позволят перенаправлять трафик на гостевую VM:# Пропишите команды iptables для перенаправления конкретных портов iptables -t nat -A PREROUTING -d [EXTERNAL_IP] -p tcp --dport [PORT] -j DNAT --to-destination [GUEST_VM_IP]:[PORT] iptables -A FORWARD -p tcp -d [GUEST_VM_IP] --dport [PORT] -j ACCEPT
Убедитесь, что [EXTERNAL_IP] замещен IP-хоста KVM, а [GUEST_VM_IP] — IP вашей гостевой VM. [PORT] заменяется на номер порта, который вы хотите открыть.
Шаг 3: Настройка сети виртуальной машины
Проверьте, что правильно настроили сетевой интерфейс виртуальной машины. Убедитесь, что драйвер сетевого устройства совпадает с используемой моделью (например, virtio
).
-
User networking: Если вы хотите упростить начальную настройку, можно рассмотреть использование user networking (уже предложено в вашем сообщении).
qemu-system-x86_64 -hda /path/to/hda.img
-
Bridged Networking: Чтобы обеспечить более эффективное взаимодействие, можно использовать сетевой мост:
virsh edit [VM-Name]
Измените настройки интерфейса, чтобы использовать мост:
<interface type='bridge'> <mac address='52:54:00:XX:YY:ZZ'/> <source bridge='br0'/> <model type='virtio'/> </interface>
Убедитесь, что
br0
правильно настроен на хосте для работы с физическим сетевым интерфейсом.
Шаг 4: Тестирование и Безопасность
- Проверка соединения: Убедитесь, что вы можете отслеживать пакеты до удаленных узлов, используя команды пинг и traceroute.
- Обеспечение безопасности: Закройте все неиспользуемые порты и убедитесь, что только необходимые порты открыты и защищены.
Создание надежной конфигурации сети для виртуальных машин требует соблюдения баланса между доступностью и безопасностью. Следуйте предложенным шагам, и вы сможете сделать свою виртуальную машину доступной извне с учетом всех правил безопасности.