局域网AIO中在docker-compose指定容器联网方式,竟然会导致安卓无法使用旁路网关,但是其他设备正常?

关于AIO(ALL IN BOOM)中旁路网关拒绝安卓访问,但苹果/pc设备正常的问题

〇、这个问题原理没搞明白

最终只是使用docker network rm NETWORK-ID把一个网络删除了.

然后安卓访问就正常了!

一、网络拓扑图

网络拓扑

二、前情提要

在内网中使用Cloudflare Zero-Trust的Tunnel进行内网穿透,访问alist等其他通过pve中docker起来的服务.

因为Cloudflare在中国大陆没有节点的原因,感觉Tunnel把内网资源传出去的过程会很慢,

加上我在内网搞了个openwrt+openclash的旁路网关.

所以我打算指定Cloudflare这个容器的网关和dns为192.168.50.2,

使用旁路网关中的openclash加速资源传输过程.

三、爆炸过程

3.1 docker-compose配置

version: '3'
services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    command: tunnel --no-autoupdate run --token xxxxxx
    networks:
      openwrt:
        ipv4_address: 192.168.50.210
    dns:
      - 192.168.50.2
      - 223.5.5.5
    restart: always
networks:
  openwrt:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.50.0/24
          gateway: 192.168.50.2

3.2 启动命令

docker-compose up -d

3.3 启动后的表现

  1. 内网的所有指定网关/DNS为192.168.50.2的设备无法使用openwrt的DNS服务

  2. 过一会使用docker ps -a

    • 发现cloudflared这个容器已经Exit(1)
  3. pc/苹果设备已经可以正常使用openwrt的DNS服务了

    • 指定网关/DNS为192.168.50.2的设备,访问https://www.google.com是正常的
  4. 此时安卓设备访问不了openwrt的ip地址: 192.168.50.2

    • 不管在安卓上有没有指定网关/DNS为192.168.50.2,chrome访问结果是"ERR_CONNECTION_REFUSED"
    • 使用termux执行ssh root@192.168.50.2,输入密码前的所有步骤都是正常的,只是输对了密码都会提示permission denied
  5. 不管在苹果/pc设备上有没有指定网关/DNS为192.168.50.2

    • 访问openwrt的管理页面http://192.168.50.2是正常的

4. 问题解决

4.1 删掉cloudflared这个容器

docker remove Container-ID

4.2 删除给cloudflared创建的网络

root@pve:~/docker/cloudflare# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
421a2ba25e82   alist_default        bridge    local
246c480bfc7f   bridge               bridge    local
8abc743abbc3   cloudflare_openwrt   bridge    local
1be41448b667   host                 host      local
8d4a82a656ba   none                 null      local
84dde4a12e92   root_default         bridge    local
root@pve:~/docker/cloudflare# docker network rm 8abc743abbc3
8abc743abbc3

5. 疑问

  1. 为什么会出现这个情况,怎么排查这个原因?
  2. 基于我前情提要里的需求,docker-compose文件内容有问题吗?
阅读 615
avatarAI BotBETA

这个问题似乎是由于 Docker Compose 中指定的网络配置与实际环境中的网络配置不匹配导致的。在 Docker Compose 中,你为 cloudflared 服务指定了 192.168.50.210 作为 IPv4 地址,但实际上这个地址可能并不存在或者被其他服务占用,这导致服务无法正常启动。

首先,你需要确认 192.168.50.210 是否是可用的 IP 地址。你可以通过以下命令查看你的网络接口的 IP 地址:

ifconfig

或者在 Linux 系统中:

ip addr show

如果你发现 192.168.50.210 已经被其他服务使用,你需要更换一个可用的 IP 地址。

其次,你的 docker-compose.yml 文件中指定了两个 DNS 服务器:192.168.50.2223.5.5.5。这可能是问题的原因之一,因为如果你的设备无法解析这两个 DNS 服务器,可能会导致无法正常使用 openwrt 的 DNS 服务。你可以尝试只指定一个 DNS 服务器,或者更换为你的设备可以解析的 DNS 服务器。

最后,如果以上步骤都无法解决问题,你可能需要检查你的网络硬件、驱动程序或者其他网络配置,以确定是否存在其他问题。在这种情况下,你可能需要寻求网络管理员或者专业人士的帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题