Proxmox на Debian в Hetzner с несколькими IP-адресами

вольный перевод
AUGUST 9, 2016

Сегодня я провел большую часть своего дня, в попытках использовать различные способы настройки Proxmox на сервере Hetzner с несколькими IP-адресами. Большинство учебных пособий, которые я нашел в Интернете, давали много информации, но, постоянно не хватало одной или двух важных деталей. Незадолго до того, как я был готов выкинуть свой компьютер из окна, у меня получилось, и мне удалось все настроить так, как я этого хотел.



Это должно стать окончательным руководством по выполнению вышеупомянутой задачи. Когда все готово, настройка включает в себя следующие функции:

  • Хост привязан к основному адресу IPv4, который поставляется с сервером (один из 18,446,744,073,709,551,616 включенных адресов IPv6)
  • Каждый IPv4-адрес отдельно делегированной подсети, используемой для виртуальных машин
  • Внутренняя частная сеть для взаимодействия между виртуальными машинами и общедоступных виртуальных машин

Гарантии
Я описываю здесь, что РАБОТАЕТ ДЛЯ МЕНЯ. Я не знаю, соответствует ли каждый из этапов наилучшей практике или даже наиболее оптимальным с точки зрения безопасности и / или производительности. Если у вас есть какая-либо дополнительная информация или я могу указать на ошибку, которую я сделал, я настоятельно рекомендую вам обратиться в раздел комментариев или через Twitter, и я буду рад внести изменения в эту статью для улучшения всех человеческих знаний.

Установка Proxmox
Установка Proxmox не очень сложна. Просто убедитесь, что вы делаете установку на чистый Debian на достаточно надежной машине, и соответствующей вашей версии Debian, из последней рекомендованной Proxmox. После того, как начальная настройка будет выполнена и ваша базовая система будет запущена, создайте файл '/etc/apt/sources.list.d/proxmox.list' и вставьте следующую строку, чтобы обновить ваши apt репозитарии:

deb http://download.proxmox.com/debian jessie pve-no-subscription

Затем добавьте ключ хранилища в свою систему с помощью следующей команды:

wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -

Далее обновите вашу систему:

apt update && apt upgrade

Теперь пришло время установить ядро и заголовки Proxmox. Не беспокойтесь, что что-то устарело, когда вы это читаете, эти пакеты будут автоматически обновляться в течение всего процесса установки.

apt install pve-firmware pve-kernel-4.4.8-1-pve pve-headers-4.4.8-1-pve
apt install ssh postfix ksm-control-daemon open-iscsi systemd-sysv

Теперь перезагрузите вашу систему, чтобы загрузить новое ядро.

После повторного запуска системы вы можете установить Proxmox VE со следующей командой:

apt-get install proxmox-ve

По завершении этого шага перезагрузитесь снова.

Отлично, теперь у вас Proxmox работает и можно теоретически начать создавать виртуальные машины и контейнеры, шо сумасшедшему. Но та часть, которая занимала меня больше всего времени еще впереди. Мне жаль, что у меня не было этого блога несколько часов назад.


Настройка сети
Чтобы использовать все доступные IP-адреса вашей делегированной подсети IPv4 на выделенном сервере Hetzner, вам необходимо настроить мост на своем хост-компьютере.

Отредактируйте файл «/etc/network/interfaces» и заполните данные, полученные вами от Hetzner. Игнорируйте первые два определения для loopback и loopback IPv6 и сопоставьте конфигурацию 'eth0' с следующим:

auto eth0
   iface eth0 inet static
   address <YOUR MAIN IP>
   netmask 255.255.255.224
   gateway <YOUR GATEWAY>
   up route add -net <YOUR NET> netmask 255.255.255.224 gw <YOUR GATEWAY> eth0

Теперь эти настройки должны быть в значительной степени уже присутствующими в конфигурации автоматического инсталляции Hetzner во время первоначальной установки операционной системы. Далее находится конфигурация IPv6 хоста:


iface eth0 inet6 static
   address <ONE OF YOUR IPv6 ADDRESSES>
   netmask 128
   gateway fe80::1

Опять же, эти строки уже должны существовать в вашей конфигурации сети, любезно предоставленной некоторым хорошим инженером Hetzner, который предварительно использует все стандартные установки с автоматическими IP-конфигурациями. Только вы должны опустить сетевую маску, потому что этот интерфейс теперь участвует только в подсети и не поглощает все адреса IPv6. Вся подсеть будет назначена мосту ниже.

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

auto vmbr0
iface vmbr0 inet static
   address <YOUR MAIN IP>
   netmask 255.255.255.255
   bridge_ports none
   bridge_stp off
   bridge_fd 0
   bridge_maxwait 0
   pre-up brctl addbr vmbr0
   up ip route add <FIRST IP FROM YOUR SUBNET>/32 dev vmbr0
   up ip route add <SECOND IP FROM YOUR SUBNET>/32 dev vmbr0
   ...

Добавьте строку «up ip route add ...» для каждого IPv4-адреса из вашей делегированной подсети. Таким образом, все они будут доступны на мосту, и каждый может поговорить со всеми.

Также добавьте следующее, чтобы иметь возможность маршрутизировать адреса IPv6 на и с ваших виртуальных машин:

iface vmbr0 inet6 static
   address <YOUR MAIN IPv6 ADDRESS>
   netmask 64

Это касается всех доступных адресов IPv4 и IPv6 в вашем распоряжении на уровне хоста. Позже мы рассмотрим, как правильно настроить своих гостей в соответствии с этими настройками. Но сначала мы создадим еще один мост на хосте, чтобы ...

Настройка внутренней сети
Приятно оснащать каждую виртуальную машину двумя виртуальными сетевыми интерфейсами,  второй, подключенный к частной сети, которая доступна только с вашего хоста и всех виртуальных машин. Таким образом, вы можете, например, создавать базы данных, кэширование или рабочие машины, которые не нуждаются в общедоступном IP-адресе и никогда не будут видны в открытом Интернете.

Для этого в '/etc/network/interfaces' еще добавьте следующие строки в конец:

auto vmbr1
iface vmbr1 inet static
   address 10.20.30.1
   netmask 255.255.255.0
   bridge_ports none
   bridge_stp off
   bridge_fd 0
   post-up iptables -t nat -A POSTROUTING -s '10.20.30.0/24' -o eth0 -j MASQUERADE
   post-down iptables -t nat -D POSTROUTING -s '10.20.30.0/24' -o eth0 -j MASQUERADE

Эти строки настраивают внутреннюю сеть. Последние две строки настраивают NAT (Network Address Translation), после этого ваши «частные» виртуальные машины могут подключаться к Интернету, например, устанавливать программное обеспечение через apt и загружать обновления. Таким образом, виртуальные машины могут подключаться к внешней среде изнутри, но не могут быть доступны напрямую из Интернет, так же, как ваш домашний компьютер за маршрутизатором.

Поскольку наш хост выступает в роли маршрутизатора, мы должны убедиться, что в нем есть все функции переадресации IP-пакетов. Откройте '/etc/sysctl.conf' и убедитесь, что следующие две строки не закомментированы:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Напоследок, убедитесь, что ваш хост не будет отправлять сообщения ICPM «перенаправлять» гостям, сообщая им, чтобы они сами нашли шлюз. Это не будет работать с нашей конкретной настройкой сети. Добавьте в '/etc/sysctl.con' следующее:

net.ipv4.conf.all.send_redirects=0

Это завершаюший шаг в конфигурации хоста. Теперь вы можете перезагрузить сервер последний раз или активировать новые настройки, записав параметры sysctl напрямую и перезапустив сетевой стек. Теперь переходим к последнему шагу.

Настройка гостевых хостов
Дальше все зависит от метода, который вы выбираете для создания виртуальной машины. Proxmox предлагает контейнеры LXC и полностью виртуализированные машины. В зависимости от ваших потребностей оба имеют свои преимущества и недостатки, но обсуждение преимуществ того или иного подхода выходит далеко за рамки этой статьи.

Настройка контейнера
Сначала мы проверим создание контейнера из веб-интерфейса Proxmox. Введите в свой браузер адресс «https://<ВАШ MAIN IP>:8006» (убедитесь в том, что вы на самом деле ввели https, или ваш браузер не подключится) и войдите в систему с учетными данными пользователя Linux. Сначала вы должны загрузить шаблон контейнера (например, образ системы), прежде чем создать свой первый контейнер.
  • Разверните узел «Datacenter» в меню левой боковой панели
  • Нажмите «local» группа хранения
  • Найдите кнопку с названием «Templates» в области содержимого и нажмите на нее.
  • Выберите предпочтительный шаблон «debian-8.0-standard», например.
  • Нажмите кнопку «Download»
Теперь, когда ваш шаблон доступен, давайте перейдем к фактическому разворачиванию контейнера.
  • Нажмите «Create CT» в правом верхнем углу
  • Выберите хорошее имя хоста
  • Установите пароль root
  • На вкладке «Template» выберите только что загруженный шаблон
  • На «Root Disk» выберите соответствующий размер диска
  • В разделе «CPU» выберите необходимое количество процессоров
  • Назначьте достаточно «Memory»
Следующая вкладка самая интересная: «Network»
  • Убедитесь, что вы настраиваете 'eth0'
  • Оставьте поле MAC-адреса пустым, чтобы получить новое случайно созданное из Proxmox
  • Выберите мост "vmbr0"
  • Оставить «VLAN Tag» и «Rate limit» на данный момент
  • Выберите «static» IPv4
  • Вставьте один из IPv4-адресов вашей подсети в «IPv4/CDR» и добавьте к нему суффикс «/32» (например, 192.0.2.2/32)
  • Введите основной IP-адрес хостов в «Gateway (IPv4)». Тот, который мы установили waaaay в нашей конфигурации eth0 в '/etc/network/interfaces' на хосте
  • Выберите «static» IPv6
  • Вставьте один из ваших адресов в размере 18,446,744,073,709,551,616 IPv6, если вы можете найти тот, который вы еще не использовали
  • В качестве «Gateway (IPv6)» введите адрес IPv6, который вы назначили eth0 и vmbr0 на хосте.
Следующие две вкладки «DNS» и «Подтвердить» не имеют интересных настроек, и вы можете настроить их сами. Теперь у вас есть контейнер, который готов к запуску, и к нему можно получить доступ через публичный IP-адрес через Интернет.
Теперь, если вы хотите и нуждаетесь в частной сети, просто добавьте второй сетевой интерфейс через графический интерфейс в свой контейнер (нажмите на свой контейнер в меню слева и выберите сеть -> добавить) и укажите ему IP-адрес в настроенной подсети, 10.20.30.2 например. Укажите шлюз на мосту вашего хоста частный IP, в нашем примере 10.20.30.1. Наконец, привяжите этот интерфейс к частному мосту 'vmbr1'.
Настройка виртуальной машины
Тут немного сложнее, и я опишу, как я это сделал. Как упоминалось ранее, есть, вероятно, лучшие способы, поэтому, пожалуйста, не молчите, если вам есть что добавить.
Поскольку для виртуальных машин нет шаблонов, вам необходимо обратиться к установочному носителю предпочитаемой вами операционной системы и скачать его как файл образа диска ISO. Я выбираю Debian 8 минимальный, который можно загрузить через https://www.debian.org/CD/netinst
  • Снова выберите хранилище “local” в меню слева
  • Нажмите «Upload» в основной области содержимого
  • Загрузите образ ISO
  • Нажмите «Create VM» в правом верхнем углу
  • Начните с выбора остроумного имени хоста
  • В «OS» выберите «Linux 4.X/3.X/ 2.6 Kernel», если вы ставите гостевую систему Debian
  • В «CD/DVD» выберите «Use CD/DVD disc image file (iso)» и выберите только что загруженный образ ISO
  • Выбор «Hard Disk», «CPU» и «Memory» должен быть очень простым. Выберите все, что вы считаете необходимым для своей виртуальной машины
  • На вкладке «network» выберите «Bridged mode» и выберите «vmbr0»,
  • В разделе «Model» выберите «VirtIO», если ваша гостевая ОС поддерживает его
  • Подтвердите свои настройки и нажмите «Finish».
Теперь наступает сложная часть. Запустите новую виртуальную машину и выберите «Консоль» в верхнем меню. Это запустит виртуальную консоль (к сожалению, требуется плагин Java-браузера), который позволит вам начать установку. Теперь минимальная установка Debian довольно проста, единственное: мы не можем настроить сеть во время установки, потому что наш шлюз будет находиться за пределами настроенной подсети, и установщик не предусматривает эту настройку. Я нашел очень старую дискуссию об ошибках Debian по этой теме, но вывод был в значительной степени не в том, чтобы изменять установщик, потому что люди, которые в этом нуждаются, найдут другие способы.
Поэтому завершите установку без какого-либо доступа к сети и перезагрузите виртуальную машину. После повторного входа в систему через виртуальную консоль снова отредактируйте «/etc/network/interfaces» - на этот раз в гостевой системе и заполните его следующими значениями:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address <ONE OF YOUR SUBNET'S IPs>
   netmask 255.255.255.255
   dns-nameservers 213.133.100.100 213.133.98.98 213.133.99.99
   post-up ip route add <YOUR MAIN IP> dev eth0
   post-up ip route add default via <YOUR MAIN IP> dev eth0
   pre-down ip route del default via <YOUR MAIN IP> dev eth0
   pre-down ip route del <YOUR MAIN IP> dev eth0

iface eth0 inet6 static
   address <ONE OF YOUR IPv6 ADDRESSES>
   netmask 64
   gateway <YOUR MAIN IPv6 ADDRESS>

auto eth1
iface eth1 inet static
   address 10.20.30.3
   netmask 255.255.255.0
   gateway 10.20.30.1

После перезагрузки вашей виртуальной машины вы должны получить доступ к ней из Интернета, а также иметь возможность общаться с вашим хостом и другими виртуальными машинами и контейнерами через вашу частную сеть. Теперь, если вы хотите, чтобы частная сеть являлась только виртуальной машиной или контейнером, просто удалите eth0 из веб-интерфейса или удалите его из «/etc/network/interfaces», и вы получите машину полностью за NAT.

Заключение
Эта статья стала намного длиннее, чем я ожидал, но это справедливо для любой установки Proxmox с публичными IP-адресами, которые я прошел сегодня, поэтому я думаю, что это только подходит.

Если вы следовали этому описанию, теперь у вас должен быть полностью совместимый с IPv4 и IPv6 кластер VM, который аккуратно маршрутизируется через ваш хост и в Интернет в случае общественного моста или изолирован через NAT в случае частного моста. Я предполагаю, что эта настройка достаточно гибкая, чтобы удовлетворить широкий спектр потребностей виртуальных вычислений. Любое более активное участие, вероятно, будет означать выделенную виртуальную виртуальную машину с использованием Vayatta/vOS, pfSense или что-то подобное. Я решил, что это будет излишним для моих требований, и я предпочел бы потратить время на выяснение того, как правильно использовать внутренние компоненты Linux для настройки всего.

Пожалуйста, не стесняйтесь говорить о том, как вы решили эти проблемы, или если вы заметили что-либо в моих словах, которые можно было бы улучшить, оптимизировать или изменить.



Ссылка на оригинальную статью