如果在软路由上安装了 Docker 服务,则 Docker 会默认把 iptables 的转发(FORWARD)规则的目标改成 DROP
,这个操作会直接把软路由干废掉(目前并不知道为什么要这样做):
1 2 3 4 |
|
以下是官方文档针对此的描述:
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:
1
$ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT
其实我觉得官方推荐的做法也挺奇葩的,因为 iptables 默认并不能持久化(重启后就没了),所以这样需要次次改的意义是啥?为什么不弄一个配置 docker-daemon.json 里面呢?
最开始的时候我并不知道 Docker 把我的网络干崩了,是我自己诊断了好久才发现 FORWARD
链的 TARGET
被改成了 DROP
。于是我用下面的命令修复了:
1
|
|
不过,我把今天看到的官方的命令改得更简单了,执行一下也没有问题,也许更好(因为 Linux 系统默认 FORWARD 就是 DROP)?
1
|
|
至于 iptables 持久化的问题,再单独解决咯~🙄,可参考评论区的做法。