LXC Виртуальная Машина без доступа к интернету

Вопрос или проблема

Я пробую LXC впервые. Мне нужна виртуальная машина 22.04, которая могла бы получить доступ к интернету. Мой хост – новая установка Ubuntu Server 24.04. Моя локальная физическая сеть – eno33.

Сначала я использовал neplan для настройки моста:

network:
    version: 2
    renderer: networkd
    ethernets:
        eno33:
           dhcp4: false
           dhcp6: false
#           addresses:
#               - 172.16.56.26/23
#           routes:
#           - to: default
#             via: 172.16.57.253
#           nameservers:
#           addresses: [172.16.99.7,172.16.99.8]

    bridges:
      br0:
          interfaces: [eno33]
          addresses: [172.16.56.26/23]
          routes:
           - to: default
             via: 172.16.57.253
          nameservers:
            addresses: [172.16.99.7,172.16.99.8]
          parameters:
                stp: true
                forward-delay: 4
apetros@host:~$ ip r
default via 172.16.57.253 dev br0 proto static
172.16.56.0/23 dev br0 proto kernel scope link src 172.16.56.26
apetros@host:~$ ip a
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 noprefixroute
       valid_lft forever preferred_lft forever
2: eno33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether e4:3d:1a:62:13:16 brd ff:ff:ff:ff:ff:ff
    altname enp99s0f0
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ae:f4:ec:9a:d1:c1 brd ff:ff:ff:ff:ff:ff
    inet 172.16.56.26/23 brd 172.16.57.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::acf4:ecff:fe9a:d1c1/64 scope link
       valid_lft forever preferred_lft forever

Затем я создаю виртуальную машину:

apetros@host:~$ lxc init ubuntu:22.04 u1 --vm
apetros@host:~$ lxc config device add u1 eth0 nic nictype=bridged parent=br0 name=eth0
apetros@host:~$ lxc restart u1
apetros@host:~$ lxc list
+----------+---------+------+------+-----------------+-----------+
|   NAME   |  STATE  | IPV4 | IPV6 |      TYPE       | SNAPSHOTS |
+----------+---------+------+------+-----------------+-----------+
| u1       | RUNNING |      |      | VIRTUAL-MACHINE | 0         |
+----------+---------+------+------+-----------------+-----------+

Как видите, u1 не получил IP. Показав больше деталей:

apetros@spslab:~$ lxc config show --expanded u1
architecture: x86_64
config:
  image.architecture: amd64
  image.description: ubuntu 22.04 LTS amd64 (release) (20241004)
  image.label: release
  image.os: ubuntu
  image.release: jammy
  image.serial: "20241004"
  image.type: disk-kvm.img
  image.version: "22.04"
  volatile.base_image: ab8380e088c0e3e2d88b7a32224de91723c2fe455f151db61c36eb23900f69cd
  volatile.cloud-init.instance-id: 758bffe1-74e5-4ab9-a74c-e7da29a93696
  volatile.eth0.host_name: tap3add331f
  volatile.eth0.hwaddr: 00:16:3e:17:fb:e6
  volatile.last_state.power: RUNNING
  volatile.uuid: 9c04c042-b026-44da-a081-06ecbe91f1f5
  volatile.uuid.generation: 9c04c042-b026-44da-a081-06ecbe91f1f5
  volatile.vsock_id: "1271446946"
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic
  root:
    path: /
    pool: default
    type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""

Простая команда:

lxc exec u1 -- apt update

Показывает, что у виртуальной машины нет доступа к интернету. Выполнив:

apetros@host:~$ lxc exec u1 -- bash
root@u1:~# ip a
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: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:16:3e:17:fb:e6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::216:3eff:fe17:fbe6/64 scope link
       valid_lft forever preferred_lft forever

Таким образом, eth0 недоступен внутри u1, и только enp5s0 доступен.

Есть идеи, что делать?

Ответ или решение

Для настройки виртуальной машины (VM) с использованием LXC без доступа к интернету необходимо выполнить ряд шагов, чтобы убедиться, что сеть настроена корректно и ваша виртуальная машина может получить IP-адрес из вашего локального окружения. Рассмотрим ваши настройки и выявим, как можно устранить проблему.

1. Проверка настроек моста

Ваши настройки для br0 выглядят в целом правильно. Вы создали мост, который объединяет сетевой интерфейс eno33 и присвоили ему статический IP-адрес. Это позволяет вашему хосту взаимодействовать с локальной сетью. Однако, важно убедиться, что DHCP-сервер в вашей сети может присваивать IP-адреса, чтобы ваша виртуальная машина могла получить один из них.

2. Настройка LXC для использования NAT

Если вы хотите, чтобы ваша виртуальная машина имела доступ к Интернету, необходимо правильно настроить NAT (Network Address Translation). Вместо того чтобы полагаться на вам установленный статический IP-адрес, вы можете настроить IP-адресацию и маршрутизацию. Вам нужно выполнить следующие шаги:

  1. Настройка DHCP в LXC: Измените настройки вашего интерфейса в конфигурации LXC, чтобы он получал IP из DHCP. Для этого выполните команду:

    lxc config device set u1 eth0 ipv4.address auto
  2. Настройка iptables для NAT: Убедитесь, что ваш хост настроен для маршрутизации трафика от вашей виртуальной машины к Интернету. Используйте следующие команды, чтобы настроить NAT:

    sudo iptables -t nat -A POSTROUTING -o eno33 -j MASQUERADE
    sudo iptables -A FORWARD -i br0 -o eno33 -j ACCEPT
    sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  3. Сохранение правил iptables: Чтобы сохранить настройки iptables при перезагрузке сервера, вы можете использовать iptables-save или установить специальный пакет, такой как iptables-persistent.

3. Проверка сетевой конфигурации виртуальной машины

После того как вы настроили NAT и DHCP, перезапустите виртуальную машину:

lxc restart u1

Проверьте, получил ли интерфейс eth0 IP-адрес, выполнив команду:

lxc exec u1 -- ip a

Если eth0 все еще отсутствует или не имеет IP-адреса, проверьте, работает ли ваш DHCP-сервер и настроен ли он на выдачу IP-адресов диапазона, который может включать вашу виртуальную машину.

4. Проверка доступа к Интернету

Теперь выполните команду внутри виртуальной машины:

lxc exec u1 -- apt update

Если проблема сохраняется, проверьте, существуют ли DNS-настройки. Если ваша виртуальная машина не может разрешать DNS-запросы, вам нужно будет вручную настроить /etc/resolv.conf на виртуальной машине, добавив серверы DNS, такие как:

nameserver 8.8.8.8
nameserver 8.8.4.4

Заключение

Настройка LXC с доступом к Интернету может потребовать внимания к деталям конфигурации сети и обеспечения ее корректности. Обязательно проверяйте результат на каждом этапе и не забудьте о необходимости взаимодействия с вашими локальными сетевыми настройками. Воспользуйтесь шагами, описанными выше, и ваша виртуальная машина на базе Ubuntu 22.04 должна получить доступ к Интернету без проблем.

Оцените материал
Добавить комментарий

Капча загружается...