V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bjzhou1990
V2EX  ›  宽带症候群

分享一个自己写的 Clash 网关 docker

  •  
  •   bjzhou1990 · 2023-08-23 11:26:34 +08:00 · 4353 次点击
    这是一个创建于 466 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 链接: https://github.com/bjzhou/clash_meta_gateway

    以下所有功能都由 Clash Meta 内核实现:

    • 域名嗅探
    • 自动标记流量
    • 自动配置 iptables 接管所有流量
    • 自动更新订阅( Proxy Provider 实现)
    • 支持 GeoIP/GeoSite 规则分流
    • 内建 DNS ,并支持 GeoSite/规则组进行 DNS 分流

    实际上 docker 里只做了一件事,就是启动 clash meta

    这里贴几段我觉得有意思的配置

    rules:
      - GEOIP,private,DIRECT  
      - GEOSITE,private,DIRECT
      - GEOSITE,apple,DIRECT
      - GEOSITE,microsoft@cn,DIRECT
      - GEOSITE,category-games@cn,DIRECT
    
      - GEOSITE,CN,DIRECT
      - GEOIP,CN,DIRECT
    

    这里创建了一个 direct.yaml 文件

    然后在主配置文件里引入

    rule-providers:
      direct:
        type: file
        behavior: classical
        path: "./direct.yaml"
    

    配置 DNS ,默认走海外 DNS ,匹配 direct 规则的走国内 DNS

    dns:
      enable: true
      listen: 0.0.0.0:53
      ipv6: false
      enhanced-mode: redir-host 
      prefer-h3: true
      nameserver:
       - https://dns.cloudflare.com/dns-query
       - tls://8.8.8.8:853
       - tls://1.1.1.1:853
      nameserver-policy:
        "rule-set:direct":
          - https://dns.alidns.com/dns-query
          - 119.29.29.29
          - 223.5.5.5
      default-nameserver:
       - 223.5.5.5
    

    主配置文件规则匹配

    rules:
      - RULE-SET,direct,DIRECT
      - GEOSITE,netflix,NETFLIX
      - GEOSITE,openai,AI 服务
      - GEOSITE,anthropic,AI 服务
      - NOT,((DST-PORT,80/8080/443/8443)),非常用端口
    
      - MATCH,默认
    

    这样做保证了 DNS 分流和规则分流的统一

    另外这配置里有个非常用端口,部分机场或者中转流量会导致非常用端口无法连接,可以在这里选择直连或自建机场

    另外再分享一个给自己用的 VPS 一键部署脚本: https://github.com/bjzhou/xray-server-setup

    脚本功能:

    • 开启 bbr 加速
    • 启动 SS 代理,加密方式 2022-blake3-aes-128-gcm ,密码随机
    • 利用 xray 的域名嗅探配合 mosdns 的逻辑控制实现所有 Cloudflare CDN 的网站 IP 优选(需要在/etc/mosdns/config.yaml 里手动修改优选 IP ),实现 Netflix DNS 解锁,解锁用的 DNS 服务器我是在爬虫网站白嫖的😂
    第 1 条附言  ·  2023-08-26 18:30:47 +08:00
    更新改用 TUN 模式,DNS 默认开启 fake ip, 不再依赖 iptables, 顺便写了个不使用 docker 的一键部署脚本
    第 2 条附言  ·  2023-08-30 14:40:08 +08:00
    因为不想做旁路由,所以把主路由切到官方原版 OpenWRT 了,openclash 实在不好用,自己写了个一键安装脚本,openwrt 分支
    22 条回复    2023-09-12 16:34:12 +08:00
    bao3
        1
    bao3  
       2023-08-23 12:16:06 +08:00
    牛啊,实现了我一直想要的。
    emtry
        2
    emtry  
       2023-08-23 13:01:26 +08:00
    请问国内 dns 可以设置走自建 ADG 吗
    bbbb
        3
    bbbb  
       2023-08-23 13:20:40 +08:00 via iPhone
    学习一下
    customsshen
        4
    customsshen  
       2023-08-23 13:28:32 +08:00
    docker 启动后再关闭会导致宿主机无法上网,重启可解决
    请问是重启宿主机还是 docker 镜像?
    bjzhou1990
        5
    bjzhou1990  
    OP
       2023-08-23 13:45:39 +08:00
    @customsshen 重启宿主机
    bjzhou1990
        6
    bjzhou1990  
    OP
       2023-08-23 13:46:52 +08:00
    @emtry 可以在/data/config.yaml 里自己修改
    emtry
        7
    emtry  
       2023-08-23 23:57:25 +08:00
    bug1:网卡默认 eth0 ,不是自动匹配,其他网卡直接起不来
    emtry
        8
    emtry  
       2023-08-23 23:58:30 +08:00
    bug2:订阅地址出现&,替换错误,订阅不了
    bjzhou1990
        9
    bjzhou1990  
    OP
       2023-08-24 09:39:26 +08:00
    @emtry #8 好的
    msn1983aa
        10
    msn1983aa  
       2023-08-24 13:09:06 +08:00
    还需要楼主打磨一下,bug 少一点了来试试,目前都是用虚拟机跑 openwrt
    EvineDeng
        11
    EvineDeng  
       2023-08-24 13:48:14 +08:00
    你要不用 ADD ,这镜像压缩后体积还能再减小至少 18MiB 。
    ylsf
        12
    ylsf  
       2023-08-24 14:05:14 +08:00 via Android
    mark ,有空试试
    bjzhou1990
        13
    bjzhou1990  
    OP
       2023-08-24 21:57:33 +08:00
    @emtry #8 两个问题都更新了,但是未做测试
    bjzhou1990
        14
    bjzhou1990  
    OP
       2023-08-24 21:58:42 +08:00
    @EvineDeng 用不用 ADD 文件都会拷到镜像里去的,我把 clash 二进制文件和其他需要的文件打成一个压缩包了,体积减少了一点
    emtry
        15
    emtry  
       2023-08-24 23:06:35 +08:00
    eth0 还是没自动换到 ens
    mikewang
        16
    mikewang  
       2023-08-25 00:28:58 +08:00
    这种情况使用 Docker 可能会有一些问题:
    比如 alpine 的 iptables 其实是 iptables-legacy ,如果主机系统使用的是 iptables-nft ( nftables ),docker 内的 iptables 会打乱主机的网络。

    另外一个建议是 shell 脚本可以 trap 一下 SIGTERM ,这样 docker stop 的时候就可以自动执行清理工作。
    Navee
        17
    Navee  
       2023-08-25 17:19:29 +08:00
    宿主机网卡不需要开混杂模式吗
    8675bc86
        18
    8675bc86  
       2023-08-25 19:46:25 +08:00
    感觉简单的问题复杂化,clash 哪需要 docker 跑。
    bjzhou1990
        19
    bjzhou1990  
    OP
       2023-08-26 18:31:40 +08:00
    更新改用 TUN 模式,DNS 默认开启 fake ip, 不再依赖 iptables, 顺便写了个不使用 docker 的一键部署脚本
    BaseException
        20
    BaseException  
       2023-09-12 14:49:56 +08:00
    有技术有实践,感谢楼主的项目,回去试试看。我最近使用 OpenWRT 中的 Sha.dow.socksR Plus+ 总是遇到 ERR_NAME_NOT_RESOLVED 的问题,有一天晚上过后,第二天早上起来手机断开了 wifi 无法连上 wifi 。登录进路由器发现有网 但是是 ssr plus+导致的 wifi 无法连接,最终把这货关掉了……

    OP 可以帮我分析一下吗
    bjzhou1990
        21
    bjzhou1990  
    OP
       2023-09-12 15:56:35 +08:00
    @BaseException DNS 解析有问题,试试改一下 ssrp 的 DNS 设置,或者用 chinadns, mosdns 之类的 dns 插件
    BaseException
        22
    BaseException  
       2023-09-12 16:34:12 +08:00
    @bjzhou1990 #21 我有修改 dns 配置,几个内置的 dns 策略都切换过。另外只用了 dnsmasq ,没有使用 chinadns mosdns 的插件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:23 · PVG 14:23 · LAX 22:23 · JFK 01:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.