家庭局域网 AIO 中在 docker-compose 指定容器联网方式导致只有安卓无法使用旁路由但是其他设备正常的问题
〇、这个问题原理没搞明白
最终只是使用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 启动后的表现
-
内网的所有指定网关/DNS 为
192.168.50.2的设备无法使用openwrt的 DNS 服务- 访问直连的链接(如 https://www.baidu.com)都会出现找不到 ip 的问题
-
过一会使用
docker ps -a- 发现
cloudflared这个容器已经Exit(1)了
- 发现
-
pc/苹果设备已经可以正常使用
openwrt的 DNS 服务了- 指定网关/DNS 为
192.168.50.2的设备,访问https://www.google.com是正常的
- 指定网关/DNS 为
-
此时安卓设备访问不了 openwrt 的 ip 地址:
192.168.50.2了- 不管在安卓上有没有指定网关/DNS 为
192.168.50.2,chrome 访问结果是"ERR_CONNECTION_REFUSED" - 使用
termux执行ssh [email protected],输入密码前的所有步骤都是正常的,只是输对了密码都会提示permission denied
- 不管在安卓上有没有指定网关/DNS 为
-
不管在苹果/pc 设备上有没有指定网关/DNS 为
192.168.50.2- 访问 openwrt 的管理页面
http://192.168.50.2是正常的
- 访问 openwrt 的管理页面
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. 疑问
- 为什么会出现这个情况,怎么排查这个原因?
- 基于我前情提要里的需求,
docker-compose文件内容有问题吗?
