首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头联网IPv6暴露

码头联网IPv6暴露
EN

Server Fault用户
提问于 2017-10-17 08:26:41
回答 1查看 4.7K关注 0票数 3

我正在运行一个小型arm板,在我们的本地网络中提供一些服务。当我试图理解docker的ipv6支持时,我对我第一次测试的结果感到非常困惑。

我的网络由一个使用dhcpv6的路由控制,每个客户端都有两个有效的全局ipv6地址(也是一个本地ipv4),并且受到路由器防火墙的保护(不允许从互联网向客户端发出请求)。

arm板运行的是ubuntu16.04,有一个有效的ipv6地址,并启用了隐私扩展。

所有码头集装箱都使用默认桥接器网络,不作任何调整。

在码头主机上

代码语言:javascript
复制
netstat -tulpen|grep docker

显示

代码语言:javascript
复制
tcp6       0      0 :::8080                 :::*                    LISTEN      0          22490       1559/docker-proxy

没有一个ipv4服务侦听。

在这个码头容器内,同样的netstat请求给出

代码语言:javascript
复制
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          23955       8/nginx         
tcp6       0      0 :::80                   :::*                    LISTEN      0          23956       8/nginx  

Nginx正在监听ipv6和ipv4 -端口80是公开给端口8080的

代码语言:javascript
复制
docker run (...) -p 8080:80 (...) 

桥梁网络监测

代码语言:javascript
复制
docker network inspect bridge

显示默认的本地桥。

代码语言:javascript
复制
(...)
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
(...)

"b10cf3750252daf0ba11a59cfcd64c72194adcaacd4b9b5df17fae0f53fc4f00": {
                "Name": "ng",
                "EndpointID": "f42de3590072dec2b0d3fae61fc89aeffcb8e6e716b27f5736272fcc8f94f643",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
(...)

现在回答我的问题:

正如我所理解的配置,码头桥ipv6是禁用的,码头容器不只有一个ipv6 - ipv4。Nginx在ipv4和ipv6上都监听--忽略了没有可用ipv6的事实。

为什么主机上的nginx服务只在端口8080上公开,仅通过ipv6列出?

使用另一个网络客户端验证这一点

代码语言:javascript
复制
curl -g -6 http://[DOCKER_HOST_IPV6]:8080
curl http://[DOCKER_HOST_IPV4]:8080

显示ipv6和ipv4都可以使用该服务--为什么netstat不将服务显示为ipv4服务?

如果在网桥网络配置中禁用了ipv6,那么服务是如何到达的?

我在udp 1194上运行了另一个容器openvpn。我将服务器配置为使用udp6,并在容器内使用netstat进行验证。此容器使用-p标志以相同的方式公开,但在主机上根本不可用。如何正确地连接此服务?

EN

回答 1

Server Fault用户

发布于 2018-04-17 11:00:19

这不是侦听ipv6的nginx容器(顺便说一句,您在容器中看到的tcp6套接字绑定在它的fe80::和:1上,并且它无法从容器世界之外到达)。这是管理主机端口的停靠代理进程。当您使用"-p 8080:80“时,停靠代理在主机上绑定一个tcp6套接字::0,侦听端口8080 ( tcp6套接字也接受tcp4 )。

因此,码头上禁用的ipv6支持(默认)意味着您的容器只分配了ipv4,但是停靠代理“将”v6“转换”为v4:

(ipv6世界) ->码头主机ipv6 6:8080 -> 码头代理 -> nginx容器ipv6 4:80

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/878837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档