sysctl не может применять настройки при загрузке

Я следовал учебнику, подобному этому https://www.niftiestsoftware.com/2011/08/28/making-all-network-traffic-for-a-linux-user-use-a-pecific-network- interface /

И начал замечать, что после перезагрузки системные настройки sysctl больше не применялись, в частности эти настройки из /etc/sysctl.d/999-vpn.conf (также пытались поместить их в файл 99-sysctl.conf):

net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.enx002427fe2be7.rp_filter = 2

Это ошибка в моем syslog:

systemd-sysctl[289]: Couldn't write '2' to 'net/ipv4/conf/enx002427fe2be7/rp_filter', ignoring: No such file or directory

enx002427fe2be7 - это имя сетевого интерфейса с моего сетевого адаптера USB, который я использую, и я предполагаю, что причина этого возможно, потому, что он еще не был инициализирован, когда запускается команда sysctl.

Итак, чтобы исправить это, я попробовал сценарий upstart, но даже с exec sleep 60 && sysctl --system это, похоже, не работало.

Ручной запуск sysctl --system исправляет его, но я предпочел бы, чтобы это автоматизировалось.

Что было бы правильным способом исправить это?

Использование Ubuntu 16.04 Версия сервера LTS

3
задан 20 May 2018 в 21:42

3 ответа

Мне приходят несколько соображений:

ubuntu 16.04 использует systemd по умолчанию вместо upstart. Таким образом, вы можете попытаться записать блок systemd вместо скрипта upstart. Если вы используете /etc/network/interfaces для управления своей сетью, вы можете добавить в свой интерфейс следующую строку:
up sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2
и удалить соответствующую строку из ваш файл /etc/sysctl.d/999-vpn.conf. Если вы используете NetworkManager, есть /etc/NetworkManager/dispatcher.d/, где вы можете поместить скрипты после выполнения соединения. Конечно, в вашем скрипте вы должны убедиться, что интерфейс, который воспитывается, на самом деле является вашим USB-адаптером.
if [ "$1" == 'enx002427fe2be7' ] && [ "$2" == 'up' ] ; then
    sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2
fi
В качестве альтернативы вы можете поместить этот скрипт в /etc/network/if-up.d/. Это должно работать как для ifupdown, так и NetworkManager. (Источник: https://askubuntu.com/a/14139/726877). В этом случае вам не нужна строка up в /etc/network/interfaces.
if [ "$IFACE" == 'enx002427fe2be7' ] ; then
    sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2
fi
Это просто разные способы сделать то же самое: добавьте параметр sysctl для сетевого адаптера, когда сетевой адаптер взят и, следовательно, доступен, но не раньше.
3
ответ дан 8 June 2018 в 14:06
  • 1
    Благодаря! очень подробный и информативный ответ, он отлично работал. Я награду щедростью, когда сайт позволит мне – xorinzor 24 May 2018 в 13:25

Мне приходят несколько соображений:

ubuntu 16.04 использует systemd по умолчанию вместо upstart. Таким образом, вы можете попытаться записать блок systemd вместо скрипта upstart. Если вы используете /etc/network/interfaces для управления своей сетью, вы можете добавить в свой интерфейс следующую строку: up sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 и удалить соответствующую строку из ваш файл /etc/sysctl.d/999-vpn.conf. Если вы используете NetworkManager, есть /etc/NetworkManager/dispatcher.d/, где вы можете поместить скрипты после выполнения соединения. Конечно, в вашем скрипте вы должны убедиться, что интерфейс, который воспитывается, на самом деле является вашим USB-адаптером. if [ "$1" == 'enx002427fe2be7' ] && [ "$2" == 'up' ] ; then sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 fi В качестве альтернативы вы можете поместить этот скрипт в /etc/network/if-up.d/. Это должно работать как для ifupdown, так и NetworkManager. (Источник: https://askubuntu.com/a/14139/726877). В этом случае вам не нужна строка up в /etc/network/interfaces. if [ "$IFACE" == 'enx002427fe2be7' ] ; then sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 fi Это просто разные способы сделать то же самое: добавьте параметр sysctl для сетевого адаптера, когда сетевой адаптер взят и, следовательно, доступен, но не раньше.
3
ответ дан 17 July 2018 в 13:51

Мне приходят несколько соображений:

ubuntu 16.04 использует systemd по умолчанию вместо upstart. Таким образом, вы можете попытаться записать блок systemd вместо скрипта upstart. Если вы используете /etc/network/interfaces для управления своей сетью, вы можете добавить в свой интерфейс следующую строку: up sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 и удалить соответствующую строку из ваш файл /etc/sysctl.d/999-vpn.conf. Если вы используете NetworkManager, есть /etc/NetworkManager/dispatcher.d/, где вы можете поместить скрипты после выполнения соединения. Конечно, в вашем скрипте вы должны убедиться, что интерфейс, который воспитывается, на самом деле является вашим USB-адаптером. if [ "$1" == 'enx002427fe2be7' ] && [ "$2" == 'up' ] ; then sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 fi В качестве альтернативы вы можете поместить этот скрипт в /etc/network/if-up.d/. Это должно работать как для ifupdown, так и NetworkManager. (Источник: https://askubuntu.com/a/14139/726877). В этом случае вам не нужна строка up в /etc/network/interfaces. if [ "$IFACE" == 'enx002427fe2be7' ] ; then sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2 fi Это просто разные способы сделать то же самое: добавьте параметр sysctl для сетевого адаптера, когда сетевой адаптер взят и, следовательно, доступен, но не раньше.
3
ответ дан 20 July 2018 в 13:55

Другие вопросы по тегам:

Похожие вопросы: