并开始注意到重新启动后不再应用 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
这是我的系统日志中的错误:
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 服务器版
我想到了几件事:
systemd
默认使用upstart
. 所以你可以尝试编写一个systemd
单元而不是upstart
脚本如果你
/etc/network/interfaces
用来管理你的网络,你可以在你的界面中添加如下一行:/etc/sysctl.d/999-vpn.conf
并从您的文件中删除相应的行。如果您使用
NetworkManager
,则/etc/NetworkManager/dispatcher.d/
可以在建立连接后放置要执行的脚本。当然,在您的脚本中,您应该检查所显示的接口实际上是您的 USB 适配器。或者,您可以将该脚本放入
/etc/network/if-up.d/
. 这应该适用于ifupdown
和NetworkManager
。(来源:https ://askubuntu.com/a/14139/726877 )。在这种情况下,您不需要up
在/etc/network/interfaces
.这些只是做同样事情的不同方法:
sysctl
当网络适配器启动并因此可用但不会很快时添加网络适配器的设置。