使用 docker 运行 clash 作为旁路由

315 天前
 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 的规则进行分流.

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

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

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

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

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

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

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

© 2021 V2EX