我正在运行 docker 和 Zerotier,为了让 Zerotier 正常工作,我需要向 iptables 添加规则。然而,每次重新启动后,这条规则都会被 docker 删除。
所以我想使用 iptables-persistent 来存储规则。但重启后规则仍然消失。 我用的是
sudo iptables -I DOCKER-USER -p all -i br0 -j ACCEPT
sudo iptables-save
知道我错过了什么吗?
当 Docker 启动时,它会创建自己的
iptables
规则。它为 DOCKER-USER
创建 FORWARD
链。建议将您的规则放在那里。问题是每当您重新启动系统时规则就会消失。 Docker 文档没有给出特定的解决方案。我的解决方案是:
1 - 创建带有规则的脚本
/root/bin/docker-iptables.sh
#!/bin/bash
while ! iptables -n --list DOCKER-USER >/dev/null 2>&1
do
sleep 1;
done
iptables -I DOCKER-USER -d 192.168.1.0/24 -j DROP
iptables -I DOCKER-USER -d 192.168.1.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
2 - 添加脚本以在启动时启动 我选择了
crontab
crontab -l
# m h dom mon dow command
@reboot /root/bin/docker-iptables.sh &
您也可以尝试这个解决方案。
https://github.com/boTux-fr/systemd-service-iptables/tree/master
iptables-save
将规则输出到标准输出。您需要将输出写入系统从中加载它们的文件,通常是/etc/iptables/rules.v4
。
如果你是 root,这会起作用:
iptables-save > /etc/iptables/rules.v4
sudo
当然不能很好地处理重定向,但至少一些 iptables-save
实现(Ubuntu 20.04)有一个 -f
/--file
选项,可以写入 sudo
下的指定文件:
sudo iptables-save -f /etc/iptables/rules.v4