sysctl이 부팅시 설정을 적용 할 수 없습니다

3과 유사한 튜토리얼을 따랐습니다

재부팅 후 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을 수동으로 실행하면 문제가 해결되지만 자동으로 처리하고 싶습니다.

이 문제를 해결하는 올바른 방법은 무엇입니까?

우분투 16.04 LTS 서버 에디션 사용하기


A few things come to my mind:

  1. ubuntu 16.04 uses systemd by default instead of upstart. So you could try to write a systemd unit instead of an upstart script
  2. If you use /etc/network/interfaces to manage your network, you could add a line like the following to your interface:

    up sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2

    and remove the corresponding line from your /etc/sysctl.d/999-vpn.conf file.

    If you use NetworkManager there is /etc/NetworkManager/dispatcher.d/ where you can put scripts to execute after a connection is made. Of course in your script you should check that the interface that is brought up is actually your USB adapter.

    if [ "$1" == 'enx002427fe2be7' ] && [ "$2" == 'up' ] ; then
        sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2

    Alternatively you could put that script in /etc/network/if-up.d/. This should work for both, ifupdown and NetworkManager. (Source: In that case you don't need the up line in /etc/network/interfaces.

    if [ "$IFACE" == 'enx002427fe2be7' ] ; then
        sysctl net.ipv4.conf.enx002427fe2be7.rp_filter=2

    These are just different ways to do the same thing: add the sysctl setting for the network adapter when the network adapter is brought up and therefore available but no sooner.