在路由器中安装dockerd
有一些情况下在路由器中安装 dockerd 启动之后会发现不能正常上网。 一般在 openwrt 中安装 dockerd 不会遇到这样的问题, 大多数类似的事情都发生在手搓的路由器上。
查看系统的 iptables 规则, 发现一些 dockerd 在启动的时候会给 iptables 添加一些规则,是因为这些规则导致上网受影响。
1Chain DOCKER (1 references)
2target prot opt source destination
3
4Chain DOCKER-ISOLATION-STAGE-1 (1 references)
5target prot opt source destination
6DOCKER-ISOLATION-STAGE-2 0 -- 0.0.0.0/0 0.0.0.0/0
7RETURN 0 -- 0.0.0.0/0 0.0.0.0/0
8
9Chain DOCKER-ISOLATION-STAGE-2 (1 references)
10target prot opt source destination
11DROP 0 -- 0.0.0.0/0 0.0.0.0/0
12RETURN 0 -- 0.0.0.0/0 0.0.0.0/0
13
14Chain DOCKER-USER (1 references)
15target prot opt source destination
16RETURN 0 -- 0.0.0.0/0 0.0.0.0/0
解决这个问题也不复杂,需要先屏蔽 dockerd 的规则,再创建需要的规则
屏蔽Dockerd启动时添加 iptables 规则
1// Lion :: ~ » cat /etc/docker/daemon.json
2{
3 "data-root": "/home/zmhu/docker/data/docker",
4 "bip": "192.168.99.1/24",
5 "log-driver": "syslog",
6 "log-opts": {
7 "syslog-address": "udp://192.168.88.1:514"
8 },
9 "iptables": false,
10 "ipv6": true,
11 "fixed-cidr-v6": "fd00:99::/64",
12 "experimental": true,
13 "ip6tables": false,
14 "debug": true
15}
把 iptables
设置为 false
, 如果需要支持 ipv6
同样的 ip6tables
也置为 false
再次启动后 docker 自动创建的 iptables 就不再有了. 下一步就是给 docker 添加路由规则
添加必要的 iptables 规则
1iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ${WAN} -j MASQUERADE
2iptables -A INPUT -i ${DOCKER} -j ACCEPT
3iptables -A OUTPUT -o ${DOCKER} -j ACCEPT
如果要支持 ipv6, 需要再添加几条规则
1ip6tables -A FORWARD -i ${DOCKER} -j ACCEPT
2ip6tables -A FORWARD -o ${DOCKER} -j ACCEPT
3ip6tables -t nat -A POSTROUTING -s fd00:99::1/64 -o ${WAN} -j MASQUERADE
一般不需要添加 ipv6 的规则,安装下载类工具(如 transmission),如果没有公网 ipv4 地址,那么给PT号刷上传就得依靠 ipv6 了。除此之外,我想不到还有啥别的需求。