Docker 会把软路由的 FORWARD 链 DROP 掉

陪她去流浪 桃子 2023年09月12日 阅读次数:931

如果在软路由上安装了 Docker 服务,则 Docker 会默认把 iptables 的转发(FORWARD)规则的目标改成 DROP,这个操作会直接把软路由干废掉(目前并不知道为什么要这样做):

$ iptables -L | grep policy
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy DROP)
Chain OUTPUT (policy ACCEPT)

以下是官方文档针对此的描述:

Docker also sets the policy for the FORWARD chain to DROP. If your Docker host also acts as a router, this will result in that router not forwarding any traffic anymore. If you want your system to continue functioning as a router, you can add explicit ACCEPT rules to the DOCKER-USER chain to allow it:

$ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

其实我觉得官方推荐的做法也挺奇葩的,因为 iptables 默认并不能持久化(重启后就没了),所以这样需要次次改的意义是啥?为什么不弄一个配置 docker-daemon.json 里面呢? 最开始的时候我并不知道 Docker 把我的网络干崩了,是我自己诊断了好久才发现 FORWARD 链的 TARGET 被改成了 DROP。于是我用下面的命令修复了:

$ iptables -P FORWARD ACCEPT

不过,我把今天看到的官方的命令改得更简单了,执行一下也没有问题,也许更好(因为 Linux 系统默认 FORWARD 就是 DROP)?

$ iptables -I DOCKER-USER -j ACCEPT

至于 iptables 持久化的问题,再单独解决咯~🙄,可参考评论区的做法。

参考资料

标签:docker · 软路由 · 防火墙