webooru
webooru copied to clipboard
【瞎折腾】Clash For Merlin记录 · ZiGma
【瞎折腾】Clash For Merlin记录 · ZiGma
ZiGma
【瞎折腾】Clash For Merlin 记录
ZiGma
【瞎折腾】Clash For Merlin 记录
瞎折腾
字数统计: 2,776 阅读时长: 13 min
2020/05/09 Share
-
-
-
-
-
Clash For Merlin
设备:华硕 AC-86U
固件:KoolShare 改版 Merlin 384.16
Clash 版本:0.19
1.0 版 可以和 UU 加速器共存,并且 Switch 裸连可以达到 B(根据当前网络决定)
2.0 版 比较满意的版本,可以与 UU 加速器共存,Switch 裸连无异常,王者荣耀等游戏的延迟保持在 30ms 以下;
前言
之前尝试使用 KOP-XIAO 的Clash-Merlin在 AC86U 上安装,但是他的教程相对比较简单,并且有很多端口进行了自定义,在尝试使用透明代理过程中走了不少弯路,因此在此记录自己折腾的过程。
准备工作
- Win 系统下——Winscp 和 Xshell 或者同类软件;Mac 下——Termius 或者同类软件。
- 利用
uname -a
命令查看路由器架构,AC86U 为 armV8。 - 在Clash 项目地址中下载与路由器架构对应的最新 Clash 文件,解压后重命名为
clash
。 - Country.mmdb 文件,虽然会在运行 Clash 时自动下载,但是速度不敢恭维,建议先行下载。
- config.yaml 配置文件,根据自己的机场或者 VPS 设置,如果可行可以在 Gitlab 利用私有 Token 实现托管(下面会讲)。
安装
-
利用 ssh 连接路由器,利用以下命令创建文件夹,并赋予执行权限;
mkdir /jffs/clash/ chmod +x /jffs/clash/
-
Win 系统下直接利用 Winscp 将上述 clash、Country.mmdb、config.yaml 上传到
/jffs/clash/
文件夹内;Mac 系统下可以利用以下命令分别上传;
scp *本地文件路径* *路由器登陆用户名*@*路由器地址*:/jffs/clash/
- 使用时,省略*。
-
赋予 clash 文件执行权限;
chmod +x /jffs/clash/clash
-
测试运行;
/jffs/clash/clash -d /jffs/clash/
如果配置无误,可以看到 Clash 开始跑并输出 log。
透明代理
透明代理下的 config.yaml 配置
Merlin 直接跑 Clash 相对于 OpenClash 和 KoolClash 无法自动更新托管配置。
所以我们可以将 config.yaml 文件存放在 Gitlab 的私有库中,然后利用脚本进行更新,当然也可以增加定时任务进行定时更新。
Gitlab 的私有库 RAW 文件规则(Github 不支持私有库拉取 RAW)
以下带【】部分为需要自己填写项
> https://gitlab.com/api/v4/projects/【Project ID】/repository/files/【config.yaml】/raw?ref=master&private_token=【私有Token】 >
Project ID:可在以下位置找到。
[
](https://raw.githubusercontent.com/ZiGmaX809/Clash-For-Merlin/master/Project ID.png)
config.yaml:无需变更名称,直接在仓库根目录创建,否则下载下来还需要重命名;
私有 Token:需要自己申请 Token。
配置文件编写
---
port: 7890 #默认http代理端口
socks-port: 7891 #默认socks代理端口
redir-port: 7892 #默认redir端口
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090 #控制台端口
experimental:
interface-name: eth0 #(尝试)TUN模式下,流量出口,路由器为WAN口
ignore-resolve-fail: true #忽略DNS解析失败
dns:
enable: true
ipv6: false
listen: 0.0.0.0:55 #监听路由器55端口
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
#enhanced-mode: redir-host
nameserver:
- 114.114.114.114
- 223.5.5.5
- tls://dns.rubyfish.cn:853
fallback:
- 114.114.114.114
- tls://dns.rubyfish.cn:853
- 8.8.8.8
tun:
enable: true #(尝试)TUN模式
proxy-provider: #使用proxy-provider对不同的规则进行订阅,以Dler为例
Dler:
type: http
path: ./Dler.yaml
url: https://dler.cloud/subscribe/token?protocols=ss&list=clash&lv=3&noarea=cn
interval: 3600
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 300
...
Proxy Group:
- name: Auto - UrlTest
type: url-test
use:
- Dler
url: http://www.gstatic.com/generate_204
interval: "1800"
- name: Proxy
type: select
use:
- Dler
proxies:
- Auto - UrlTest
- DIRECT
...
Rule:
...
重启 Clash 脚本
创建重启 Clash 脚本并赋予执行权限;
touch /jffs/clash/restart.sh
chmod +x /jffs/clash/restart.sh
vi /jffs/clash/restart.sh
打开后输入以下内容;
if $(pidof clash) > /dev/null; then
kill $(pidof clash)
fi
start-stop-daemon -S -b -x /jffs/clash/clash -m -p /tmp/clash.pid -- -d /jffs/clash/
后续直接运行/jffs/clash/restart.sh
即可重启 Clash。
更新 config.yaml 脚本
创建更新 config.yaml 脚本并赋予执行权限;
touch /jffs/clash/update.sh
chmod +x /jffs/clash/update.sh
vi /jffs/clash/update.sh
打开后输入以下内容;
wget -O /jffs/clash/config.yaml 'https://gitlab.com/api/v4/projects/【Project ID】/repository/files/【config.yaml】/raw?ref=master&private_token=【私有Token】'
/bin/sh /jffs/clash/restart.sh
即为你 Gitlab 托管地址。
后续直接运行/jffs/clash/update.sh
即可更新 config.yaml 配置文件。
iptables 规则
常规规则
新建 sh 脚本以自动添加 iptables 规则,并赋予执行权限,并添加规则;
touch /jffs/clash/clash-iptable.sh
chmod +x /jffs/clash/clash-iptable.sh
vi /jffs/clash/clash-iptable.sh
添加
#排除ssh端口
iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT
#在nat表中首行添加排除来源为192.168.2.65规则(尚在尝试)
iptables -t nat -I PREROUTING -s 192.168.2.65/32 -j RETURN
#新建名为CLASH的CHAIN
iptables -t nat -N CLASH
#在CLASH的CHAIN中末行添加排除去向为192.168.0.0/16网段规则
iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
#在CLASH的CHAIN中末行添加转发所有tcp数据至7892端口
iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports 7892
#在nat表中添加所有流量转向CLASH的CHAIN
iptables -t nat -A PREROUTING -p tcp -j CLASH
其中iptables -t nat -I PREROUTING -s 192.168.2.65/32 -j RETURN
是跳过192.168.2.65
IP,因为这是 Switch 的地址,最近在玩动物之森,需要用到 UU 加速器。(该功能尚在尝试阶段)
代理 udp 数据
后续发现一个大神的 iptable 配置项目地址,可以代理 UDP;
稍作修改后可以和 UU 加速器共存,并且不再是 F 而是未开代理的 B。
- 需要注意的是,需将 Switch 的网络设置如下:
- ip:192.168.2.100 和 192.168.2.101;
- 子网掩码:255.255.255.0;
- 网关:192.168.2.1;
- DNS:223.5.5.5;114.114.114.114;
- 或者自定义设置后,修改下面配置中的 ip 地址,将其排除代理。
#!/bin/sh
proxy_port=7892
lan_ip=192.168.2.1
ssh_port=22
# ports redirect for clash except port 22 for ssh connection
iptables -t nat -A PREROUTING -p tcp --dport $ssh_port -j ACCEPT
# redirect for clash except Nintendo Switch
iptables -t nat -I PREROUTING -s 192.168.2.100/32 -j RETURN
iptables -t nat -I PREROUTING -s 192.168.2.101/32 -j RETURN
#new
iptables -t nat -N CLASH
iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 169.254.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t nat -A CLASH -d 224.0.0.0/4 -j RETURN
iptables -t nat -A CLASH -d 240.0.0.0/4 -j RETURN
#redirect to Clash
iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports $proxy_port
iptables -t nat -A PREROUTING -j CLASH
# fake-ip rules
iptables -t nat -A OUTPUT -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports $proxy_port
#DNS
#iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination $lan_ip:55
# udp
modprobe xt_TPROXY
proxy_fwmark="0x162"
proxy_table="0x162"
ip rule add fwmark $proxy_fwmark table $proxy_table
ip route add local default dev lo table $proxy_table
iptables -t mangle -N CLASH
iptables -t mangle -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A CLASH -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A CLASH -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A CLASH -d 240.0.0.0/4 -j RETURN
# redirect to Clash
iptables -t mangle -A CLASH -p udp -j TPROXY --on-port $proxy_port --tproxy-mark $proxy_table
iptables -t mangle -A PREROUTING -p udp -j CLASH
# redirect for clash except Nintendo Switch
iptables -t mangle -I PREROUTING -s 192.168.2.100/32 -j RETURN
iptables -t mangle -I PREROUTING -s 192.168.2.101/32 -j RETURN
# fake-ip rules
iptables -t mangle -A OUTPUT -p udp -d 198.18.0.0/16 -j MARK --set-mark $proxy_fwmark
绕过 Clash 处理 udp 数据
仅让 Clash 处理 DNS 地址为路由器地址(192.168.2.1)的客户端请求;
在不需要代理的设备中将 DNS 地址设置为非路由器地址即可绕过代理;
甚至该模式下无需固定 Switch 的 ip,可以稳定到达 B,以及王者荣耀在延迟测试的情况下保持在 21~24ms。
#!/bin/sh
proxy_port=7892
lan_ip=192.168.2.1
ssh_port=22
# ports redirect for clash except port 22 for ssh connection
iptables -t nat -A PREROUTING -p tcp --dport $ssh_port -j ACCEPT
# new
iptables -t nat -N CLASH
iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 169.254.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t nat -A CLASH -d 224.0.0.0/4 -j RETURN
iptables -t nat -A CLASH -d 240.0.0.0/4 -j RETURN
# redirect to Clash and except udp
iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports $proxy_port
iptables -t nat -A PREROUTING ! -p udp -j CLASH
# DNS
iptables -t nat -I PREROUTING -p udp -m udp -d $lan_ip --dport 53 -j DNAT --to-destination $lan_ip:55
更改 dnsmasq 端口(Clash 的 DNS 服务监听非 53 端口则无需修改)
如果前面配置文件中 Clash 监听了 DNS 服务器的 53 端口,但是 53 端口已经被 dnsmasq 占用,所以要将 dnsmasq 端口更改或直接关闭。
touch /jffs/configs/dnsmasq.conf.add
vi /jffs/configs/dnsmasq.conf.add
将以下内容添加进去,0 为关闭 DNS 功能,当然也可以更改为 5353 等端口;
port=0
我这边直接关闭 dnsmasq 的 DNS 解析功能,仅留存 DHCP 功能;
service restart_dnsmasq
重启 dnsmasq 服务。
其他
需要在路由器—内部网络中将 DNS 地址设置为路由器地址,至此连接至改路由器的所有设备都将会科学上网。
开机启动
不知道是 AC86U 的原因还是命令行位置不对,如果使用start-stop-daemon
是无法在路由器重启时启动 Clash。
所以我是使用&
来进行后台运行;
vi /jffs/scripts/wan-start
在最后添加
/bin/sh /jffs/clash/clash-iptable.sh
/jffs/clash/clash -d /jffs/clash/ &
尚存问题
-
与 UU 加速器共存(已解决)
之前尝试联系 Merlin 开发者以更新 iptable 版本来使用 - m owner -pid-owner 直接排除 UU 加速器的端口,但是被以稳定性无法保障为由驳回。
解决思路:将 Switch 固定 ip,并在 iptable 表中排除。
-
网络环境中游戏问题及无需代理的设备(已解决)
归根结底还是 udp 数据类型的问题,fake-ip 模式下,由于原有 iptable 规则所有流量都会经过 Clash,所以无法合理区分诸如王者荣耀等游戏以及微信视频聊天的 udp 数据,从而会导致游戏丢包以及掉线。
解决思路:
- 在 iptable 中仅转发对 fake-ip 请求 DNS 的 udp 数据,对 tcp 以及外部 udp 的数据进行 RETURN 处理;
- 使用 redir-host;
原文作者:ZiGma
原文链接:[http://www.zigma.cc/2020/05/09/【瞎折腾】Clash For Merlin 记录 /](http://www.zigma.cc/2020/05/09/【瞎折腾】Clash For Merlin 记录 /)
发表日期:[May 9th 2020, 8:19:34 pm](http://www.zigma.cc/2020/05/09/【瞎折腾】Clash For Merlin 记录 /)
更新日期:[June 4th 2020, 3:37:20 pm](http://www.zigma.cc/2020/05/09/【瞎折腾】Clash For Merlin 记录 /)
版权声明:本文采用知识共享署名 - 非商业性使用 4.0 国际许可协议进行许可
-
Previous Post
[
【JSBox】Patterns - 能自定义花样文字的键盘脚本
](/2019/05/19/【JSBox】Patterns - 能自定义花样文字的键盘脚本 / "【JSBox】Patterns - 能自定义花样文字的键盘脚本")
提交
0 评论
来发评论吧~
加载更多...
Powered By Valine
v1.4.14
PV: :)
CATALOG
-
1. Clash For Merlin
- 1.1. 前言
- 1.2. 准备工作
- 1.3. 安装
-
1.4. 透明代理
-
1.4.1. 透明代理下的 config.yaml 配置
- 1.4.1.0.1. Gitlab 的私有库 RAW 文件规则(Github 不支持私有库拉取 RAW)
-
1.4.1. 透明代理下的 config.yaml 配置
-
2.
- 2.0.1. 配置文件编写
- 2.0.2. 重启 Clash 脚本
- 2.0.3. 更新 config.yaml 脚本
-
2.0.4. iptables 规则
- 2.0.4.1. 常规规则
- 2.0.4.2. 代理 udp 数据
- 2.0.4.3. 绕过 Clash 处理 udp 数据
- 2.0.5. 更改 dnsmasq 端口(Clash 的 DNS 服务监听非 53 端口则无需修改)
- 2.0.6. 其他
- 2.1. 开机启动
-
2.2. 尚存问题
- 2.2.0.1. 与 UU 加速器共存(已解决)
- 2.2.0.2. 网络环境中游戏问题及无需代理的设备(已解决)
- Archive
- Tag
- Cate
Total : 29
2020
- 05/09[【瞎折腾】Clash For Merlin 记录](/2020/05/09/【瞎折腾】Clash For Merlin 记录 /)
2019
- 05/19【JSBox】Patterns - 能自定义花样文字的键盘脚本
- 03/09【Python】建立自动签到签退工作流
2018
- 12/16【VBA】统计重复出现的姓名及出现次数
- 11/09【瞎折腾】树莓派 + Aria2 搭建简易媒体中心
- 09/08【奥德赛】西北大环线行程
- 08/25【杂物】旧物储藏间
- 08/24【JSBox】多图层制作渐变动画
- 07/23【iOS】百度输入法 GBoard 自用皮肤
- 07/21【JSBox】Light Store 第三方轻量商店
- 06/27【Hexo】从 Wordpress 转 Hexo 的那些深坑
- 06/26【JSBox】超轻量级 Aria2 客户端
- 06/26【JSBox】Palette 调色板
- 06/22[【JSBox】Days Pro](/2018/06/22/【JSBox】Days Pro/)
- 05/26[【JSBox】SysInfo Pro](/2018/05/26/【JSBox】SysInfo Pro/)
- 05/17【瞎折腾】梅林固件利用 entware 环境安装 Aria2
- 05/01【瞎折腾】frp+Aria2 实现远程下载管理
- 04/29【JSBox】利用 JSBox 在朋友圈斗图(二)
- 02/02利用 Documents 管理云盘文件
- 02/01【JSBox】利用 JSBox 在朋友圈斗图(一)
2017
- 12/09一键移除 Win10 此电脑中多余文件夹
- 11/09【VBA】利用 VBA 提取词库重复值
- 11/07自制 Potplayer 皮肤两例
- 10/28落格输入法配置相关
- 09/27【VBA】利用 VBA 提取内容并生成新文件
- 08/26【VBA】VBA + 正则表达式提取标题快速保存归档
- 08/16民事管辖案件中关于接受货币方的理解
- 08/16WordPress 升级优化
- 08/15CentOS 监控进程状态并自动重启
JSBox Hexo VPS 搬瓦工 CentOS VBA Python 皮肤 iOS 旅行 杂物 照片 瞎折腾 WIN10 合同 民间借贷 PotPlayer 落格 Wordpress
JSBox VPS VBA Python 旅行 瞎折腾 工作 Potplayer 皮肤 App Wordpress