Вопрос или проблема
У меня есть небольшой домашний сервер, на котором я хочу разместить несколько служб podman и caddy в качестве обратного прокси. С помощью
sysctl net.ipv4.ip_unprivileged_port_start=443
caddy может запускаться и привязываться к порту. Моя проблема в том, что этот параметр не сохраняется при перезапусках сервера. Я даже попытался добавить его в /etc/sysctl.conf
и попробовать опцию -w
, но оба варианта не сработали. Когда я перезапускаю сервер, он снова устанавливается на 1024, и мой сервер caddy не может запуститься.
Как сохранить эту конфигурацию при перезапусках на сервере Ubuntu 24.10?
Ответ или решение
Чтобы решить вопрос с настройкой незапривилегированных портов, которая не сохраняется после перезагрузки сервера, необходимо глубоко разобраться в механизме работы системы и доступных инструментах настройки. Ваша проблема связана с тем, что параметр net.ipv4.ip_unprivileged_port_start=443
, задаваемый с помощью команды sysctl
, не сохраняется после перезагрузки. Рассмотрим, как можно обеспечить его сохранение на сервере Ubuntu 24.10.
Теория:
На большинстве Unix-подобных систем, включая Ubuntu, порты с 0 до 1023 считаются привилегированными и для их использования требуются особые привилегии. Параметр net.ipv4.ip_unprivileged_port_start
отвечает за настройку порога, выше которого порты считаются непривилегированными. В вашем случае, вы хотите, чтобы порт 443, обычно используемый для HTTPS, был непривилегированным, что позволяет приложениям без специальных привилегий использовать его напрямую.
Пример:
Вы использовали команду sysctl
для установки этого параметра. Однако, изменения, сделанные с помощью sysctl
напрямую, по умолчанию не сохраняются после перезагрузки системы. Внесение изменений в файл /etc/sysctl.conf
, обычно используется для постоянного сохранения параметров, но иногда изменения могут не работать, если системный процесс не обновляет их как следует.
Применение:
-
Редактирование /etc/sysctl.conf:
Убедитесь, что вы добавили строкуnet.ipv4.ip_unprivileged_port_start=443
в конец файла
/etc/sysctl.conf
. Затем, чтобы сразу применить изменения, выполнитеsudo sysctl -p
. -
Проверка на вмешательство других инструментов:
Иногда вмешательство других скриптов или приложений может приводить к перезаписи sysctl-параметров. Проверьте, не конфигурируются ли параметры сетевых портов в других файлах, например в/etc/sysctl.d/
,/lib/sysctl.d/
, и других. -
Использование Unit-файлов systemd:
Сервис caddy может быть настроен так, чтобы изменять настройки sysctl при его запуске. Для этого отредактируйте соответствующий Unit-файл или создайте соответствующий файл drop-in для systemd.Создайте папку для настройки:
sudo mkdir -p /etc/systemd/system/caddy.service.d
И файл с конфигурацией:
sudo nano /etc/systemd/system/caddy.service.d/override.conf
Добавьте следующее:
[Service] ExecStartPre=/sbin/sysctl -w net.ipv4.ip_unprivileged_port_start=443
Перезапустите demon systemd и затем Caddy:
sudo systemctl daemon-reload sudo systemctl restart caddy
-
Скрипт init.d или systemd Service Timer:
В качестве альтернативы, можно создать скрипт, который автоматически изменяет данный параметр в момент загрузки системы. Скрипт может быть помещен в/etc/rc.local
(если этот файл управляет startup-скриптами) или быть частью кастомного systemd-временного задания (Timer). -
Проверка запуска Caddy:
Убедитесь, что Caddy запускается с нужными правами и привилегиями для использования порта 443. Возможно, потребуется запускать его от специального пользователя или группы с правами на использование привилегированных портов.
Эти шаги должны обеспечить надлежащее сохранение и применение вашей настройки net.ipv4.ip_unprivileged_port_start=443
при рестарте системы. Использование systemd и настройка конфигурационных файлов позволит автоматизировать этот процесс и избежать проблем в будущем.