gpt4 book ai didi

使用 iptables=false 的 docker 互联网连接

转载 作者:行者123 更新时间:2023-12-04 20:33:21 30 4
gpt4 key购买 nike

我放弃。我在用 UFW 加固的 ubuntu 16.04 下使用 Docker 1.12.0。

该机器有 2 个接口(interface) - 一个公共(public) (eth0) 和一个专用网络 (eth1)

Server Version: 1.12.3
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 15
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: null bridge host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor seccomp
Kernel Version: 4.4.0-47-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 488.5 MiB
Name: image-base
ID: 2473:FGJQ:MEEC:CEWY:BSLR:SYB5:EXMO:WJBE:7MMM:DIZH:NJQF:L5NA
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
127.0.0.0/8

就像我对以前的版本所做的那样,我将“iptables”配置为 false,因此 docker 不会更改我的防火墙。

但在最新版本的 docker (11+) 中,此命令有副作用 - 重启后 - docker 容器停止访问网络(ping www.google.com)。

我一次又一次地确认。
如何重现:
- 停止 docker 守护进程
sudo systemctl stop docker

我通过添加文件/etc/docker/daemon.json 来配置 iptables=false:
{
"iptables" : false
}

(这是那里唯一的配置)

启动守护进程:
sudo systemctl start docker

docker run --rm python ping www.google.com

即使它对你有用——如果你重新启动系统——它也会停止工作……你有什么解决办法吗?

我检查了我的 iptables 规则,重新启动系统后我错过了这些规则:
:PREROUTING ACCEPT [8:496]      
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-a0b355ce53ac -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-a0b355ce53ac -j RETURN
# same
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
# same
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-a0b355ce53ac -j DOCKER
-A FORWARD -o br-a0b355ce53ac -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-a0b355ce53ac ! -o br-a0b355ce53ac -j ACCEPT
-A FORWARD -i br-a0b355ce53ac -o br-a0b355ce53ac -j ACCEPT
# same
-A DOCKER-ISOLATION -i br-a0b355ce53ac -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-a0b355ce53ac -j DROP
-A DOCKER-ISOLATION -j RETURN

谢谢!

最佳答案

docker 网络模型使用 iptables 为您的容器设置 Internet 连接。如果您明确不希望使用桥接或覆盖网络驱动程序的容器有任何网络连接,我只会设置 iptables=false。

当您使用 iptables=true 启动守护程序时,它将在您的防火墙中设置所需的规则。当 docker 关闭时,我不相信它会破坏这些规则,所以它们会继续存在。这就是为什么您在使用 iptables=false 启动 docker back up 后获得互联网连接的原因。如果您想在重启后的下一次 docker 启动时保留这些规则,最好的方法是保持 iptables=true。

关于使用 iptables=false 的 docker 互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792765/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com