Tag: iptables

使用docker容器作为代理

一般来说,我正在尝试使用泊坞窗容器作为同一networking覆盖内的其他docker容器的HTTP代理。 让我们调用这个代理容器网关。 假设网关configuration了所有必需的CA证书,此网关假设将接收到的HTTP请求更改为HTTPS请求,并将其转发给外部世界。 现在让我们来具体说明一下,我使用的是docker swarm和services + replicas,网关在端口80上提供了一些API,而容器使用网关的服务名+端口80来请求这个API(这与代理I需要),例如: HTTP://网关:80 / API /注销 我也想用这个端口代理,这意味着其他容器可以发送HTTP请求到端口80上的某个IP(而不是DNS),这个请求将通过网关,而网关将查看http请求看到这个消息不是“他”,它会执行http S (端口443)请求到实际的外部服务器。 我不能在下面的链接中使用Docker代理的解决scheme: https://docs.docker.com/engine/admin/systemd/#httphttps-proxy 因为这个HTTP代理解决scheme只适用于已经运行的代理,而不是一个dockerized。 (如果我使用它,docker将无法从repo获取图像,因为它将查找不存在的代理,因为docker本身没有启动Gateway容器)。 所以,这使我面对这个问题。 我将如何将内部容器请求转发到网关,而不使用网关服务名称。 我认为iptables是唯一的select,但如何? 我不能使用网关IP,因为网关是3个虚拟机上的副本,并且IP发生了变化,无论如何,任何发送http:// some_external_server_ip:80 / some_api的容器都需要以某种方式通过网关。 TLDR 我可以在iptables中执行一些操作(使用docker链和PREROUTING链),将端口80上的所有数据包(通过覆盖networking中的容器发送)转发到名为Gateway的服务容器中,而忽略目标ip? (只能由端口识别数据包并将其转发给特定的合作者) 希望这是明确的… =)

– 在Google容器引擎中添加cap-add

我遇到了Google Container Engine的问题,我无法添加function来运行我的Docker容器。 我需要能够改变iptables以便我可以通过我的Docker VPN容器转发stream量。 docker容器运行良好,当我能够将–cap-add = NET_ADMIN传递到运行命令,但由于GCE(似乎)只能够运行图像,这似乎不可能。 运行我的docker镜像时,我得到的权限不足,导致部署失败。 反正有这个,所以我可以改变iptables ? 还是GCE没有这个能力? 我已经检查了这个问题 。 哪些引用构build具有权限的映像,但似乎并没有解决。 我的iptables命令供参考: iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -m policy –dir out –pol ipsec -j ACCEPT iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE

我无法启动与iptables错误docker服务

这是我的Linux版本信息CentOS Linux release 7.0.1406 (Core) ,我的iptables版本是v1.4.21 在我使用命令yum install docker ,我试图用命令service docker start来启动docker,但是我无法启动docker。 收到的错误信息是 [root@ssd-master ~]# systemctl status docker.service docker.service – Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled) Active: failed (Result: exit-code) since Fri 2015-01-30 15:20:28 KST; 7s ago Docs: http://docs.docker.com Process: 54831 ExecStart=/usr/bin/docker -d $OPTIONS $DOCKER_STORAGE_OPTIONS (code=exited, status=1/FAILURE) Main PID: 54831 (code=exited, status=1/FAILURE) Jan […]

阻止Docker暴露主机上的端口

例如,如果我使用-p 80启动一个容器,docker将分配一个随机出站端口。 每次Docker分配一个端口,它也添加一个iptable规则来打开这个端口到世界上,是否有可能防止这种行为? 注意:我使用一个nginx负载均衡器来获取内容,我真的不需要让我的应用程序与两个不同的端口关联。

我如何configurationDocker与我的ens34networking接口(而不是eth0)?

有谁知道如何docker决定哪个网卡将与docker0networking工作? 我有一个有两个接口(eth0和ens34)的节点,但是只有通过eth0的请求被转发到容器。 当我的虚拟机configuration好了,并且安装了Docker后,我开始了一个非常愚蠢的testing:我创build了一个centos虚拟机,安装了netcat并提交了镜像。 然后我启动了一个监听端口8080的守护进程容器。我使用了: docker -it -p 8080:8080 –name nc-server nc-server nc -vv -l 8080 所以我尝试连接到从同一networking中的另一个节点(与接口ens34相同的IP地址)监听8080端口的容器。 它不起作用。 而当我从另一台机器向eth0的IP地址发送请求时,我发现容器中有一些反应(通信正常)。 我用下面的方法“输出”输出: docker logs -ft nc-server 我的结论是:eth0(主NIC)和docker0之间有一些神秘的关系,发送到ens34(10. )接口的请求永远不会被转发到veth / docker0接口,只有通过eth0 9. *)。 为什么? 此外,我知道如果我使用–net = host,我可以使所有的工作,但我不想用它…它不觉得正确的,是在Docker中使用HOST模式的标准做法容器? 任何警告呢? – 更新:我设法禁用iptables后使其工作: service iptables stop 但是,我仍然不知道发生了什么事情。 下面的信息应该是相关的,以了解是怎么回事: 使用ifconfig [root@mydockervm2 myuser]# ifconfig | grep -A 1 flags docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet […]

我的主机上的iptables 443redirect如何干扰来自我的Docker容器的出站HTTPS请求?

我最近诊断了一个涉及Docker和iptables的非常复杂的问题。 我有一个Ubuntu主机与以下的iptables设置: $ sudo iptables -L -t nat […] Chain xyz (1 references) target prot opt source destination REDIRECT tcp — anywhere anywhere tcp dpt:https /* xyz */ redir ports 8443 这个规则是为了将所有来自端口443的入站stream量redirect到8443,这意味着将stream量redirect到一个基于Java的应用程序,这个应用程序与我的Docker容器无关,但是运行在同一台机器上,签署SSL证书。 当我使用Docker的默认networking设置在同一台计算机上运行Docker容器时,Docker(或OS)似乎将出站连接redirect到Ubuntu主机上的端口8443,并且在容器中发出wget HTTPS请求,因此,对本地的基于Java的应用程序来说,接受连接(大部分时间)并返回无效的(自签名)证书详细信息。 结果,容器内的应用程序最终与主机上的本地Java应用程序通话,而不是互联网上的真实服务器,他们应该与之通话。 我还证实,直接从Ubuntu主机发出的任何wget HTTPS请求都会触发Internet上的目标服务器。 只有在同一主机上运行的Docker容器启动的请求才会出现问题。 谁能解释为什么会发生这种情况

阻止对泊坞窗容器的外部访问

我想阻止从外面直接进入docker集装箱。 我使用haproxy,只想访问端口80,443。 我向iptables添加了以下规则。 但我仍然可以通过不同的端口访问docker容器。 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT -A INPUT -p tcp -m state –state […]

泊坞窗不能指定容器连接

docker configure: root@ubuntu> ps -ef | grep docker root xxxxx /usr/bin/dockerd -H fd:// -b=br0 –icc=false –iptables=true root@ubuntu> ps -ef | grep docker root xxxxx /usr/bin/dockerd -H fd:// -b=br0 –icc=false –iptables=true 启动'web'容器: docker run -d –name web -p 8080:80 php-fpm:5.4 开始“testing”容器: docker run -dit –name test –link web:web blackhole/ubuntu:0.1 bash iptablesfilter: root@ubuntu> sudo iptables -L -n […]

访问运行在Vagrant的Docker容器中的PostgreSQL

我有一个Vagrant框,其中有一个运行PostgreSQL的Docker容器。 这个容器是在这里find的官方的 我希望能够使用psql从主机(即Vagrant外部)连接到Postgres,但无法使其正常工作。 (获取“无法连接” – 错误)。 我在Vagrantfile中添加了一个端口: config.vm.network "forwarded_port", guest: 5432, host: 5432 但是我猜这是不够的,因为Docker容器有自己的IP(172.17.0.2)? 我的想法是,我会把一个iptable的规则,把所有的请求转发到端口5432上的stream浪者箱到目的地172.17.0.2:5432这样的盒子: iptables -t nat -A PREROUTING -p tcp –dport 5432 -j DNAT –to-destination 172.17.0.2:5432 iptables -t nat -A POSTROUTING -j MASQUERADE 但是我仍然无法工作。 感谢任何帮助!

我可以通过“iptables”获取真实的用户IP:false是否启用?

我用户"iptables": false泊坞合守护进程configuration中的"iptables": false选项: /etc/docker/daemon.json: { "iptables": false } 我用选项运行服务–publish mode=host , –mode=global –publish mode=host –mode=global类似于这种方法 。 但是,当我在我的应用程序中获得X-Real-IP头时,它的值是172.18.0.1但不是真正的用户IP。 当我启动没有"iptables": false Docker守护进程时"iptables": false /etc/docker/daemon.json "iptables": false都工作正常,我得到真正的用户IP。 但是我需要设置"iptables": false以保留Docker对iptables的更改。 是否有可能获得真正的用户IP与"iptables": false在Docker守护进程configuration"iptables": false ?