Зачем?

В наших текущих реалиях требования к роутеру могут быть очень высокими, недостаточно просто "выпускать устройства в интернет". Я хотел выделить сервера в отдельную подсеть, поднять VPN для доступа к устройствам за пределами дома, срезать рекламу на обделенных адблоком устройствах, а дальше хотелки только росли.

Примерно оценив количество хотелок, прикинув количество ресурсов с учетом запаса на будущее и моей недальновидности, а также увидев цены на MikroTik hAP ax³, я подумал: "а почему бы не взять пассивный мини-пк за ту же сумму и получить в разы более мощное железо?", а следующая мысль была "а чего это железо такое мощное будет пустовать? Пусть еще виртуальную мелочевку на себе тащит, ресурсов хватит".

С этими мыслями я на просторах одного из маркетплейсов приобрел себе мини-ПК Firebat R1. Под мои цели он подходил как нельзя лучше: пассивное охлаждение, 4 порта на 2.5 гигабита, Intel N100, 16 гигов ОЗУ и 512 гигов накопитель. Ну не красота ли?

Вот над этим зверьком мы будем проводить наши эксперименты
Вот над этим зверьком мы будем проводить наши эксперименты

Подготовка систем

Первым делом ставим на наш мини-ПК Proxmox. Установка ничем не примечательна, поэтому детально описывать не вижу смысла. После установки приведем сеть в состояние будущей конфигурации:

Начальный вид сети после установки. Кстати, интерфейсы идут в том же порядке, что и порты на самом ПК
Начальный вид сети после установки. Кстати, интерфейсы идут в том же порядке, что и порты на самом ПК

Поскольку я хочу сервера отправить в отдельную подсеть, то под это дело надо подготовиться. Удаляем дефолтный мост и создаем три новых, я их обзову WAN, SRV и LAN соответственно, а на мост SRV я сразу же и перевешу сам Proxmox

Покажу на примере одного моста, остальные аналогично. У моста SRV прописываем статический адрес
Покажу на примере одного моста, остальные аналогично. У моста SRV прописываем статический адрес

Получится примерно так:

У моста LAN прописаны все остальные интерфейсы для простоты
У моста LAN прописаны все остальные интерфейсы для простоты

Не забываем в hosts указать новый адрес, чтобы не ловить грабли как я:

Внимание: на данном этапе мы потеряем связь с гипервизором, так что соединяем интерфейс SRV с ПК, на ПК настраиваем статику и заходим по новому адресу

Далее создаем виртуальную машину. Я выделил под нее 2 ядра и 4 гига, диск 32 гига. Вы можете поиграться с параметрами. Сетевые карты пока не добавляем, это мы сделаем чуть позже. Получилось примерно так:

Большинство настроек я не менял
Большинство настроек я не менял

Теперь идем в созданную ВМку, в раздел Hardware, нажимаем Add → Network Device и добавляем созданные до этого мосты. Учтите, что внутри системы они потом будут нумероваться в порядке добавления. Не забываем снять галочку Firewall, зачем файрволлу файрволл?

Остальные ровно так же добавляются
Остальные ровно так же добавляются
Итоговый результат
Итоговый результат

После этого запускаем ВМ и проходимся по мастеру настроек:

Я перешел в ручной режим, поскольку мы знаем, какое устройство для чего нужно. Отвечаем на вопросы мастера и вписываем интерфейсы
Я перешел в ручной режим, поскольку мы знаем, какое устройство для чего нужно. Отвечаем на вопросы мастера и вписываем интерфейсы
Проверяем и соглашаемся
Проверяем и соглашаемся

После этого OPNsense предложит нам залогиниться. Логин installer, пароль opnsense и попадаем в установщик:

Тоже довольно штатная процедура. Проходим все этапы, со всем соглашаемся

Если выбрали ZFS, что установщик предлагает по умолчанию, то надо будет выбрать тип устройства. Здесь выбираем страйп, потому что не вижу смысла для образа диска делать резервирование
Если выбрали ZFS, что установщик предлагает по умолчанию, то надо будет выбрать тип устройства. Здесь выбираем страйп, потому что не вижу смысла для образа диска делать резервирование

После перезагрузки нас встретит уже установленная система. Можем на ПК выставлять автополучение адреса и переключать кабель в LAN интерфейс

Настройка OPNsense

Если все сделано правильно, мы должны от системы получить адрес по DHCP:

После этого заходим на адрес шлюза, логинимся с учеткой root/opnsense и проходим в мастер настройки. Он выглядит как мастер типичного роутера, сильно останавливаться на нем не буду

Тут есть поддержка PPPoE из коробки, это меня очень радует
Тут есть поддержка PPPoE из коробки, это меня очень радует

У нас теперь есть выход в интернет, и в целом роутер готов роутить. Но нам же нужна еще одна подсеть, давайте ее настроим

Дополнительная подсеть для серверов

На самом деле процедура несложная, но надо проявить немного внимания. Итак, мы во время установки привязали наш мост с одним интерфейсом и ждущим нас проксмоксом к интерфейсу OPT1. Идем в Interfaces и находим его, сразу переименовываем и настраиваем IP адресацию:

Description это название интерфейса. В IPv4 Configuration Type выбираем статику
Description это название интерфейса. В IPv4 Configuration Type выбираем статику
Внизу появится раздел настройки адресов. Вписываем адрес нашего будущего шлюза и выбираем правильную маску. Я не заметил выбор маски и долго ломал голову, почему ничего не работает
Внизу появится раздел настройки адресов. Вписываем адрес нашего будущего шлюза и выбираем правильную маску. Я не заметил выбор маски и долго ломал голову, почему ничего не работает

После этого идем в Services → Dnsmasq, на вкладке General добавляем наш интерфейс, потом идем на вкладку DHCP Ranges и создаем новый диапазон:

Тут можно срисовать с диапазона LAN, мы просто выбираем интерфейс и указываем границы, даже маска необязательна
Тут можно срисовать с диапазона LAN, мы просто выбираем интерфейс и указываем границы, даже маска необязательна

Ну и давайте заодно нарисуем правила файрволла. Идем в Firewall → Rules → [LAN] и копируем первое правило. Не забываем изменить интерфейс и источник

На данном этапе у нас есть адреса и даже выход в интернет. Осталось только разрешить клиентам из двух подсетей слушать друг друга. Идем в правила для интерфейса SRV и создаем новое правило. В нем проверям интерфейс и выставляем исходник и назначение

Правило для SRV сети
Правило для SRV сети

Обратите внимание! Source — откуда идет запрос, Destination — куда он идет. Мы разрешаем маршрут из LAN в SRV

Для интерфейса LAN правило будет наоборот, и составляем его из раздела правил для интерфейса LAN

Правило для LAN сети
Правило для LAN сети

После этого проверяем работу правил: мы должны находясь в LAN сети попасть на веб-интерфейс нашего Proxmox

Заключение

Вот таким образом мы получили идеальный, не побоюсь данного титула, сервер домашней сети. Такой же бесшумный и экономный, как и обычный роутер, но который будет в режиме 24/7 обслуживать другие сервисы, которым важна непрерывность. Умный дом, обратный прокси, что душа пожелает. А по поводу гибкости OPNsense не стоит и упоминать, система в сообществе хорошо изучена, достаточно статей по настройке различных сервисов, что я в итоге и буду пробовать

В качестве интересного наблюдения

В качестве теста поднял ВМ с федорой и замерил оттуда скорость. Несмотря на солидно выданные ресурсы, Интернетометр меня разочаровал:

Для сравнения тест с самого мощного доступного мне устройства:

Результаты лучше, хотя на полную скорость тарифа в гигабит я выйти не смог. Неужели роутер не тянет? Да нет, процессор не загружен. Уже не хватает производительности самих клиентов. Как же так получается, что натить нужно в разы меньше ресурсов, чем измерить скорость? И да, если просто скачивать большие файлы, то проблем со скоростью нет