本文是以 Clash.Meta 内核为基础,原版Clash无法使用本文中的配置!

如果是PVE虚拟机创建Alpine建议CPU使用host

准备工作

关于Alpine的安装可以参考这篇文章

  • 安装并配置 Alpine
  • 下载 Clash.Meta
  • 下载 geosite 和 geoip 文件(geoip 可以使用 only-cn-private 版的,但请务必把文件名修改为 geoip.dat !)

Clash.Meta 一定要下载对应架构的,不然无法使用!特别注意x86请下载compatible版本

Clash.Meta 的下载下来的默认是GZ压缩包,下载后需要将其解压,重命名为 Clash-Meta 后放入 /usr/local/bin/目录下。
Clash.Meta 下载地址
geosite 下载地址
geoip-only-cn-private 下载地址

安装与配置

安装之后配置透明代理所需要的软件。

apk add iptables ip6tables

给clash添加执行权限

chmod +x /usr/local/bin/Clash-Meta

【proxy-providers形式的订阅连接】和一些机场提供的【clash订阅配置连接】不是同一个东西!

如果机场没有提供proxy-providers形式的订阅连接,就需要订阅转换后才可以使用!

订阅转换.png
在本地创建 config.yaml 文件,并将下方内容复制粘贴。
并且自行修改proxy-providers的订阅连接。
默认启用了节点筛选,建议按需求自行更改。

mixed-port: 10801                      # 本地混合代理(http和socks5合并)端口
geodata-mode: true                     #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
allow-lan: true                        # 允许局域网连接(false/true)
bind-address: '*'                      # 监听IP白名单(当allow-lan:true),只允许列表设备,'*'表示全部设备
mode: rule                             # clash工作模式(rule/global/direct,meta暂不支持script)
log-level: info                        # 日志等级(info/warning/error/debug/silent)
ipv6: false                            # ip6开关,当为false时,停止解析hostanmes为ip6地址


external-controller: 0.0.0.0:9090      # 控制器监听地址
external-ui: /etc/Clash-Meta/ui        # http服务路径,可以放静态web网页。
                                       # 如yacd的控制面板,可通过`http://{{external-controller}}/ui`直接使用
                                       # 也可以直接使用别人搭建好了的,博主就是这样。
                                       # 所以这里直接注释掉了


tproxy-port: 9898                      # Enable the TPROXY listener

iptables:                              # 自动配置iptables
  enable: true
  inbound-interface: eth0

interface-name: eth0                   # 出口网卡名称
routing-mark: 6666                     # 流量标记(仅Linux)

sniffer:                               #【Meta专属】sniffer域名嗅探器
  enable: true                         # 嗅探开关
  sniffing:                            # 嗅探协议对象:目前支持tls/http
    - tls
    - http

  skip-domian:                         # 列表中的sni字段,保留mapping结果,不通过嗅探还原域名,优先级比force-domain高
    - 'Mijia Cloud'                    # 米家设备,建议加
    - 'dlg.io.mi.com'
    - '+.apple.com'                    # 苹果域名,建议加
  # - '*.baidu.com'                    # 支持通配符

  force-domain:                        # 需要强制嗅探的域名,默认只对IP嗅探
  # - ''                               # 去掉注释后等于全局嗅探
    - '+.google.com'
    - '+.v2ex.com'

dns:
  enable: true                         # DNS开关(false/true)
  listen: 0.0.0.0:53                   # DNS监听地址
  ipv6: false                          # IP6解析开关;如果为false,将返回ip6结果为空

  enhanced-mode: redir-host           # DNS模式(redir-host/fake-ip)

  nameserver:                         # 默认DNS服务器,支持udp/tcp/dot/doh/doq
    - tls://1.12.12.12:853
    - tls://223.5.5.5:853

  fallback:                           # 回落DNS服务器,支持udp/tcp/dot/doh/doq
    - 'tls://1.1.1.1:853#DNS'         #【Meta专属】"#DNS"代表该DNS服务器通过名为"DNS"的proxy Group访问
    - 'tls://9.9.9.9:853#DNS'

  fallback-filter:                    # 回落DNS服务器过滤
    geoip: true                       # 为真时,不匹配为geoip规则的使用fallback返回结果
    geoip-code: CN                    # geoip匹配区域设定
    geosite:                          #【Meta专属】设定geosite某分类使用fallback返回结果
      - gfw
      - greatfire
    ipcidr:                           # 列表中的ip使用fallback返回解析结果
      - 0.0.0.0/8
      - 10.0.0.0/8
      - 100.64.0.0/10
      - 127.0.0.0/8
      - 169.254.0.0/16
      - 172.16.0.0/12
      - 192.0.0.0/24
      - 192.0.2.0/24
      - 192.88.99.0/24
      - 192.168.0.0/16
      - 198.18.0.0/15
      - 198.51.100.0/24
      - 203.0.113.0/24
      - 224.0.0.0/4
      - 233.252.0.0/24
      - 240.0.0.0/4
      - 255.255.255.255/32
      - 74.125.127.102/32
      - 74.125.155.102/32
      - 74.125.39.102/32
      - 74.125.39.113/32
      - 209.85.229.138/32
      - 128.121.126.139/32
      - 159.106.121.75/32
      - 169.132.13.103/32
      - 192.67.198.6/32
      - 202.106.1.2/32
      - 202.181.7.85/32
      - 203.161.230.171/32
      - 203.98.7.65/32
      - 207.12.88.98/32
      - 208.56.31.43/32
      - 209.145.54.50/32
      - 209.220.30.174/32
      - 209.36.73.33/32
      - 211.94.66.147/32
      - 213.169.251.35/32
      - 216.221.188.182/32
      - 216.234.179.13/32
      - 37.61.54.158/32
      - 4.36.66.178/32
      - 46.82.174.68/32
      - 59.24.3.173/32
      - 64.33.88.161/32
      - 64.33.99.47/32
      - 64.66.163.251/32
      - 65.104.202.252/32
      - 65.160.219.113/32
      - 66.45.252.237/32
      - 69.55.52.253/32
      - 72.14.205.104/32
      - 72.14.205.99/32
      - 78.16.49.15/32
      - 8.7.198.45/32
      - 93.46.8.89/32
      - 37.61.54.158/32
      - 190.93.247.4/32
      - 190.93.246.4/32
      - 190.93.245.4/32
      - 190.93.244.4/32
      - 65.49.2.178/32
      - 189.163.17.5/32
      - 23.89.5.60/32
      - 49.2.123.56/32
      - 54.76.135.1/32
      - 77.4.7.92/32
      - 118.5.49.6/32
      - 159.24.3.173/32
      - 188.5.4.96/32
      - 197.4.4.12/32
      - 220.250.64.24/32


proxy-groups:
  - name: Proxy
    type: select                                    # 手动代理组
    use: 
      - SUB-PROXY
    proxies:
      - Automatic
    filter: '香港|日本|新加坡|台湾|韩国|美国'           # 节点筛选,支持正则表达式

  - name: "Automatic" 
    type: url-test                                  # 通过httping URL 自动切换延迟最低的节点
    use: 
      - SUB-PROXY
    tolerance: 50                                   # 容差值:节点差值低于设定值时,不自动切换
    url: 'http://cp.cloudflare.com/generate_204'    # 用来测ping的地址
    interval: 300                                   # 测ping时间(秒)
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: DNS                                       #【Meta专属】DNS代理组,配合上文"DNS配置"使用
    type: url-test                                  # 可任意name/type,此处仅做举例
    use: 
      - SUB-PROXY
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Microsoft
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - DIRECT
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Apple
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - DIRECT
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Google
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - Proxy
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Telegram
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - Proxy
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Netflix
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - Proxy
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Disney
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - Proxy
    filter: '香港|日本|新加坡|台湾|韩国|美国'

  - name: Bahamut
    type: select
    use: 
      - SUB-PROXY
    proxies:
      - Proxy
    filter: '台湾'


proxy-providers:
  SUB-PROXY:                                          # 订阅名字,每个订阅不可重名,如果修改需要连同上方proxy-groups中use使用的一同修改
    type: http
    url: "这里是你转换出来的订阅地址"                     # 订阅连接,如果没有proxy-providers订阅连接,可以去使用订阅转换,输出为【Node List】!
    interval: 86400                                   # 订阅自动更新时间
    path: ./subscribe/SUB-PROXY.yaml                  # 订阅节点存放位置
    health-check:
      enable: true
      interval: 300
      url: http://cp.cloudflare.com/generate_204        


rule-providers:

  Microsoft:
    type: http
    behavior: classical
    path: ./rule-providers/Microsoft.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Microsoft/Microsoft.yaml
    interval: 86400

  Apple:
    type: http
    behavior: classical
    path: ./rule-providers/Apple.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Apple/Apple.yaml
    interval: 86400

  SystemOTA:
    type: http
    behavior: classical
    path: ./rule-providers/SystemOTA.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/SystemOTA/SystemOTA.yaml
    interval: 86400

  Google:
    type: http
    behavior: classical
    path: ./rule-providers/Google.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Google/Google.yaml
    interval: 86400

  YouTube:
    type: http
    behavior: classical
    path: ./rule-providers/YouTube.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/YouTube/YouTube.yaml
    interval: 86400

  YouTubeMusic:
    type: http
    behavior: classical
    path: ./rule-providers/YouTubeMusic.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/YouTubeMusic/YouTubeMusic.yaml
    interval: 86400

  Telegram:
    type: http
    behavior: classical
    path: ./rule-providers/Telegram.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Telegram/Telegram.yaml
    interval: 86400

  Netflix:
    type: http
    behavior: classical
    path: ./rule-providers/Netflix.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Netflix/Netflix.yaml
    interval: 86400

  Disney:
    type: http
    behavior: classical
    path: ./rule-providers/Disney.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Disney/Disney.yaml
    interval: 86400

  Bahamut:
    type: http
    behavior: classical
    path: ./rule-providers/Bahamut.yaml
    url: https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Bahamut/Bahamut.yaml
    interval: 86400


rules:
  
  # 使用代理更新rule-providers
  - DOMAIN-SUFFIX,githubusercontent.com,Proxy
  
  #【Meta专属】GEOSITE规则
  - GEOSITE,category-ads-all,REJECT

  # rule-providers 分流规则
  # 微软
  - RULE-SET,Microsoft,Microsoft

  # 苹果
  - RULE-SET,Apple,Apple
  - RULE-SET,SystemOTA,Apple

  # 谷歌
  - RULE-SET,Google,Google
  - RULE-SET,YouTube,Google
  - RULE-SET,YouTubeMusic,Google

  # 电报
  - RULE-SET,Telegram,Telegram

  # 奈飞
  - RULE-SET,Netflix,Netflix

  # 迪士尼
  - RULE-SET,Disney,Disney

  # 巴哈姆特
  - RULE-SET,Bahamut,Bahamut

  # GEOSITE规则 国内直连,国外代理
  - GEOSITE,geolocation-cn,DIRECT
  - GEOSITE,geolocation-!cn,Proxy

  # GEOIP规则
  - GEOIP,private,DIRECT
  - GEOIP,cn,DIRECT

  # 兜底规则
  - MATCH,Proxy

创建文件夹 /etc/Clash-Meta

mkdir /etc/Clash-Meta

config.yamlgeoip.datgeosite.dat 上传到刚刚创建的文件夹中。

Clash.Meta 控制面板

下载

前往Github下载Clash.Meta控制面板文件
Clash.Meta控制面板下载地址
Clash.Meta控制面板UI.png

安装

将下载好的压缩包放入 /etc/Clash-Meta 文件夹中。
输入下方命令将压缩包解压,并重命名为 ui,然后删除压缩包。

cd /etc/Clash-Meta
unzip Razord-meta-gh-pages.zip
mv Razord-meta-gh-pages ui
rm -rf Razord-meta-gh-pages.zip

确认 Clash.Meta 的 config.yaml 配置文件中,external-ui 对应的路径为 /etc/Clash-Meta/ui

修改内核参数

复制下方内容粘贴到命令行

cat > /etc/sysctl.conf << EOF

net.ipv4.ip_forward = 1
fs.file-max = 1000000

EOF

sysctl -p

Clash.Meta 系统服务

在命令行中输入下方命令,将Clash-Meta添加为系统服务。

cat > /etc/init.d/Clash-Meta << EOF
#!/sbin/openrc-run

name="Clash-Meta"
description="Clash-Meta daemon, A rule-based proxy in Go."

command="/usr/local/bin/Clash-Meta"
command_args="-d /etc/Clash-Meta"
pidfile="/run/${RC_SVCNAME}.pid"

command_background=true

depend() {
    need net
    after net
}

EOF

再输入下方,给创建的Clash-Meta服务进程添加可执行权限。

chmod +x /etc/init.d/Clash-Meta

最后将Clash-Meta服务进程启动,并设置为开机自启

rc-service Clash-Meta start
rc-update add Clash-Meta

登录 Clash.Meta 控制面板

现在我们可以通过 http://IP:port/ui 访问Clash.Meta的控制面板了。
例如安装Clash.Meta的旁路网关IP为 192.168.1.2 ,config.yaml中的控制端口为9090
那么地址就是 http://192.168.1.2:9090/ui
网页打开后需要再次输入对应的局域网IP和端口才可使用。
Clash.Meta 外部控制.png

Tips: 如果之后控制面板有更新啥内容可以直接下载压缩包之后覆盖即可

下面这是 Clash.Meta 项目组已经搭建好了的静态网页,可以直接使用。
Clash.Meta 控制面板
但是由于目前存在一些未知的奇怪BUG,使用 chromium 内核的浏览器无法通过输入IP和端口连接到clash的外部控制端口
如果在本地搭建了控制面板UI的话,却又可以进入。
有可能是上面规则的问题,嗯。。。无所谓了,懒癌发作~~~
所以建议在本地搭建的控制面板UI。

rule-providers规则有时更新会出现超出文本限制,更新失败的情况,前往规则查看,手动点击一下更新即可。
Clash.Meta Rule.png

终端设置

最后直接在终端设置网关和DNS为alpine的IP地址就可以顺利的科学上网了。
当然如果家中设备比较多的话,可以在主路由的DHCP里给终端下发的网关和DNS设置为alpine的IP地址。

参考

Clash Wiki
Clash.Meta Wiki
Alpine Linux Wiki

最后修改:2023 年 02 月 14 日
如果觉得我的文章对你有用,请随意赞赏