准备工作
- 安装并配置 Alpine
- 下载 Clash.Meta
- 下载 geosite 和 geoip 文件(geoip 可以使用 only-cn-private 版的,但请务必把文件名修改为
geoip.dat
!)
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
在本地创建
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.yaml
、geoip.dat
和 geosite.dat
上传到刚刚创建的文件夹中。
Clash.Meta 控制面板
下载
前往Github下载Clash.Meta控制面板文件
Clash.Meta控制面板下载地址
安装
将下载好的压缩包放入 /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 项目组已经搭建好了的静态网页,可以直接使用。
Clash.Meta 控制面板但是由于目前存在一些未知的奇怪BUG,使用 chromium 内核的浏览器无法通过输入IP和端口连接到clash的外部控制端口
如果在本地搭建了控制面板UI的话,却又可以进入。
有可能是上面规则的问题,嗯。。。无所谓了,懒癌发作~~~
所以建议在本地搭建的控制面板UI。
rule-providers规则有时更新会出现超出文本限制,更新失败的情况,前往规则查看,手动点击一下更新即可。
终端设置
最后直接在终端设置网关和DNS为alpine的IP地址就可以顺利的科学上网了。
当然如果家中设备比较多的话,可以在主路由的DHCP里给终端下发的网关和DNS设置为alpine的IP地址。
9 条评论
clash meta 自动配置 iptables 这块官方有文档说明吗?
你可以在Clash-Meta的github仓库里找一下看看
This program can only be run on AMD64 processors with v2 microarchitecture support
clashmeta有适应旧一点的版本不,openclash的meta内核我的就可以用啊
已找到解决办法 就是把alpine的虚拟机cpu选host
感谢提醒,我已经在文章开头多添加了一行提醒
谢谢大神教程,但是DNS还是会泄漏,有好的办法吗
检测DNS泄露的网站测出来泄露很多都是因为他们的检测域名没有被分流,需要你自己手动收集域名然后去添加,DNS泄露大部分情况下不会影响日常使用。
运行一段时间后(尤其是设备都休息后)就无法代理上网了,必须 重启。
建议查看一下日志