Proxmox на Debian в Hetzner с несколькими IP-адресами
вольный перевод
AUGUST 9, 2016
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
|
Затем добавьте ключ хранилища в свою систему с помощью следующей команды:
Далее обновите вашу систему:
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 для настройки всего.
Пожалуйста, не стесняйтесь говорить о том, как вы решили эти проблемы, или если вы заметили что-либо в моих словах, которые можно было бы улучшить, оптимизировать или изменить.
Ссылка на оригинальную статью