前置条件1: 有自己的非大陆服务器, 网络质量较好(不需要 大陆-服务器 的, 是服务器本身的网络质量).
前置条件2: 稍微懂点linux命令.
前置条件3: 使用clash内核/clash meta内核访问网络, 如路由器, 台式机, 安卓手机等.
前置条件4: 对netflix spotify等流媒体无解锁需求. 如果有需求, 需写规则rules.
https://luxirty.com/article/chain-proxy-powered-by-clash-tunnels
relay无法中转udp流量, 新的tunnels能解决这个问题. (20240813 更新: 此说法有误, 根据文档, relay 支持传输 UDP,前提是代理链的头尾节点都要支持 UDP over TCP。目前支持 udp 的协议有 vmess/vless/trojan/ss/ssr/tuic)
最终能实现这种效果:
1自己的网络 <-> 2机场 <-> 3自己搭的服务器
这中间有三环, 中间都是加密的, 所以可以无视机场审计. 有点类似tor那种网络, 但简单一些.
为什么可以绕过机场审计?
因为12会有机场审计, 但机场得到的 将要去连接的地址 全都是3. 而3是自己搭的肯定不会有审计.
我用的是clash meta内核, 不管是路由器上, 我的windows电脑上, 还是已root过的安卓手机上. clash meta内核相较clash premium那些分支, 一些设置比较人性化, 之前的博文也提到过.
所以这篇文章就只写clash meta内核的, 当然, 其它clash内核也可以用, 因为tunnels节点不是clash meta的专属功能. 如果你使用cfw这样的客户端, 应该也能实现, 你得写到mixin里面试试.
一、服务端
先把服务端搭好, 就是 [3自己搭的服务器] 这部分. 服务端我也直接用的是clash meta的内核, 当然用v2ray内核也可以.
1) 从releases中下载符合自己服务器架构的版本: https://github.com/MetaCubeX/Clash.Meta/releases 我倾向于下载带版本号的版本, 而不是alpha版本. 另外服务器或老电脑可能要用 -compatible 版本, 作者wiki我该使用哪个版本
我下载了 clash.meta-linux-amd64-compatible-v1.14.5.gz 文件.
2) 解压之后, 把clash这个文件上传到服务器的一个位置, 如 /root/clash下.
3) 下载geoip.dat文件. 我推荐精简版本.
只含有局域网和大陆ip的精简版: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
改名为GeoIP.dat并传到服务器的 /root/clash下. 这个文件夹下现在就有两个文件了. 注意clash文件的执行权限要给.
4) 在这个目录下新建一个config.yaml 里面写的是服务端的配置. log-level: error
#socks-port: 853
#allow-lan: true
#bind-address: 0.0.0.0
#authentication:
#- users:password
geodata-mode: true
geox-url:
geoip: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
listeners:
- name: myvmess
type: vmess
port: 853
listen: 0.0.0.0
users:
- username: 1
uuid: ff7b825c-0b86-456d-9e93-412f90846552
alterId: 0
udp: true
cipher: auto
dns:
enable: true
nameserver:
- 'https://8.8.4.4:443/dns-query'
- 'https://8.8.8.8:443/dns-query'
default-nameserver:
- '8.8.8.8'
- '8.8.4.4'
rules:
- GEOIP,PRIVATE,REJECT
- MATCH,DIRECT
上面有五行注释起来了, 这五行的意思是, 公网开放一个socks5端口, 但是这种代理方式无加密, 我实际测试发现无法绕过机场审计. 用vmess就可以, trojan没试.
如果你只需要socks5, 那就把整段listeners全部删掉. 如果你需要vmess或者其它加密代理, 那就把上面那五行注释删掉.
你可以进行第5步了.
*老友还测试过vmess+grpc trojan+grpc, 得出的结论是vmess下载最快, 两个grpc速度(千兆宽带)不到50MB/s, 但延迟较低. 如果你需要grpc, 请搜索 network: grpc 和 grpc-opts
5) 创建一个systemd服务, 以实现clash服务端在开机时能自启动.
进入/etc/systemd/system/文件夹, 新建一个文件, 起名为clash.service 这个clash就是服务的名字. 自己也可以换成别的如meta.service
文件内容如下, 如果改动了clash文件夹的位置, 注意修改ExecStart:
[Unit]
Description=clash
After=network.target
[Service]
ExecStart=/root/clash/clash -d /root/clash
WorkingDirectory=/root/clash
Restart=always
[Install]
WantedBy=default.target
然后打开控制台, 执行
systemctl daemon-reload
并设置clash服务为开机自启:
systemctl enable clash
启动clash服务:
systemctl start clash
或者
service clash start
启动后可以通过 netstat -lntp 命令来看 配置文件中指定的853端口 是否已经开启.
*如果开启成功就进行下一步, 如果没开启成功, 去/var/log/下打开syslog文件, 翻到最底下来看clash内核的报错提示.
6) 从https://github.com/MetaCubeX/Clash.Meta/releases 下载适合自己电脑/路由器/安卓手机的版本. 电脑启动靠bat手动运行(有黑框不能关)或者alwaysup小工具创建服务(无黑框)自启, 路由器用openclash调起内核运行, 安卓手机有clash meta for magisk, 之前的文章提到过这个magisk模块, 就不多讲了. 将主程序放到正确的位置后, 开始config.yaml配置:
#port/tun/dns等配置, 根据自己的需求来写, 不一定要和我的一致. 下面是win10电脑的演示配置
mixed-port: 0
port: 0
redir-port: 0
tproxy-port: 0
socks-port: 0
allow-lan: false
bind-address: 127.0.0.1 #'*'
mode: rule
log-level: silent
ipv6: true
external-controller: '127.0.0.1:90'
secret: 'yacd_is_my_Password1'
external-ui: dashboard
enable-process: false
geodata-loader: standard #memconservative #standard
geodata-mode: true
geox-url:
geoip: https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat
geosite: ''
mmdb: ''
unified-delay: true
sniffer:
enable: false
profile:
store-selected: true
store-fake-ip: false
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 192.168.255.1/24
nameserver:
- tcp://127.0.0.1:53
default-nameserver:
- 223.6.6.6
proxy-server-nameserver:
- https://1.12.12.12:443/dns-query
- https://120.53.53.53:443/dns-query
tun:
enable: true
stack: gvisor
device: tun
auto-route: true
auto-detect-interface: true
dns-hijack:
- 192.168.255.2:53
#演示配置结束, 上面的内容仅供参考. 下面才是重点:
proxies:
- name: "隧道"
type: vmess #类型和服务器端保持一致
server: 127.0.0.1 #就是127.0.0.1, 别改成自己的服务器
port: 7777
uuid: ff7b825c-0b86-456d-9e93-412f90846552 #和服务器端保持一致, 下面两个参数也一样
alterId: 0
cipher: auto
udp: true #一定要加, 不然udp会直连, 踩过的大坑
tunnels:
- network: [tcp, udp]
#127.0.0.1别动, 端口号要和上面proxies里的port保持一致.
address: 127.0.0.1:7777
#下面写你自己建的服务器:端口, 不要管协议, 协议在上面proxies"隧道"里, 它会带着协议那些参数进隧道, 这里就只写你自建的服务器:端口
target: 1.1.1.1:853
proxy: Proxy
proxy-providers:
机场1:
type: http
url: "机场的订阅链接https://blabla"
path: 1.yaml
interval: 21600
health-check:
enable: false
url: https://www.gstatic.com/generate_204
interval: 300
机场2:
type: http
url: "第二个机场的订阅链接https://blabla"
path: 2.yaml
interval: 21600
health-check:
enable: false
url: https://www.gstatic.com/generate_204
interval: 300
proxy-groups:
- name: Tunnels
type: select
proxies:
- 隧道
- Proxy
- name: Proxy
type: select
proxies:
- 机场1
- 机场2
- name: 机场1
type: select
use:
- 1
filter: ^((?!(直连|官网|群组|套餐|剩余|更新订阅|截止|邀请)).)*$ #剔除这些关键词的节点
- name: 机场2
type: select
use:
- 2
filter: ^((?!(直连|官网|群组|套餐|剩余|更新订阅|截止|邀请)).)*$
rules: #根据自己的喜好添加规则
- IP-CIDR,255.255.255.255/32,REJECT #给AdGuardHome拦截广告用的, AGH返回255的ip, clash reject阻断, 不然clash会认为是劫持, 会将广告域名流量拉进代理导致去广告失效. 之前的博文提到过这个大坑. 如果没有自建的dns则不需要这条, 删掉即可
- OR,((GEOIP,PRIVATE),(GEOIP,CN)),DIRECT #局域网或CN直连
- MATCH,Tunnels
看起来很复杂, 也确实很复杂, 当初还不懂的时候能给我绕晕..
proxies这里只写了一个127.0.0.1, 并带上了自建服务器中的type, cipher, alterId, uuid这四个参数, 它们要带进隧道的, 所以要和自建服务器的保持一致, 别写错了. 因为两个博主都没提到这个事, 搞得我折腾了很久也没搞定, 感谢老友帮忙.
proxy-providers没什么好说的, 就是自己的订阅链接, 如果自己只有一个机场, 那就只写一组即可, 把机场2那组删掉.
proxy-groups, 第一层Tunnels可选隧道还是直接走机场. 当自己的服务器挂了或者不想用隧道了, 就可以选Proxy改为走机场了.
第二层Proxy是选机场的, 如果上一层选了隧道, 那这里就是, 选择指定的机场和自己的服务器进行连接.
第三层可以选机场里的节点.
这三层就完全实现了, 在隧道和机场切换(开关隧道), 并能指定哪个机场中的哪个节点 和自己的服务器进行链接.
连上路由器ssh, 用 netstat -an 看了下出站情况, 目的地都是机场的国内服务器. 完美. 提醒一句, 机场落地(梯子节点)建议选和你自建的服务器相同的国家/地区, 如: 自己搭的服务器在新加坡, 那么机场节点也选择新加坡, 距离近的看不出多少差距, 但速度确实能有很大的提升. 可以试试远的, 例如美国或者英国这种, 就能明显地看出速度和延迟上的差异.
搞定, 收工!
0 条评论:
发表评论