ProxMox 5.3 отдельная сеть для VM

Опубликовано: 2019-2-21 10:25

    Запустил сервер виртуализации на ProxMox 5.3, всё вроде бы хорошо, работает стабильно и быстро. Но уж очень много нюансов в настройке отдельных параметров самой системы и виртуальных машин. Потребовалось настроить отдельную сеть для виртуальных машин, так, чтобы она была в общей сети и всё виделось в обе стороны. Развлекался 2 дня, а всё оказалось просто!

    Исходные данные. Мы имеем компьютер с Linux (Gentoo) с адресом 10.0.0.1 на нем поднят шлюз, прокси в интернет и куча других служб. Добавился сервер виртуализации на основе ProxMox 5.3. На нём нужно поднять сервер с ПО, которое привязано к сети 10.0.1.0/24. Т.е. если его поместить в другую сеть, работать не будет нужна именно 10.0.1.0. Это и есть основная проблема, т.к. можно было бы обойтись одной сетью, которая и так уже есть . Но всё это есть частный случай, и мотивы у всех будут разные.

    На сервере ProxMox есть две сетевые карты (eno1, eno2) и по умолчанию создается мост (vmbr0) для виртуальных машин в составе с eno1. При установке и настройке ProxMox он задаст вопрос об установке ip адреса, вот этот адрес и будет установлен для моста vmbr0. Таким образом мы получаем мост для виртуальных машин с адресом, указанным при установке (10.0.0.10), и занимающим первый сетевой адаптер. Второй сетевой адаптер остаётся для других нужд.

2019-02-21

    Если создать виртуальную машину из сети 10.0.1.0 и подключить её к мосту с сетью 10.0.0.10 ничего не заработает. Пакеты естественно не захотят ходить никуда. Поэтому создаем второй мост.

    В мост для сети 10.0.1.0 физические сетевые адаптеры входить вообще не будут. Он будет только объединять виртуальные машины сети 10.0.1.0. Но адрес ему задать нужно, и пусть это будет адрес 10.0.1.1.

2019-02-21

    Теперь нужно настроить правила для NAT, позволяющие трафику из моста vmbr1 (10.0.1.0) ходить через vmbr0 в общую сеть 10.0.0.0. В интернете они упоминаются в каждой второй статье или теме на форуме касательно настройки двух бриджей. Выглядят они так:

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o vmbr0 -j MASQUERADE

    Добавить их нужно в самый конец файла /etc/network/interfaces.new на сервере ProxMox. После изменений настроек мостов, у вас должен был появится файла interfaces.new, который при перезапуске сервера заменит файл interfaces без расширения new и исчезнет, поэтому настройки NAT лучше поместить в него. Если файл с расширением .new отсутствует, то три волшебных строки нужно будет добавить в файл interfaces и перезагрузить сервер.

    Суть их проста, при поднятии интерфейса разрешаем пробрасывать трафик на уровне ядра и в файрволе включаем маскировку пакетов сети 10.0.1.0 проходящих через мост vmbr0, без маскировки пакета внутри другой сети, он никуда не долетит. При отключении интерфейса отменяем правило о маскировке, чтобы не было лишнего. Гениальное - просто.

    На виртуальной машине в мосту 10.0.1.0 нужно указать свой ip адрес, например 10.0.1.10, и адрес шлюза, а им является адрес моста, т.е. 10.0.1.1.

2019-02-21

    На данном этапе виртуальная машина будет успешно пинговать обе сети 10.0.0.0 и 10.0.1.0, но из сети 10.0.0.0 ни один компьютер не будет видеть виртуалку. Связано это с тем, что пакеты в сети 10.0.0.0 летят на шлюз по умолчанию 10.0.0.1, а он уже перекидывает их дальше, куда нужно. Но сам по себе он не узнает о том, что на сервере виртуализации за основном мостом есть второй и вот на нем есть ещё одна подсеть 10.0.1.0. Если вместо сети 10.0.0.0 у вас интернет, и не нужно, чтобы видно адреса за мостом 10.0.1.0, то на этом можно остановиться и для вас цель достигнута, в моём случае мне этого мало.

     Для того, чтобы пакеты для сети 10.0.1.0 могли доходить из сети 10.0.0.0 нужно на шлюзе (Linux Gentoo) добавить в таблицу маршрутизации новый маршрут.

route add -net 10.0.1.0/24 gw 10.0.0.10 eth1
    Маршрут скажет серверу маршрутизации, что трафик для сети 10.0.1.0 нужно будет выбрасывать на интерфейс ProxMox (10.0.0.10). А ProxMox уже сам пробросит пакеты дальше.

    Чтобы Gentoo запомнил маршрут и после перезагрузки всё работало без вмешательств, нужно добавить его в настройки /etc/conf.d/net

.......
routes_eth1=(
"10.0.0.0/24 via 10.0.0.1" #этот маршрут уже был
"10.0.1.0/24 via 10.0.0.10" #этот я добавил
)
.......

    И перезапустить сервер или только сетевой интерфейс командой:

/etc/init.d/net.eth1 restart

     После этого, вся подесть 10.0.1.0 будет успешно видеть подсеть 10.0.0.0 и наоборот.

    Ниже скинул свой конфиг ProxMox (/etc/network/interface), какой в итоге получился и с каким сейчас всё работает:

auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual

auto vmbr0
iface vmbr0 inet static
address  10.0.0.10
netmask  255.255.255.0
gateway  10.0.0.1
bridge-ports eno1
bridge-stp off
bridge-fd 0

auto vmbr1
iface vmbr1 inet static
address  10.0.1.1
netmask  255.255.255.0
bridge-ports none
bridge-stp off
bridge-fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.1.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.1.0/24' -o vmbr0 -j MASQUERADE
      В интернете достаточно много информации по настройке ProxMox. Система сама по себе очень стабильная и гибкая. Linux вообще сам по себе прекрасен!  Могу советовать ProxMox как мощный инструмент виртуализации, который идет в ногу со временем и поддерживает множество различных фич, которые не могу себе позволить многие платные решения. Внимание! Копирование, в том числе частичное, запрещено!

Теги: Linux Gentoo виртуальная Proxmox route маршрутизация проксмокс линукс генту мост бридж bridge virtual machine машина компьютер ПК сервер настройка server configure


vfiuchcikicshuusrch.ddns.net
Карта Сайта