前置条件1: 有自己的非大陆服务器, 网络质量较好(不需要 大陆-服务器 的, 是服务器本身的网络质量).
前置条件2: 稍微懂点linux命令.
前置条件3: 使用clash内核/clash meta内核访问网络, 如路由器, 台式机, 安卓手机等.
前置条件4: 对netflix spotify等流媒体无解锁需求. 如果有需求, 需写规则rules.
老友前几天发来两个链接, 讲的是 clash relay 和 tunnels.
为什么可以绕过机场审计?
因为12会有机场审计, 但机场得到的 将要去连接的地址 全都是3. 而3是自己搭的肯定不会有审计.
我用的是clash meta内核, 不管是路由器上, 我的windows电脑上, 还是已root过的安卓手机上. clash meta内核相较clash premium那些分支, 一些设置比较人性化, 之前的博文也提到过.
所以这篇文章就只写clash meta内核的, 当然, 其它clash内核也可以用, 因为tunnels节点不是clash meta的专属功能. 如果你使用cfw这样的客户端, 应该也能实现, 你得写到mixin里面试试.
一、服务端
先把服务端搭好, 就是 [3自己搭的服务器] 这部分. 服务端我也直接用的是clash meta的内核, 当然用v2ray内核也可以.
我下载了 clash.meta-linux-amd64-compatible-v1.14.5.gz 文件.
2) 解压之后, 把clash这个文件上传到服务器的一个位置, 如 /root/clash下.
改名为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内核的报错提示.
#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 看了下出站情况, 目的地都是机场的国内服务器. 完美. 提醒一句, 机场落地(梯子节点)建议选和你自建的服务器相同的国家/地区, 如: 自己搭的服务器在新加坡, 那么机场节点也选择新加坡, 距离近的看不出多少差距, 但速度确实能有很大的提升. 可以试试远的, 例如美国或者英国这种, 就能明显地看出速度和延迟上的差异.
搞定, 收工!