Как спланировать тихий, маломощный VPN-сервер, который работает постоянно
Тихий VPN-бокс оценивают по ваттам в простое, шуму нагрузки и тому, остаётся ли он доступным. Измерьте всю систему в трёх состояниях, прежде чем покупать детали.
Простой — это состояние, в котором домашний VPN-бокс проводит почти всю свою жизнь, поэтому именно его и стоит измерять. Та же машина всё равно должна отвечать на соединение, отдавать файл и завершать резервное копирование, пока туннель поднят, и эти три задачи тянут в разные стороны. Тишина, малое потребление и постоянная доступность — отдельные свойства, и в спецификации не описано ни одно из них. Если пройти проверки ниже по порядку, решение по железу не превратится в переделку через полгода.
Начните с ролей, а не с деталей
Запишите каждую задачу, которую бокс должен выполнять, пока никто не смотрит. Шлюз WireGuard или OpenVPN, файловая служба, цель резервного копирования и задача индексации имеют разные постоянные затраты, и одна машина со всеми четырьмя имеет гораздо более высокий пол, чем машина только с первой. Потребление в простое — это сумма этих полов, а не их среднее. Поэтому два бокса, оба описанные как маломощные, могут различаться в три раза в одной комнате.
Раннее решение о том, живут ли данные на том же хосте, что и туннель, ограничивает всё остальное. Раздельные хосты означают два потребления в простое, но шлюз, который бодрствует, пока хранилище спит; один хост означает одно потребление и один домен отказа. Ни один вариант не ошибочен, но ответ нужно записать до появления списка деталей.
Измерьте весь бокс в трёх состояниях
Настенный ваттметр между розеткой и блоком питания — единственный честный прибор здесь, потому что он учитывает потери на преобразование, раскрутку дисков и каждое забытое USB-устройство. Запишите три числа: простой с поднятым туннелем и без всего остального, тот же бокс при реальной удалённой передаче и бокс во время запланированного резервного копирования.
Программные счётчики помогают объяснить показание ваттметра, но не заменяют его. Интерфейс RAPL сообщает энергию пакета и домена памяти, что исключает потери блока питания и всё подключённое через USB.
read -r a < /sys/class/powercap/intel-rapl:0/energy_uj; sleep 60; read -r b < /sys/class/powercap/intel-rapl:0/energy_uj
awk -v a="$a" -v b="$b" 'BEGIN{printf "package average: %.1f W\n", (b-a)/60/1000000}'
Шум требует такого же подхода. Корпус без вентиляторов убирает один источник и оставляет жёсткий диск, блок питания и гул дросселей, поэтому слушайте во время резервного копирования, а не на экране входа. Температура относится к тому же кругу: читайте датчики под длительной нагрузкой и никогда не отключайте тепловую защиту, чтобы сделать бокс тише.
Переведите ватты в год, который можно сравнить
Постоянное потребление переводится в энергию одним умножением, и однократный расчёт избавляет от неожиданности в годовых затратах. Иллюстративное среднее в 11 Вт за целый год считается так.
awk 'BEGIN{printf "%.1f kWh/year at 11 W\n", 11*24*365/1000}'
Эта цифра — арифметика, а не измерение вашего бокса, и тариф, на который вы её умножаете, сдвигает ответ сильнее, чем пара ватт. Расчёт полезен для сравнения двух проектов: шлюз с простоем 6 Вт против шлюза с 15 Вт — это решение, которому можно назначить цену. Номинальная мощность процессора — не эта цифра, потому что она описывает пакет под нагрузкой, а не систему в покое. Используйте среднее с настенного ваттметра вместе с местным тарифом и помечайте результат как оценку.
Решите, разрешён ли сон
Сон экономит больше всего энергии и ломает больше всего допущений. Спящий хост не может принять входящее соединение, которое его разбудило бы, и клиентский keepalive этого не меняет; только постоянно включённое устройство в той же сети LAN может отправить пакет wake-on-LAN.
Если туннель должен быть доступен в любой час, считайте сон отключённым политикой и запишите это в заметки о сборке. Маскировка целей груба, но она явна и переживает обновления пакетов лучше, чем привычка.
systemctl status sleep.target suspend.target
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
systemd-inhibit --list
Wake-on-LAN заслуживает отдельной строки в этих заметках, потому что он отказывает молча. Функцию нужно включить в прошивке, она работает только на некоторых интерфейсах и требует уже проснувшегося устройства, чтобы отправить пакет. Проверьте её, прежде чем полагаться на неё, а не после поездки.
Докажите это под нагрузкой, которую он действительно увидит
Последняя проверка — та, которую люди пропускают: запустите предполагаемую нагрузку и понаблюдайте за боксом час. Удалённая передача, резервное копирование и перестройка индекса одновременно покажут, выдержат ли охлаждение, канал и хранилище выбранное сочетание ролей.
uptime
sensors | grep -E 'Core|Package|fan'
ss -s
В том же окне следите и за каналом доступа, потому что исходящая полоса обычно ограничивает удалённую пропускную способность намного раньше процессора. Если туннель насыщается на доле того, что процессор мог бы шифровать, более быстрый чип не покупает ровно ничего.