Настройка simple sdn в Proxmox

Решил, не откладывая в долгий ящик, проверить работу SDN на Proxmox 8.1. У меня как раз стоял настроенный недавно чистый сервер, причём версии именно 8.1. Я даже не обратил внимание на нововведения этого релиза и настроил всё по старинке с ручным созданием бриджа, правилами iptables с NAT, для того, чтобы гипервизор выступал в роли шлюза для виртуальных машин. Сейчас сделаю всё то же самое, только через настройки SDN.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Если вы обновили до Proxmox 8.1 с прошлых релизов, то необходимо выполнить подготовительные действия.

1️⃣ Устанавливаем дополнительные пакеты и запускаем службу:

# apt update
# apt install libpve-network-perl dnsmasq
# systemctl disable --now dnsmasq

Dnsmasq заработает на всех интерфейсах, слушая 53 порт. Обязательно отключите к нему доступ из вне с помощью firewall.

2️⃣ Добавляем в /etc/network/interfaces в самый конец:

# source /etc/network/interfaces.d/*

Теперь можно идти в GUI Proxmox, в раздел Datacenter ⇨ SDN ⇨ Zones. Добавляем новую зону типа Simple. Идём в Vnets, добавляем новую сеть, например vm. Имя этой сети будет задавать имя сетевого бриджа, который будет создан в системе. Выбираем созданную сеть и добавляем к ней подсеть. Например, 10.200.0.0/24, шлюз 10.200.0.1, в SNAT ставим галочку. Во вкладке DHCP Ranges указываете диапазон IP адресов, которые будут назначаться виртуалкам с этой сетью.

Когда внесёте все настройки, возвращайтесь в раздел SDN и нажимайте на кнопку Apply, чтобы изменения применились. А теперь рассказываю, что конкретно происходит после создания этих настроек.

После того, как вы создали сеть в Vnets, в файле конфигураций /etc/network/interfaces.d/sdn появятся настройки обычного сетевого бриджа Linux. Если при создании сети вы выбрали использование SNAT, к параметрам бриджа добавятся правила для iptables, типа таких:

post-up iptables -t nat -A POSTROUTING -s '10.200.0.0/24' -o inet0 -j SNAT --to-source 214.42.6.135
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1

При этом сам бридж уже будет в системе с указанным названием. В качестве IP адреса у него будет настроен адрес шлюза, который вы указали в настройках Subnet.

Для созданной зоны, в которую входит сеть, будет создана отдельная директория с настройками dnsmasq в /etc/dnsmasq.d/, а диапазон выбранных ip адресов будет указан в отдельном файле конфигурации с именем сети:

dhcp-option=tag:vmlocal-10.200.0.0-24,option:router,10.200.0.1
dhcp-range=set:vmlocal-10.200.0.0-24,10.200.0.0,static,255.255.255.0,infinite
interface=vm

Там же будут и привязки MAC адресов к IP. Вот в общем-то и всё. Реализовано всё довольно просто и удобно. Никакой уличной магии и собственных костылей. Взяли известные инструменты и добавили управление ими через веб интерфейс. Единственно, чего не хватает, непосредственно локального DNS сервера. Не знаю, почему от dnsmasq взяли только DHCP. Возможности настройки локального DNS сервера в GUI нет. Хотя ничто не мешает добавить их руками в dnsmasq.

Настройка Proxmox SDN

При создании VM вы можете добавить созданную сеть в качестве сетевого интерфейса. После загрузки система получит IP адрес в соответствии с настройками подсети. И если вы включили SNAT, то у неё сразу будет доступ в интернет.

Для меня пока остался нерешённым один важный момент. Как аккуратно связать свои настройки iptables с настройками, которые делает SDN. Это нужно, потому что встроенный firewall по прежнему не умеет пробрасывать порты в VM. Технически то это не трудно, надо просто понять, как это сделать максимально удобно. Я привык их хранить в отдельном скрипте и подгружать при старте сервера. Пока просто вручную добавил туда правила от SDN.

Подводя итог, можно сказать, что теперь настроить гипервизор в качестве шлюза для виртуальных машин можно полностью в GUI. Получив в качестве бонуса интегрированный в веб интерфейс IPAM. И это я разобрал только самый простой вариант — Simple Zone для создания виртуальной сети в рамках одного гипервизора. Остальные настройки ещё более масштабные.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

13 комментариев

  1. Александр

    Все получилось с первого раза! Спасибо!
    Теперь задача, добавил сетевую карту, чтобы бекапы добавлять по сети, как соединить его с новым SDN, а то знания моего не хватает)))

  2. Добрый день. Планирую заменить текущий гипервизор Ubuntu 20.04 + KVM/QEMU на Proxmox 8

    У меня настроен LVM и хотелось бы его сохранить
    Я правильно понимаю, что стандартный установщик Proxmox ставится на диск без LVM и нет расширенных настроек форматирования дисков?
    Есть какие-то подводные камни, если установить Debian так как я хочу, а на него Proxmox? (например обновления Proxmox, да и самого Debian)

    • Никаких подводных камней нет. Ставьте Debian, разбивайте как вам угодно диски и потом накатывайте Proxmox. Я сам поступаю именно так.

  3. Установлен Proxmox 7.4-17 ,
    процессор Xeon Gold 6426Y
    Из-за одной из виртуалок с виндой (а может из-за нескольких) падает система с ошибкой

    x86/split lock detection: #AC: crashing the kernel on kernel split_locks and warning on user-space split_locks

    в логи регулярно падает подобное:

    x86/split lock detection: #AC: CPU 2/KVM/6306 took a split_lock trap at address: 0xfffff80412642a7c
    x86/split lock detection: #AC: CPU 3/KVM/6307 took a split_lock trap at address: 0xfffff80412642a7c

    Настройки виндовых виртуалок, как в статье.... не нашел решения проблемы, кроме как

    " In your case you need to add split_lock_detect=off to turn off split lock detection."
    https://forum.proxmox.com/threads/x86-split-lock-detection.111544/

    но эта штука просто отключит оповещения, насколько я понял. Пока не знаю, что делать, уже обновил ядро до последнего. М.б. пробовать обновиться до 8.1?

    • Я где-то видел такие ошибки. Люди жаловались. Но сам не вникал в суть, так как лично не сталкивался. Как лечить - не знаю.

      • Аноним

        Снимаю вопрос - планка памяти глючит, перешерстил логи BIOSa и обнаружил...

      • Снимаю вопрос - планка памяти глючит, перешерстил логи BIOSa и обнаружил...
        но вот эти штуки

        x86/split lock detection: #AC: CPU 2/KVM/6306 took a split_lock trap at address: 0xfffff80412642a7c
        x86/split lock detection: #AC: CPU 3/KVM/6307 took a split_lock trap at address: 0xfffff80412642a7c

        точно с виндовых виртуалок лезут и crashing the kernel on kernel split_locks повел меня не по тому пути

  4. в инструкции от вендора:
    # disable default instance
    systemctl disable --now dnsmasq

    а у вас почемуто наоборот enable

    • Не очень понимаю, как dnsmasq должен работать, если его выключить. Функциональность реализована на его базе. Сейчас точно не помню, но я вроде бы включал его, когда тестировал. Надо будет перепроверить при новой настройке.

    • Тут вот обсуждали эту же тему, но конкретного ответа так и нет.
      https://forum.proxmox.com/threads/no-dhcp-options-with-sdn.139367/
      У пользователя ничего не работало, когда он отключал dnsmasq. Проверьте у себя, что в итоге получится.

      • Если я не ошибаюсь то логика такая: По умолчанию служба dnsmasq выключена, но когда вы настраиваете "Zones" то Proxmox сам создает службу с нужными параметрами запуска чтобы dnsmasq как раз не слушал 53 порт на всех интерфейсах.
        по крайней мере у меня так заработало.
        я выключил службу согласно офф.инструкции, затем создал зону "test" и в итоге у меня в списках служб есть:

        dnsmasq@test.service loaded active running dnsmasq (test) - A lightweight DHCP and caching DNS server

        если обратить внимание то в названии запущенного сервиса присутствует имя созданной зоны (test)

        и слушает она только на определенном адресе (который я задал в настройках этой зоны):

        ss -ntulp |grep "53 "
        udp UNCONN 0 0 192.168.68.1:53 0.0.0.0:* users:(("dnsmasq",pid=6098,fd=6))

        • Спасибо за информацию. Думаю, так правильнее. Банальный запуск dnsmasq тоже решает задачу, так как там подключаются все вложенные конфиги, но это неправильно, так как грузится в том числе и дефолтная конфигурация, которая не нужна.

          Поправил статью.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar