![netfilter-persistent 似乎没问题,但重启后不会加载规则](https://linux22.com/image/1185919/netfilter-persistent%20%E4%BC%BC%E4%B9%8E%E6%B2%A1%E9%97%AE%E9%A2%98%EF%BC%8C%E4%BD%86%E9%87%8D%E5%90%AF%E5%90%8E%E4%B8%8D%E4%BC%9A%E5%8A%A0%E8%BD%BD%E8%A7%84%E5%88%99.png)
其他人也有类似的问题,但我尝试了他们所有的方法,但在启动时缺少 iptable 条目,到目前为止都没有成功:|(这似乎不是加载过程中 iptable 文件中的拼写错误)
我在 iptables 中添加了一条简单规则
sudo iptables -I INPUT -p tcp -m tcp --dport 8140 -j ACCEPT
并执行
sudo service netfilter-persistent save
我已经检查过 8140 规则是否在 iptables 规则中
sudo cat /etc/iptables/rules.v4
但重新启动后并
sudo iptables -L INPUT -v -n
没有显示我的 8140 输入条目。
systemctl status netfilter-persistent
说一切都好
samuel@samuel-VirtualBox:~$ systemctl status netfilter-persistent
* netfilter-persistent.service - netfilter persistent configuration
Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/netfilter-persistent.service.d
`-iptables.conf
Active: active (exited) since Sun 2022-02-20 11:21:47 CET; 10min ago
Docs: man:netfilter-persistent(8)
Process: 642 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
Main PID: 642 (code=exited, status=0/SUCCESS)
Feb 20 11:21:47 samuel-VirtualBox systemd[1]: Starting netfilter persistent configuration...
Feb 20 11:21:47 samuel-VirtualBox netfilter-persistent[649]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Feb 20 11:21:47 samuel-VirtualBox netfilter-persistent[649]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Feb 20 11:21:47 samuel-VirtualBox systemd[1]: Finished netfilter persistent configuration.
因此服务已启用,当我手动运行时,sudo service netfilter-persistent reload
它似乎正确加载规则,因为随后显示了 8140 INPUT 链。
欢迎提供任何关于该做什么的提示:)
答案1
我遇到了类似的问题netfilter-persistent
。
描述
netfilter-persistent
通常会在启动时启动,我在系统日志中确认了这一点
$ cat /var/log/syslog | grep netfilter | tail
Apr 6 11:40:54 raspberrypi systemd[1]: Starting netfilter persistent configuration...
Apr 6 11:40:54 raspberrypi netfilter-persistent[381]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Apr 6 11:40:55 raspberrypi netfilter-persistent[381]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Apr 6 11:40:55 raspberrypi netfilter-persistent[381]: Warning: skipping IPv6 (no rules to load)
Apr 6 11:40:55 raspberrypi systemd[1]: Started netfilter persistent configuration.
但运行iptables -L
没有产生任何规则/etc/iptables/rules.v4
。手动运行iptables-restore < /etc/iptables/rules.v4
或重新启动服务,就像您所做的那样。
解决方法
我的解决方法是延迟启动服务network.target
。我打开了 systemd 单元文件/lib/systemd/system/netfilter-persistent.service
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no
Wants=network-pre.target systemd-modules-load.service local-fs.target
Before=network-pre.target shutdown.target
After=systemd-modules-load.service local-fs.target network.target
Conflicts=shutdown.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop
[Install]
WantedBy=multi-user.target
并添加network.target
到After=
行中。现在netfilter-persistent
在启动过程中稍后运行,并且所有规则都已存在,无需我手动重新运行它。
编辑:发现问题
因此,在发布此内容后,我做了进一步的挖掘,发现有一个我创建但忘记了的 init 脚本。该脚本是从不同的位置/etc/network/if-up.d
运行的- 这解释了为什么移动后解决了这个问题。我建议您搜索 init 脚本并查找任何与 iptables 相关的内容。iptables-restore
/etc/iptables/rules.v4
netfilter-persistent
network.target