Вопрос или проблема
Я настраиваю свой первый Proxmox на выделенном сервере. Провайдер выделенных серверов предложил мне сервер, на котором я установил Proxmox и одну IP-адрес, прикрепленную к мостовому интерфейсу.
Вот архитектура, которую я хочу построить:
Некоторые соображения:
- Я хочу, чтобы два физических интерфейса eno1/eno2 работали в режиме объединения для резервирования.
- Я поставлю реверсивный прокси NGINX перед всеми веб-интерфейсами.
- Для каждой ВМ мне доступ по ssh (порт 22 локальный, перенаправленный с разных портов в публичный (пример: 141.aaa.bbb.23:221 идет на s1 порт 22, 141.aaa.bbb.23:222 идет на s2 порт 22 и так далее). То же самое для доступа к Zabbix (141.aaa.bbb.23:10051 идет на zabbix порт 10051).
Вот моя начальная конфигурация сервера:
У меня есть некоторые сомнения о том, как настроить желаемую конфигурацию:
a) Я создал мост следующим образом для внутренних ВМ, чтобы связать ВМ, но как мне сказать этому мосту выходить на vmbr0 для публичного интернета?
b) Как объединить два интерфейса вместе. Я просто не могу создать объединение между eno1 и eno2, так как eno1 подключен к моему публичному интерфейсу, и если я уберу этот публичный IP, то потеряю доступ к своему серверу.
c) Как реализовать то, что мне нужно в данной архитектуре?
A и C.
Ваша текущая настройка – это мостовая сеть, ВМ, подключенные к vmbr0, принадлежат одной сети (или широковещательной области). В такой конфигурации DHCP должен предоставляться вашим провайдером, а не хостом.
Желаемое состояние – это сеть NAT, где ВМ не могут напрямую отправлять Ethernet-кадры во внешнюю сеть, и их частные IP заменяются IP хоста для исходящих пакетов (маскарад).
Вы не должны присваивать 141.aaa.bbb.23 устройствам vmbr0 или vmbr1. Вы можете оставить 141.aaa.bbb.23 назначенным на устройство объединения и иметь только vmbr0 (создание vmbr1 не обязательно).
Маршрутизация через объединение будет автоматически обрабатываться таблицей маршрутизации хоста.
Смотрите здесь:
- https://wiki.libvirt.org/page/VirtualNetworking
- https://pve.proxmox.com/wiki/Network_Configuration#_choosing_a_network_configuration
- https://pve.proxmox.com/wiki/Network_Configuration#_masquerading_nat_with_tt_span_class_monospaced_iptables_span_tt
- https://pve.proxmox.com/wiki/Network_Configuration#_linux_bond
B.
Я просто не могу создать объединение между eno1 и eno2, так как eno1 подключен к моему публичному интерфейсу, и если я уберу этот публичный IP, то потеряю доступ к своему серверу.
Вам может понадобиться управление вне полосы (например, KVM через IP), чтобы применить начальную конфигурацию, если это связано с потерей доступа в интернет.
Я просто не могу создать объединение между eno1 и eno2, так как eno1 подключен к моему публичному интерфейсу, и если я уберу этот публичный IP, то потеряю доступ к своему серверу.
Добро пожаловать в джунгли.
С учетом ограничений, без доступа к удаленной консоли и при отсутствии желания со стороны провайдера хостинга сотрудничать, у вас нет другого выбора. Либо вы меняете один из этих факторов, либо….
Что вы могли бы сделать, так это создать новый конфигурационный файл (Proxmox использует /etc/network/interfaces), скажем, /etc/network/proposed, сделать резервную копию вашей рабочей конфигурации как, скажем, /etc/network/working, а затем создать задания cron для развертывания каждой из этих конфигураций и применения изменений. Установите задание cron для “proposed” на запуск, скажем, в 15:00, а для “working” в 16:00.
Конфигурация объединения будет выглядеть примерно следующим образом…
auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode balance-rr
iface vmbr0 inet static
address 141.aaa.bbb.23/24
gateway 1141.aaa.bbb.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '141.aaa.bbb.23/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '141.aaa.bbb.23/24' -o eno1 -j MASQUERADE
iface vmbr1 inet static
address 192.168.0.1/24
пример: 141.aaa.bbb.23:221 идет на s1 порт 22, 141.aaa.bbb.23:222 идет на s2 порт 22
?
Просто используйте ваш хост Proxmox как промежуточный узел….
ssh -J 141.aaa.bbb.23 192.168.0.102
(вы можете предварительно настроить это в ~/.ssh/ssh_config)
Ответ или решение
Настройка сети в Proxmox с использованием одного IP для нескольких ВМ
При развертывании системы виртуализации Proxmox на выделенном сервере с одним публичным IP-адресом, важно правильно спроектировать сетевую инфраструктуру для обеспечения правильного доступа к виртуальным машинам (ВМ) и их взаимодействия с внешним миром. В данной статье мы рассмотрим, как настроить Proxmox для работы с несколькими виртуальными машинами, используя один IP-адрес.
Исходные условия
У вас имеется сервер с двумя физическими интерфейсами (eno1 и eno2), и вы хотите настроить их в режиме агрегации (bonding) для обеспечения отказоустойчивости. У вас также установлен Proxmox с одной связанной сетевой интерфейсом (vmbr0), который будет использоваться для подключения ВМ к публичной сети.
Архитектурные требования:
- Настроить интерфейсы eno1 и eno2 в режиме бондинга.
- Развернуть обратный прокси NGINX для обработки веб-интерфейсов.
- Организовать доступ к SSH и специфическим портам (например, Zabbix) на ВМ через проксирование портов.
Настройка сети
1. Настройка бондинга интерфейсов
Создание бондинга на Proxmox — это шаг, который позволяет эффективно использовать ресурсы двух интерфейсов. В вашем случае необходимо убедиться, что интерфейсы eno1 и eno2 связаны между собой до того, как будет установлен IP-адрес на интерфейс бондинга.
Для этого отредактируйте файл конфигурации сети /etc/network/interfaces
:
auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode active-backup # или balance-rr, в зависимости от ваших нужд
iface vmbr0 inet static
address 141.aaa.bbb.23/24
gateway 141.aaa.bbb.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -o bond0 -j MASQUERADE
iface vmbr1 inet static
address 192.168.0.1/24 # Частная подсеть для вас ВМ
2. Настройка NAT для виртуальных машин
Чтобы обеспечить работоспособность ВМ при использовании одного публичного IP-адреса, вам следует использовать NAT (маскировка). Это делается с помощью правила iptables
, как указано в конфигурации выше.
3. Прокси-подход и проброс портов
Для настройки доступа к SSH и другим сервисам на ВМ, можно использовать перенаправление портов. Например, для перенаправления на ВМ с IP 192.168.0.102 и портом SSH 22, настройте iptables
на хосте:
iptables -t nat -A PREROUTING -p tcp --dport 221 -j DNAT --to-destination 192.168.0.102:22
iptables -t nat -A PREROUTING -p tcp --dport 222 -j DNAT --to-destination 192.168.0.103:22
iptables -t nat -A PREROUTING -p tcp --dport 10051 -j DNAT --to-destination 192.168.0.104:10051
После выполнения данных действий, доступ к разным ВМ через разные порты будет осуществляться через ваш публичный IP-адрес.
Подведение итогов
Siguiendo эти шаги, в Proxmox можно организовать работу нескольких виртуальных машин с одним публичным IP-адресом, что позволяет экономить ресурсы и упрощает администрирование сети. Для дальнейшей настройки может использоваться время от времени прокси-сервер NGINX для упрощения доступа к веб-интерфейсам.
Не забудьте тестировать каждую часть конфигурации, чтобы убедиться в ее работоспособности, и сохранять резервные копии используемых конфигурационных файлов перед внесением изменений.