使用 docker 运行 clash 作为旁路由

282 天前
 A01514035

刚刚看到论坛里有人在问 ubuntu 旁路由 clash 的问题,正好我自己就是使用 docker 运行 clash 作为局域网中的旁路由使用的,配合网页 UI 进行管理,非常的丝滑好用。主要是利用 docker+macvlan+clash(mihomo)+iptables 来实现的旁路由功能。 https://github.com/UntaggedRui/clashindocker

制作 docker 镜像并创建容器

获取代码

git clone https://github.com/UntaggedRui/clashindocker
cd clashindocker
cp example.yml config.yml

更改地址 docker-compose.yml 中的 ipv4_address 为你的 ip 地址.

更改 config.yml 中的 proxy-provider 的 url 为你的机场订阅地址.

启动容器

docker compose up -d 假设你的 docker 容器 ip 地址为 192.168.3.23. 通过 http://192.168.3.23:9090/ui/可以管理 clash,进行切换节点等.后端地址为 http://192.168.3.23:9090/,密码为 yourpassword.

在同一个局域网下,将其他机器的网关设置为 192.168.3.23 就可以实现该机器的所有流量都经过 clash,并且根据 clash 的规则进行分流.

11934 次点击
所在节点    Linux
53 条回复
anubu
281 天前
@A01514035 感谢分享。
- 终端使用公共 dns 但仍命中了透明网关的 dns 分流,应该是透明网关劫持了 udp 53 流量,透明网关一般会默认配置。
- macvlan 这个解决方法有点印象,应该就是这样的。使用 docker 本意是尽量降低对宿主机的操作和依赖,有点抗拒这个解决方法。

内网 dns 仍是一个问题,主要有内部 dns 解析重写、终端 dns 请求管控分析、基于域名的分流这 3 个需求,需要探索一个合理的网络拓扑。
A01514035
281 天前
@anubu #21 确实,我想起来了,我的透明网关中使用 iptables 劫持了 53 端口的流量转发到了 1053 也就是 clash dns 监听的端口。
cm123
281 天前
mosdns 进行国内外域名分流,国外域名直接 fakeip ,少一次 dns 解析。
Bssn
281 天前
请问,如果 clash 搭建在群晖的 docker 里,是不是就不能用指定网关的方式进行旁路由了?或许只能使用 clash 的局域网共享通过 9090 端口代理?
A01514035
281 天前
@Bssn 如果群辉的 docker 能支持 macvlan 就能通过指定网关的方式进行旁路由。 通过 7890 端口共享 http/https/socks5 代理是都可以的。
wheat0r
281 天前
@Bssn #24 群晖支持 macvlan ,需要手动创建或者用 compose
julyclyde
281 天前
把任何软件用 docker 运行起来
把任何软件用 javascript/golang/rust 重写一遍
都能写一篇文章
问题是:到底增加了什么信息量呢?
A01514035
281 天前
@julyclyde 我可能是第一点的那种人。。。我 server 上几乎没有直接部署的软件了,我 nginx 都用的 docker compose
因为讨厌在宿主机里安装各种软件可能会有版本冲突而且各种文件在犄角旮旯里很烦
WhatTheBridgeSay
281 天前
过时的操作,只能代理 TCP ,本来就只有一个二进制不会产生依赖污染的东西还多此一举用了 docker ,DNS 重定向居然也是用的 iptables 这种无差别劫持 53 的方法。早在几年前使用 clash 承载网关代理的最佳实践就已经应该转向使用 tun 了,楼主这套方案放在 5 年前那确实有可能是最佳实践
A01514035
281 天前
@WhatTheBridgeSay 感谢指教。tun 目前我只在 mac 上用过,确实好用,linux 上还没有使用,按照你这种说法 tun 确实要更加好一些。
julyclyde
281 天前
@A01514035 有问题应该去解决问题啊,而不是掩盖问题啊
V1Eerie
281 天前
安卓无法指定 ipv6 网关导致 v6 路由只能走主网关,使用的时候有点难受,要是什么时候能像 Windows 一样指定 ipv6 网关就好了。
seers
281 天前
*不推荐/过时的教程* Clash 已经全面切换到 TUN 设备,工作在 OSI 三层,如果需要 docker 运行,需要带上--privileged --network host 参数
A01514035
281 天前
@julyclyde 我是之前不知道这个,经过大家一个号才知道,并没有掩盖问题 等我有空了再看一下 tun 的旁路由使用方式
A01514035
281 天前
经过大家一个号-> 经过大家指点以后
arfaWong
281 天前
目前是 PVE + LXC Debian + sing-box
journalist
280 天前
@WhatTheBridgeSay Clash 的 TUN 网关支持 IPv6 吗?
A01514035
280 天前


@journalist 看这个日志,应该是支持的吧。
julyclyde
280 天前
@seers
@A01514035
但如果不用 docker 就没这破事了
所以问题在 docker 啊
danshan
280 天前
@mmr 我的方案你看看是不是可以参考. 虽然我用的是 surge, 不过也是订阅了 2 家的服务, 避免一家跑路了全完蛋的风险.
大体思路是, 自己用 surgio 去写一个配置, 然后通过 surgio 去配置多个服务商.
整个过程通过 github (建个 private repo) 的 action 去定期执行, 最终生成的配置文件推送到阿里云的 OSS. surge 订阅 OSS 的配置即可.
其中 surgio 的作用:
1, 从不同的服务商拉配置, 合并
2, 根据自己的模板生成规则和配置
3. 推送生产的配置到 oss.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX