刚刚看到论坛里有人在问 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 的规则进行分流.
1
que01 315 天前
我还是觉得基于 dns 的分流更好用点,我现在用的 paopaodns+paopaogateway 感觉更舒适点。。。
|
2
mmr 315 天前
订阅管理和更新怎么做呢
|
3
A01514035 OP @mmr 使用了 proxy-provider ,在配置文件的 proxy-provider 中填入你的订阅地址,既会自动更新,也可以在网页 UI 中手动更新。
|
5
mmr 315 天前
多个订阅处理的咋样。
|
7
A01514035 OP @mmr #5 完全没问题,不过需要稍微修改一下配置文件,在 proxy-provider 中添加多个订阅然后在后面的 proxygroup 中引用这些订阅。按照示例配置文件稍微修改下就可以。
|
8
Dk2014 314 天前 via Android
这下我的 all in boom 有用了
路由器性能太弱鸡了,clash 跑不动,还容易干扰家里人其他设备体验 |
10
fdghjk 314 天前
5rOw6YW36L6j
|
11
fdghjk 314 天前
泰酷辣
|
12
fdghjk 314 天前
clash 直接能处理 dns 请求吗?那要这样的话 就没必要单独弄个 openwrt 做旁路由了 直接一个 clash 就可以了吗?
|
13
fdghjk 314 天前
如果直接将主路由的网管设置成 192.168.3.23 会怎么样呢?假如 clash 挂了 那主路由就连不上网了吧
但是如果主路由不设置的话就需要每个设备单独设置网关,有点麻烦 但是也不麻烦吧 但是有的设备不方便自定义网关啥的 也不是很方便感觉 |
14
A01514035 OP @fdghjk 按道理可以,我在配置文件里开启了 dns 同时也 iptables 转发了 dns 请求,你可以把 dns 也设置为这个 ip 试试,我觉得可以。
|
15
qwerthhusn 314 天前
自己亲测,用 OpenWrt+OpenClash 做旁路由,设备翻墙没问题,看油管啥的都 OK
但是电视上的流媒体平台登不上去,后来加上 mosdns 就行了 |
17
fdghjk 314 天前
@qwerthhusn mosdns 咋用 我感觉好复杂
|
18
anubu 314 天前
最近也在折腾家庭网络,更倾向透明网关的叫法。也用过 macvlan 网络跑 clash 容器,目前暂时用虚拟机跑 dae 做透明网关。折腾起来还是有不少细节:
- 透明网关多了一跳,导致去程和回程路由不一致。有些应用可能会有奇怪问题。 - 内网有自建 dns 服务,希望管控和分析所有终端的 dns 请求。终端的 dns 指向透明网关就无法识别分析了,不指向透明网关就失去了 dns 分流作用,只能基于 IP 分流。另外,为了对抗 dns 污染和泄露,dns 服务器的上游也需要借助透明网关。拓扑上似乎很难梳理通顺。 - 透明网关容器使用 macvlan ,所在宿主机却无法联通透明网关。似乎是 docker iptables 相关的一些配置问题。即如果仅用一台 docker 主机跑所有服务,包括透明网关,宿主机上的其他容器无法简单的使用该透明网关。所以使用独立虚拟机跑透明网关服务也是一个选择,有可能的话,还是希望能把 dns 管控分析和透明网关打包成一个镜像,一键部署。 - PT 下载问题,透明网关场景需要对 PT 下载有一些调整和适配。 - 其他拓扑尝试,有看到把透明网关放到主路由上游的拓扑,即主路由多 wan 上联的逻辑。似乎也可以试试看。 |
19
A01514035 OP @anubu
>> 终端的 dns 指向透明网关就无法识别分析了,不指向透明网关就失去了 dns 分流作用,只能基于 IP 分流。 我的内网机器网关指向 docker clash 容器,dns 使用的公共 dns ,在 docker clash 容器中的日志显示的是 level=info msg="[TCP] 192.168.2.3:48962 --> www.google.com:80 match DomainSuffix(google.com) using 谷歌学术[xfss_🇭🇰 香港 IEPL 01 | x4]" 按照原理应该是只能基于 IP 分流但是日志显示域名分流我也还没清楚为啥。 >> 宿主级无法联通透明网关这个问题可以通过在宿主机创建一个 macvlan 解决。 https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access 。 >> PT 下载问题,我目前还没玩过,应该可以通过规则来解决?要么是通过 clash 的规则要么是通过 iptables 的规则? |
21
anubu 314 天前
@A01514035 感谢分享。
- 终端使用公共 dns 但仍命中了透明网关的 dns 分流,应该是透明网关劫持了 udp 53 流量,透明网关一般会默认配置。 - macvlan 这个解决方法有点印象,应该就是这样的。使用 docker 本意是尽量降低对宿主机的操作和依赖,有点抗拒这个解决方法。 内网 dns 仍是一个问题,主要有内部 dns 解析重写、终端 dns 请求管控分析、基于域名的分流这 3 个需求,需要探索一个合理的网络拓扑。 |
22
A01514035 OP @anubu #21 确实,我想起来了,我的透明网关中使用 iptables 劫持了 53 端口的流量转发到了 1053 也就是 clash dns 监听的端口。
|
23
cm123 314 天前 via Android
mosdns 进行国内外域名分流,国外域名直接 fakeip ,少一次 dns 解析。
|
24
Bssn 314 天前
请问,如果 clash 搭建在群晖的 docker 里,是不是就不能用指定网关的方式进行旁路由了?或许只能使用 clash 的局域网共享通过 9090 端口代理?
|
25
A01514035 OP @Bssn 如果群辉的 docker 能支持 macvlan 就能通过指定网关的方式进行旁路由。 通过 7890 端口共享 http/https/socks5 代理是都可以的。
|
27
julyclyde 314 天前
把任何软件用 docker 运行起来
把任何软件用 javascript/golang/rust 重写一遍 都能写一篇文章 问题是:到底增加了什么信息量呢? |
28
A01514035 OP @julyclyde 我可能是第一点的那种人。。。我 server 上几乎没有直接部署的软件了,我 nginx 都用的 docker compose
因为讨厌在宿主机里安装各种软件可能会有版本冲突而且各种文件在犄角旮旯里很烦 |
29
WhatTheBridgeSay 314 天前
过时的操作,只能代理 TCP ,本来就只有一个二进制不会产生依赖污染的东西还多此一举用了 docker ,DNS 重定向居然也是用的 iptables 这种无差别劫持 53 的方法。早在几年前使用 clash 承载网关代理的最佳实践就已经应该转向使用 tun 了,楼主这套方案放在 5 年前那确实有可能是最佳实践
|
30
A01514035 OP @WhatTheBridgeSay 感谢指教。tun 目前我只在 mac 上用过,确实好用,linux 上还没有使用,按照你这种说法 tun 确实要更加好一些。
|
32
V1Eerie 314 天前
安卓无法指定 ipv6 网关导致 v6 路由只能走主网关,使用的时候有点难受,要是什么时候能像 Windows 一样指定 ipv6 网关就好了。
|
33
seers 314 天前 1
*不推荐/过时的教程* Clash 已经全面切换到 TUN 设备,工作在 OSI 三层,如果需要 docker 运行,需要带上--privileged --network host 参数
|
35
A01514035 OP 经过大家一个号-> 经过大家指点以后
|
36
arfaWong 314 天前
目前是 PVE + LXC Debian + sing-box
|
37
journalist 313 天前
@WhatTheBridgeSay Clash 的 TUN 网关支持 IPv6 吗?
|
38
A01514035 OP |
40
danshan 312 天前 1
@mmr 我的方案你看看是不是可以参考. 虽然我用的是 surge, 不过也是订阅了 2 家的服务, 避免一家跑路了全完蛋的风险.
大体思路是, 自己用 surgio 去写一个配置, 然后通过 surgio 去配置多个服务商. 整个过程通过 github (建个 private repo) 的 action 去定期执行, 最终生成的配置文件推送到阿里云的 OSS. surge 订阅 OSS 的配置即可. 其中 surgio 的作用: 1, 从不同的服务商拉配置, 合并 2, 根据自己的模板生成规则和配置 3. 推送生产的配置到 oss. |
41
A01514035 OP @danshan 我目前用的 substore( https://hub.docker.com/r/xream/sub-store)来整合订阅的,在配合 clash 里的 filter 和 surge 里面的 policy-regex-filter 来提取出需要的节点,也很方便。
|
43
yyysuo 312 天前
目前是借鉴 paopao 的思路,主路由跑 mosdns 分流 ,国内直出,国外给 sing-box vm 返回 fakeip ,主路由添加静态路由,转发 fakeip 段、国外 dns ip 、电报 ip 到 sing-box vm 。国内真直连,暴爽。
|
44
thadyo 310 天前
想请教下楼主,通过 gateway 连接 docker macnet 的代理方式,跟直接在服务器上安装 clash 做 vps ,然后直接通过代理 ip:port 的方式这二者有什么区别?单纯好奇想了解一下。
|
45
DD0a48YwCzYUCQ8y 310 天前
感谢分享,希望在项目下标明下,适合的架构和系统,我用的 arm64 架构的启动失败,怀疑包没有适配
|
47
A01514035 OP @thadyo 前者是透明代理,所有的流量都经过 clash 。后者是 socks5 代理或者 http 代理,只有遵循系统代理的应用才会走代理。例如 docker pull 等命令你直接通过 IP:PORT 的方式是没法走代理的得修改 dockerd 的配置才行。但是用 gateway 连接 docker macnet 的代理方式可以让 docker pull 走代理。
|
48
DD0a48YwCzYUCQ8y 309 天前
@A01514035 感谢大佬,研究了下,不用 iptables 就行,最新的 clash 用 tun 模式直接🛫了,就是`config`文件有点麻烦,还好,通过互联网也给搞定了,大佬的分组感觉有点少,找了网上 dns 分流+黑名单模式,🛫了
|
49
A01514035 OP @yongso #48 是的,我的方式二 就是 tun 模式。 分流我是根据自己的需求写的简单的,因为我都是垃圾机场没有什么奈非节点。。。可以自己稍微改造下就行。
|
52
JusticeLanding 130 天前
为什么我的 debian 里装了个 openwrt 的 docker ,openwrt 网关指向主路由,openclash 配好了。手机笔记本网关指向 openwrt 能正常魔法。debian 的网关改成 openwrt 的 IP ,debian 上不了网? debian 要怎么设置?
|
53
halida 57 天前
项目没有了?有人推荐一个傻瓜式 docker compose up ,后面设置 ss 服务器就可以跑的配置吗?
|