Автонастройка сети (и не только?) для виртуальной машины

Вводная: в лекциях по сетям нужно очень быстро разворачивать вируталки, объединённые в некоторую сетевую топологию. С какого-то момента нет смысла вручную настраивать в них сеть (адресацию, маршрутизацию, выход в интернет, NAT, DNS, DHCP и т. д.).

Эти настройки более-менее очевидны (например, в одной сети должен быть один диапазон, машина с выходом в интернет должна быть с NAT, машина с двумя и более интерфейсами — ip_forward и т. д.).

Сведения об имеющейся конфигурации + дополнительные параметры (например, некоторые интерфейсы собраны в бридж, есть DHCP сервер, DHCP-клиент, локальный DNS, avahi, firewall и т. п.) можно передавать через поля DMI, которые потом видны с помощью dmidecode. В идеале в разных системах виртуализации можно найти инвариантные поля DMI. Как минимум нужно поддерживать VirtualBox.

Годится любой иной способ, но желательно минимальное вмешательство со стороны пользователя (например, эти параметры должно быть просто передать вручную).

Задача:

  1. Разработать методиуку описания сети и написать программу, которая считывает эту информацию изнутри работающей виртуалки (в идеале — по максимуму угадывает её, например, опрашивает сетевые интерфейсы, а подключён ли к ним кабель) и превращает всё это в перманентные настройки сети (в первую очередь — systemd-networkd со товарищи) и старт сервисов.

    • Сеть и службы должны штатно работать как минимум после перезагрузки, но в идеале —­сразу же.
  2. Разработать интерфейс, задающий описание сети и написать программу, которая формирует соответствующие данные и передаёт их при запуске виртуалки. Возможно это должен быть читаемый текстовый файл, наподобие TOML, MD или в крайнем случае YAML.
  3. Разработать утилиту, которая развёртывает площадку по описанию (включая создание самих виртуалок).

Главное в этом проекте: ­интерфейс запуска (подзадача 2) должен быть как можно более простым и коротким. Так-то можно взять какой-нибудь Shorewall или попроще — Netplan, и накатать общий файл. Но он будет, считай, просто складом всех конфигов, и читать/писать такое будет сложно. Нужно внедрить в логику агента (подзадача 1) как можно больше умолчаний и угадаек, и не поддерживать use cases, в которых требуется-таки много информации задавать заранее.

Список имеющихся параметров виртуалок, и что можно на их основании предсказать

TODO

FrBrGeorge/ActualEducationalTasks/VirtAutoNet (последним исправлял пользователь FrBrGeorge 2023-04-25 10:46:48)