Proxmox и pfSense

Настройка совместной работы Proxmox и pfSense на сервере с единственным IP-адресом

  • Начавшийся с появлением графических интерфейсов регресс средней квалификации привёл к тому, что для большинства современных IT-специалистов настройка через GUI является не только более удобной, но зачастую и единственно возможной.
  • С другой стороны, благодаря им смогли получить повсеместное распространение инструменты, считавшиеся ранее нетривиальными — например, системы виртуализации и сетевые маршрутизаторы.
  • Однако зависимость от графических средств настройки нередко оборачивается усложнением конфигурации. Например, любой современный Linux (и в определённой мере FreeBSD) из коробки является и системой виртуализации, и сетевым маршрутизатором, но отсутствие единого GUI для управления этими функциями приводит многих к необходимости одновременно иметь два специализированных дистрибутива (один из-за удобного GUI для настройки маршрутизатора, второй из-за удобного GUI для настройки виртуализации) там, где при умении пользоваться текстовой консолью хватило бы одного универсального.
  • Ниже мы описываем ситуацию, с которой столкнулся наш GUI-зависимый клиент, и решение, которое мы ему предложили.

Исходная диспозиция:

  • Имеется сервер в дата-центре, серверу выделен один публичный IP-адрес.
  • Получение дополнительных IP невозможно, IPMI отсутствует, IP-KVM не предоставляется.
  • На сервере установлен Proxmox и планируется создание нескольких виртуальных машин.
  • Связь между виртуалками и Интернетом должна производиться через pfSense, запущенный в первой из виртуалок.
  • Добиться этого можно единственным образом — передать публичный IP-адрес (а также MAC-адрес физического интерфейса) из Proxmox в pfSense.
  • Вариант с NAT 1:1 на Proxmox был отвергнут из-за неочевидности для клиента и побочных эффектов.

Трудности перевода:

  • Поскольку управление и настройка производятся через передаваемый IP, необходимо сначала полностью подготовить новые настройки на pfSense и Proxmox, а затем одновременно применить их.
  • Если при этом Proxmox отдаст IP/Mac, а pfSense их не подхватит, система станет недоступной.
  • Eсли pfSense подхватит IP/Mac до того, как их отдаст Proxmox, возникнет конфликт адресов и система станет недоступной.
  • По умолчанию pfSense не отвечает на WAN-интерфейсе даже на ping — если он не будет предварительно подготовлен для управления извне, система станет недоступной.
  • Предварительно протестировать настройки невозможно — либо они верные, либо после их применения система станет недоступной
  • Мы нашли в сети неожиданно много обсуждений данной задачи, но ни одно из них не содержало решения.
  • Единственный документ, подсказавший нам, в каком направлении следует двигаться: https://blog.kton.me/post/152460845498/proxmox-pfsense-on-one-public-ip.

Нам потребуется второй сетевой мост:

  • Автоматически создаваемый мост vmbr0 в Proxmox используется для связи с внешним миром подключенных к нему виртуальных машин, контейнеров и самого Proxmox.
  • Нам понадобится дополнительный мост vmbr1, который будет использоваться для внутренней сети: в него будет подключен LAN-интерфейс pfSense и сетевые интерфейсы всех остальных контейнеров и виртуалок.
  • После завершения настроек и перезагрузки vmbr1 превратится для Proxmox в IP-интерфейс по умолчанию, а шлюзом по умолчанию станет подключенный к этому мосту LAN-интерфейс pfSense.
  • Кроме того, до перезагрузки (т.е. до окончательного применения новых настроек) мы будем держать WAN-интерфейс pfSense подключенным к vmbr1 вместо vmbr0, чтобы полностью настроить pfSense, не создавая конфликта IP- и MAC-адресов между pfSense и Proxmox.

Порядок создания vmbr1:

  • Proxmox использует для хранения сетевых настроек классический файл /etc/network/interfaces
  • Чтобы применять его изменения без перезагрузки, необходима утилита ifup из пакета ifupdown2.
  • По умолчанию Proxmox его не устанавливает, поэтому перед созданием моста мы должны сделать это вручную из SSH-консоли:
apt update &&
apt -y dist-upgrade &&
apt -y install ifupdown2
  • После этого открываем в Веб-интерфейсе раздел System/Network и создаём новый мост с IP-адресом 10.0.0.10/24:

Обратите внимание!

  • На этом этапе у моста должен быть пустой IP-адрес шлюза.
  • В мост не должен быть подключен ни один физический интерфейс.

Загружаем дистрибутив pfSense на сервер:

gzip -d pfSense-*.iso.gz
  • Загружаем ISO-файл через Веб-интерфейс: Node => Content => Upload => ISO image.

Создаём виртуальную машину для pfSense:

  • General: Advanced => Start at boot = yes
  • OS: ISO image = pfSense, Guest OS type = other
  • Harddisk: Bus = virtio, Size = 10gb
  • CPU: cores = 2
  • Memory: 1024 megabytes
  • Network: Bridge = vmbr1, Model = virtio, MAC address = …, Firewall = off

Какой MAC-адрес следует указать в свойствах создаваемой сетевой карты?

  • В SSH-консоли Proxmox смотрим, какой физический интерфейс подключен в мост vmbr0:
brctl show
  • Затем смотрим параметры физического интерфейса:
ip link list dev имя-физического-интерфейса
  • В данном примере исходный MAC-адрес WAN-интерфейса Proxmox для назначения WAN-интерфейсу pfSense равен 00:25:90:30:48:72:

Заканчиваем настройку виртуальной машины:

  • На вкладке Hardware нажимаем Add => Network Device
  • Параметры новой сетевой карты: bridge = vmbr1, model = virtio, firewall = off

Теперь запускаем её и инсталлируем pfSense:

  • Открываем noVNC-консоль.
  • Внутри неё нажимаем “Start”.
  • Проходим установку, выбирая на всех шагах ответ по умолчанию.
  • В конце установки разрешаем перезагрузку.
  • После перезагрузки возвращаемся в раздел Hardware и выбираем для CD/DVD либо Remove, либо Edit => Do not use any media.

Настройка pfSense через консоль при первом запуске:

  • VLANs = no
  • WAN = vtnet0
  • LAN = vtnet1 (в результате экран будет выглядеть так)
  • В текстовом меню выбираем “2” (Set interface(s) IP address) и настраиваем LAN-интерфейс:
    • IP-адрес = 10.0.0.1/24
    • DHCP server = yes
    • DHCP range = 10.0.0.130-10.0.0.199
    • revert webConf to HTTP = yes

Теперь мы можем подключиться к Веб-интерфейсу pfSense:

  • Для этого подключаемся к Proxmox по SSH, создавая TCP-туннель к pfSense (здесь и далее считаем 1.2.3.4 публичным адресом сервера):
ssh 1.2.3.4 -L 8000:10.0.0.1:80

Продолжение настройки pfSense через Веб-интерфейс:

  • Мастер настройки состоит из нескольких простых шагов, большинство параметров можно принимать без изменений.
  • Логин/пароль по умолчанию: admin, pfsense
  • DNS: рекомендуем 1.1.1.1 и 77.88.8.8
  • WAN: тип = Static, IP-адрес = 1.2.3.4/24 (как у Proxmox), шлюз = 1.2.3.1 (как у Proxmox)
  • Admin password: придумайте новый.
  • Готово!

Завершение настройки pfSense:

  • System / Advanced / Admin access: Enable SSH = yes
  • System / Advanced / Networking:
    • Prefer IPv4 over IPv6 = yes
    • Disable hardware checksum offload = yes (все остальные offloadings уже отключены по умолчанию)
  • Firewall / Rules: разрешаем SSH-подключения и пинги из Интернета:
    • Action = Pass, Destination = WANaddr, Port = SSH
    • Action = Pass, Destination = WANaddr, Proto = ICMP
    • Нажимаем APPLY

Завершение настройки Proxmox:

  • Останавливаем pfSense:
qm shutdown 100
  • Редактируем /etc/pve/qemu-server/100.conf: в свойствх nic0 заменяем «vmbr1» на «vmbr0»
  • Делаем резервную копию /etc/network/interfaces
  • Редактируем /etc/network/interfaces:
    • под «iface имя-физического-WAN-интерфейса …» добавляем строку с отступом:
pre-up ip link set $IFACE addr 00:0C:29:11:22:33
  • пояснение: префикс «00:0C:29» мы позаимствовали у VMware, а «11:22:33» рекомендуется заменить на случайные 16-ричные цифры
    • в строке «iface vmbr0 …» заменяем «dhcp» или «static» на «manual»
    • если использовался «static», под vmbr0 удаляем также строки «address», «netmask», «gateway» и «dns-…»
    • под «iface vmbr1 …» добавляем с отступом:
gateway 10.0.0.1
  • Снова делаем резервную копию /etc/network/interfaces и запрещаем его менять с помощью установки атрибута «immutable»:
lsattr    /etc/network/interfaces
chattr +i /etc/network/interfaces
lsattr    /etc/network/interfaces
  • Перезагружаем Proxmox…
  • …запускаем «ping 1.2.3.4» и затаив дыхание ждём несколько минут, пока не пойдут ответы.

В случае успешной перезагрузки:

  • Поскольку теперь вместо Proxmox на IP-адресе 1.2.3.4 нам отвечает pfSense, удаляем запомненный публичный ключ сервера:
ssh-keygen -f ~/.ssh/known_hosts -R "1.2.3.4"
  • Подключаемся к pfSense с пробросом портов:
ssh admin@1.2.3.4 -L 8000:10.0.0.1:80 -L 8006:10.0.0.10:8006 -L 8022:10.0.0.10:22
  • В случае успеха в соседней консоли подключаемся к Proxmox:
  • В Веб-браузере открываем Веб-интерфейс pfSense: http://127.0.0.1:8000
  • …и Веб-интерфейс Proxmox: https://127.0.0.1:8006

Настройка OpenVPN для pfSense:

  • Когда вместо iptables для организации шлюза приходится настраивать pfSense, логично предположить, что для доступа во внутреннюю сеть вместо SSH-туннелей потребуется VPN
  • Настройка VPN производится быстро, но не вполне очевидно, поэтому мы приведём её здесь
  • System / Package Manager: установите пакет openvpn-client-export
  • System / Certificate Manager / CAs: создайте новый Certificate Authority с произвольным названием, например, «CA1»
  • System / Certificate Manager / Certificates => Add:
    • Descriptive name: vpncert1
    • Certificate authority: CA1
    • Common name: pfsense (произвольное)
    • Certificate Type: Server Certificate
  • VPN / OpenVPN / Server => Add:
    • Server mode: Remote access (user auth)
    • Peer CA: CA1
    • Server certificate: vpncert1
    • Tunnel Network: 10.0.2.0/24
    • Local Network: 10.0.0.0/24
  • Firewall / Rules:
    • action=pass, destination=WANaddr, proto=udp, port=1194
    • action=pass, interface=OpenVPN, proto=any
    • APPLY
  • VPN / OpenVPN / Client Export => Authentication Only (No Cert), most clients

Подключение:

  • Файл xx.ovpn загружен на предыдущем шаге из pfSense:
sudo openvpn --config pfSense-UDP4-1194-config.ovpn
  • Перед подключением будут запрошены имя пользователя (admin) и пароль (установленный вами при первом входе в pfSense).
  • После подключения убедитесь, что Веб-интерфейсы pfSense и Proxmox стали доступны как http://10.0.0.1 и https://10.0.0.10:8006

Священный заключительный шаг:

  • Выбираем в Веб-интерфейсе pfSense пункт Diagnostics / Backup & Restore => Download configuration as XML

Источник: https://cdnnow.ru/blog/pve-pfsense/

Was this helpful?

1 / 0