hetzner 私有网络,1 个 docker 主机,1 个 pfsense,我不断从容器中收到“未捕获 TCP 上一个段”

hetzner 私有网络,1 个 docker 主机,1 个 pfsense,我不断从容器中收到“未捕获 TCP 上一个段”

这是网络设计 https://imagebin.ca/v/5NNDpuDwq9PT

它托管在 hetzner 上,1 个带有面向公众的接口的防火墙,pfsense。1 个带有两个接口的 docker 主机,一个连接到私有网络,一个面向互联网,面向公众的接口处于 DOWN 状态并且需要保持这种状态。docker 主机是 ubuntu 20.04,但 18.04 也出现了同样的行为。

docker 主机通过 pfSense 正确访问互联网,容器在桥接网络中则无法访问。它们确实可以访问互联网并可以发出 DNS 请求和 ping,但只要我发出稍大一点的 http/s 请求,数据包就会被丢弃并且无法通过。

这是“curl”上的数据包捕获https://www.google.com

https://imagebin.ca/v/5NPvwMusFW5i

左侧是 pfSense 盒与 docker 主机之间的 pfSense 盒上的数据包捕获,右侧是主机与容器之间的主机上的数据包捕获

如果我以主机模式而不是桥接模式设置 docker 网络,那么一切都可以正常工作。

就好像大于 1288 的数据包无法从主机传输到容器,这看起来很奇怪。这种行为可能是什么原因造成的?它只发生在桥接网络中,而不会发生在主机网络中。非常奇怪的是,如果我在主机上启动面向公众的接口并让它在不通过私有网络/pfSense 盒的情况下上网,桥接网络就可以工作。

私有网络接口和面向公众的接口有不同的驱动程序,一个是eth,另一个是ens。

有任何想法吗?

docker network inspect(在桥接网络上)

[
    {
        "Name": "customername",
        "Id": "fb5efb66279ac3d33e7b671f542a017d7bb13bf935444df43b0a7d95da60dc75",
        "Created": "2020-05-22T15:19:23.03700718+02:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.1.0/24",
                    "Gateway": "192.168.1.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "a09dfb38562b518d9c4dbf44f6f5ea6ac43904c17b6714e5aa13fe35cc7d5f5a": {
                "Name": "romantic_dijkstra",
                "EndpointID": "516ddfd29d82b161e197109d83ee0ccdfb52257dc2874ef11aa1f1ae15adbcd3",
                "MacAddress": "02:42:c0:a8:01:02",
                "IPv4Address": "192.168.1.2/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "false",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "10.0.10.3",
            "com.docker.network.bridge.name": "customername-br",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

答案1

您的问题有点晚了,但我目前也面临类似的问题。我发现 Hetzner 的私有接口的 mtu 为 1450,而公共接口的 mtu 为 1500。这是 docker 的一个严重问题,因为它的默认 mtu 是 1500。

有一个部分解决方案,但不适用于我正在使用的 docker-compose https://rahulait.wordpress.com/2016/02/28/modifying-default-mtu-for-docker-containers/

相关内容