使用 docker 运行 clash 作为旁路由

2024-02-16 10:31:55 +08:00
A01514035  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 的规则进行分流.

13373 次点击
所在节点   Linux  Linux
53 条回复
que01
que01
2024-02-16 10:35:43 +08:00
我还是觉得基于 dns 的分流更好用点,我现在用的 paopaodns+paopaogateway 感觉更舒适点。。。
mmr
mmr
2024-02-16 10:36:51 +08:00
订阅管理和更新怎么做呢
A01514035
A01514035
2024-02-16 10:47:58 +08:00
@mmr 使用了 proxy-provider ,在配置文件的 proxy-provider 中填入你的订阅地址,既会自动更新,也可以在网页 UI 中手动更新。
A01514035
A01514035
2024-02-16 10:48:37 +08:00
@que01 clash 用习惯了,现在全平台 clash 了,一套规则全处都可用。
mmr
mmr
2024-02-16 10:49:10 +08:00
多个订阅处理的咋样。
SenLief
SenLief
2024-02-16 10:51:41 +08:00
@que01 关键是基于 dns 分流你也要接入代理,除非你有隐蔽的 dns 服务商。
A01514035
A01514035
2024-02-16 10:52:08 +08:00
@mmr #5 完全没问题,不过需要稍微修改一下配置文件,在 proxy-provider 中添加多个订阅然后在后面的 proxygroup 中引用这些订阅。按照示例配置文件稍微修改下就可以。
Dk2014
Dk2014
2024-02-16 11:47:33 +08:00
这下我的 all in boom 有用了
路由器性能太弱鸡了,clash 跑不动,还容易干扰家里人其他设备体验
A01514035
A01514035
2024-02-16 11:52:33 +08:00
@Dk2014 我也是 all in boom 同时是 docker 的强烈爱好者
fdghjk
fdghjk
2024-02-16 11:58:12 +08:00
5rOw6YW36L6j
fdghjk
fdghjk
2024-02-16 11:58:20 +08:00
泰酷辣
fdghjk
fdghjk
2024-02-16 11:59:30 +08:00
clash 直接能处理 dns 请求吗?那要这样的话 就没必要单独弄个 openwrt 做旁路由了 直接一个 clash 就可以了吗?
fdghjk
fdghjk
2024-02-16 12:02:32 +08:00
如果直接将主路由的网管设置成 192.168.3.23 会怎么样呢?假如 clash 挂了 那主路由就连不上网了吧

但是如果主路由不设置的话就需要每个设备单独设置网关,有点麻烦 但是也不麻烦吧 但是有的设备不方便自定义网关啥的 也不是很方便感觉
A01514035
A01514035
2024-02-16 12:03:14 +08:00
@fdghjk 按道理可以,我在配置文件里开启了 dns 同时也 iptables 转发了 dns 请求,你可以把 dns 也设置为这个 ip 试试,我觉得可以。
qwerthhusn
qwerthhusn
2024-02-16 12:03:24 +08:00
自己亲测,用 OpenWrt+OpenClash 做旁路由,设备翻墙没问题,看油管啥的都 OK

但是电视上的流媒体平台登不上去,后来加上 mosdns 就行了
A01514035
A01514035
2024-02-16 12:04:04 +08:00
@fdghjk 这个我没有尝试过,我都是手动改的。还需要大家一起探索。
fdghjk
2024-02-16 12:06:30 +08:00
@qwerthhusn mosdns 咋用 我感觉好复杂
anubu
2024-02-16 13:20:36 +08:00
最近也在折腾家庭网络,更倾向透明网关的叫法。也用过 macvlan 网络跑 clash 容器,目前暂时用虚拟机跑 dae 做透明网关。折腾起来还是有不少细节:
- 透明网关多了一跳,导致去程和回程路由不一致。有些应用可能会有奇怪问题。
- 内网有自建 dns 服务,希望管控和分析所有终端的 dns 请求。终端的 dns 指向透明网关就无法识别分析了,不指向透明网关就失去了 dns 分流作用,只能基于 IP 分流。另外,为了对抗 dns 污染和泄露,dns 服务器的上游也需要借助透明网关。拓扑上似乎很难梳理通顺。
- 透明网关容器使用 macvlan ,所在宿主机却无法联通透明网关。似乎是 docker iptables 相关的一些配置问题。即如果仅用一台 docker 主机跑所有服务,包括透明网关,宿主机上的其他容器无法简单的使用该透明网关。所以使用独立虚拟机跑透明网关服务也是一个选择,有可能的话,还是希望能把 dns 管控分析和透明网关打包成一个镜像,一键部署。
- PT 下载问题,透明网关场景需要对 PT 下载有一些调整和适配。
- 其他拓扑尝试,有看到把透明网关放到主路由上游的拓扑,即主路由多 wan 上联的逻辑。似乎也可以试试看。
A01514035
2024-02-16 16:07:14 +08:00
@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 的规则?
A01514035
2024-02-16 16:07:53 +08:00
@anubu 楼上回复了你的评论,没有艾特成功...

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

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

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

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

© 2021 V2EX