вторник, 16 января 2018 г.

Настройка Proxmox с внешними IP-адресами для ВМ

Есть сервер со свежеустановленным Proxmox 5 (8CPU/16GB RAM) в ДЦ OVH.
Основной адрес сервера: 1.1.1.1, на нем крутится панель, которая доступна по адресу https://1.1.1.1:8006/
Также есть несколько одиночных IP-адресов купленных все у тех же OVH.
Задача: нарезать виртуалок в Proxmox и к каждой виртуалке добавить внешний IP-адрес.
У OVH есть такая особенность, что IP-адрес привязывается к виртуальному MAC-адресу, предположим что у нас такая картина:
2.2.2.2 02:00:00:11:11:11
3.3.3.3 02:00:00:12:12:12
4.4.4.4 02:00:00:13:13:13

Идем на сервер по SSH и в панель через браузер.

1. Первым делом удаляем в панели интерфейс vmbr1, он нам не пригодится (можно его не трогать, если не мешает)

2. Включаем IP forwarding:
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

2. Загружаем образ Ubuntu 16.04:
# cd /var/lib/vz/template/iso/
# wget http://releases.ubuntu.com/16.04/ubuntu-16.04.3-server-amd64.iso

3. Настраиваем DHCP (для каждого соответствия MAC-IP должен быть свой блок):
# apt-get install isc-dhcp-server
# vim /etc/dhcp/dhcpd.conf
option domain-name "domain.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
option subnet-mask 255.255.255.0;
ddns-update-style none;

subnet 0.0.0.0 netmask 0.0.0.0 {
   authoritative;
   default-lease-time 600;
   max-lease-time 7200;
}
host 2.2.2.2 {
   hardware ethernet 02:00:00:11:11:11;
   fixed-address 2.2.2.2;
   option routers 2.2.2.254;
}
host 3.3.3.3 {
   hardware ethernet 02:00:00:12:12:12;
   fixed-address 3.3.3.3;
   option routers 3.3.3.254;
}
host 4.4.4.4 {
   hardware ethernet 02:00:00:13:13:13;
   fixed-address 4.4.4.4;
   option routers 4.4.4.254;
}

# vim /etc/default/isc-dhcp-server
INTERFACESv4="vmbr0"

# systemctl restart isc-dhcp-server
# update-rc.d isc-dhcp-server enable

3. Создаем виртуалку (в панели) на основе имеющегося образа Ubuntu 16.04, указываем параметры:
VMID: 100
Name: ubuntu-16.04
ISO image: ubuntu-16.04.3-server-amd64.iso
Size: 10GB
Cache: Write through
Cores: 1
Memory: 1024
Bridge mode: vmbr0
MAC:  02:00:00:11:11:11 (тут обратить внимание на то, какой IP-адрес мы будем использовать, такой MAC и указываем)

4. Стартуем виртуалку и в VNC устанавливаем ОС с помощью iso-образа:
IP-адрес назначается автоматически через DHCP в соответствии с установленным MAC
Hostname: ubuntu
Username: ubuntu
Password: passw0rg
Partition method: manual (all space ext4 / with boot flag)
Install secure updates automatically
Standard system utilities, Install OpenSSH server

После установки заходим на сервер по SSH:
$ ssh [email protected]
$ sudo -s
# apt update ; apt upgrade
# systemctl stop mdadm ; systemctl disable mdadm
# ssh-keygen -A
# usermod -a -G sudo ubuntu

5. Отключаем виртуалку в панели
6. Убираем у виртуалки из оборудования CD-ROM (iso-образ) и сетевой интерфейс
7. В панели на виртуалку жмем "Convert to template"
Теперь это у нас шаблон, мы его не трогаем и не удаляем (желательно в будущем забекапить).

Итак у нас есть клон (шаблон) с VMID=100 с именем ubuntu-16.04 и нам на его основе нужно создать виртуалку.

8. Создаем новую виртуалку из клона (тут я учитываю еще то, что диск будет нестандартного размера, чтобы описать как его растягивать):
# TEMPLATEID=100 # ID образа
# VMID=101 # ID виртуалки
# NAME=vm1ubuntu # имя виртуалки
# MAC=02:00:00:12:12:12 # для адреса 3.3.3.3
# RAM=1024
# SOCKETS=1
# CORES=2
# HDD=15
# qm clone $TEMPLATEID $VMID
# qm set $VMID -sockets $SOCKETS -cores $CORES -memory $RAM -name $NAME -net0 virtio=${MAC},bridge=vmbr0 -autostart 1
# qm resize $VMID scsi0 ${HDD}G
# qm start $VMID

9. Соединяемся к виртуалке и растягиваем место:
$ ssh [email protected]
$ sudo -s
# fdisk /dev/sda <<EEOF
d
n
p
1
2048
w
EEOF
# reboot

После перезагрузки снова соединяемся к серверу и растягиваем ФС:
# resize2fs /dev/sda1
# df -h

Виртуалка готова к работе.
По аналогии качаются другие шаблоны, добавляются адреса и т.д.
Также нужно будет учесть то, что в CentOS статически прописываются MAC-адреса в конфигах, поэтому вроде надо будет внести изменения в конфиги или их почистить:
/etc/udev/rules.d/70-persistent-net.rules
/etc/sysconfig/network-scripts

Комментариев нет: