Вопрос или проблема
В настоящее время я настраиваю новую машину Debian 11 Bullseye, чтобы она работала как шлюз Wireguard.
Все как обычно и просто.
К сожалению, у меня возникла серьезная проблема с переадресацией пакетов IPV4.
Общеизвестно, что я должен раскомментировать #net.ipv4.ip_forward
в файле /etc/sysctl.conf
, чтобы включить переадресацию пакетов.
К сожалению, даже когда он раскомментирован, настройка не применяется автоматически после перезагрузки.
Мне приходится вручную обрабатывать файл sysctl с помощью “sysctl -p” каждый раз после перезагрузки.
В чем здесь проблема? Также нет другого sysctl.conf в sysctl.conf.d, который мог бы переопределить эту настройку.
Я также попробовал на свежей системе Debian 11, с той же проблемой.
root@wireguard:~# /sbin/sysctl --system
* Применение /etc/sysctl.d/1-sysctl.conf ...
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
* Применение /usr/lib/sysctl.d/50-pid-max.conf ...
kernel.pid_max = 4194304
* Применение /usr/lib/sysctl.d/protect-links.conf ...
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
* Применение /etc/sysctl.conf ...
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
После перезагрузки:
root@wireguard:~# cat /proc/sys/net/ipv4/ip_forward
0
root@wireguard:~# cat /proc/sys/net/ipv6/conf/all/forwarding
1
Надеюсь, кто-то сможет мне помочь, похоже, что это применяется только частично, не знаю, связано ли это с настройкой IPv6. Все, кроме sysctl.conf и установки Wireguard, установлено по умолчанию.
Создайте /etc/sysctl.d/99-ipv.conf
с следующими строками:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Затем выполните:
sudo systemctl restart procps
sudo sysctl -p
С 2006 года ошибка вызывает игнорирование настроек sysctl во время загрузки, так как они применяются до загрузки сетевых модулей и монтирования файловых систем. В результате многие записи /proc/sys недоступны в это время.
Обходной путь
Запуск /usr/sbin/sysctl –system перезагружает все параметры ядра, определенные в /etc/sysctl.conf и любых файлах в /etc/sysctl.d/, применяя их к системе.
Постоянный обходной путь
Хотя постоянного исправления нет, вы можете обеспечить применение настроек с помощью sudo crontab -e:
@reboot sleep 5 && /usr/sbin/sysctl –system
Источник: https://bugs.launchpad.net/ubuntu/+source/procps/+bug/50093
Мысли
Не могу поверить, что эта 15-летняя ошибка все еще существует в 2025 году
.
Ответ или решение
Ваша ситуация связана с известной проблемой, которая наблюдается при настройке системных параметров через файл /etc/sysctl.conf
в системах на основе Debian, таких как ваша Debian 11 Bullseye. Давайте попробуем разобраться в этой проблеме более детально и предоставим решения.
Теория
Параметр net.ipv4.ip_forward
отвечает за возможность пересылки пакетов через интерфейсы IPv4. Этот параметр необходимо включать для настройки систем, работающих как маршрутизаторы или шлюзы, таких как узлы с WireGuard.
Обычно изменение системных параметров в Linux осуществляется с помощью системы sysctl
. Файлы конфигурации, такие как /etc/sysctl.conf
и файлы в каталоге /etc/sysctl.d/
, содержат параметры, которые должны быть применены при загрузке системы. Однако существует известная проблема, отмеченная еще в 2006 году, когда эти параметры не применяются корректно из-за того, что они обрабатываются до загрузки сетевых модулей и монтирования файловых систем. Это приводит к тому, что некоторые из записей в /proc/sys
могут быть недоступными на момент их установки.
Пример
В вашей конкретной ситуации вы отметили, что параметр net.ipv4.ip_forward
, установленный вручную с помощью sysctl -p
, работает только до перезагрузки системы. После перезагрузки он снова сбивается на 0, хотя в sysctl.conf
он отмечен как включенный.
Применение
Для решения данной проблемы предлагаем несколько шагов, которые помогут сделать настройку постоянной:
-
Создание файла конфигурации в
/etc/sysctl.d/
:- Создайте файл
/etc/sysctl.d/99-ipv.conf
:net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1
- Это должно помочь гарантировать, что параметр будет прочитан и применен при загрузке.
- Создайте файл
-
Перезапуск службы
procps
:- Выполните команды:
sudo systemctl restart procps sudo sysctl -p
- Первая команда перезапускает службу, которая отвечает за применение системных параметров. Вторая команда применяет изменения без перезагрузки системы.
- Выполните команды:
-
Использование
crontab
для автоматизации:- Как временное решение, можно добавить в
crontab
команду, которая будет автоматически перезапускать применениеsysctl
после каждого перезагрузки. Для этого выполните:sudo crontab -e
- Добавьте следующую строку:
@reboot sleep 5 && /usr/sbin/sysctl --system
- Это позволит системе немного подождать перед применением настроек, чтобы все модули успели загрузиться.
- Как временное решение, можно добавить в
Эти шаги помогут обойти текущее ограничение и обеспечить столкновение с этой ошибкой.
Заключение
Проблема, с которой вы столкнулись в Debian 11, известна уже более десяти лет и пока что не имеет официального исправления. Методы, которые мы рассмотрели, эффективно решают проблему и позволяют достичь необходимой конфигурации без значительного вмешательства в систему. Однако важно следить за обновлениями от разработчиков Debian на предмет возможного официального решения этой проблемы в будущих выпусках.
Мы надеемся, что данная информация поможет вам решить проблему с персистентностью настройки net.ipv4.ip_forward
и успешно настроить ваш WireGuard шлюз.